diff --git a/qemu/aarch64.h b/qemu/aarch64.h
index 961d3a17..718e548f 100644
--- a/qemu/aarch64.h
+++ b/qemu/aarch64.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_aarch64
 #define helper_divu_i32 helper_divu_i32_aarch64
 #define helper_divu_i64 helper_divu_i64_aarch64
-#define helper_double_saturate helper_double_saturate_aarch64
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_aarch64
 #define helper_exception_internal helper_exception_internal_aarch64
 #define helper_exception_return helper_exception_return_aarch64
diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h
index 8d793be8..b34c409a 100644
--- a/qemu/aarch64eb.h
+++ b/qemu/aarch64eb.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_aarch64eb
 #define helper_divu_i32 helper_divu_i32_aarch64eb
 #define helper_divu_i64 helper_divu_i64_aarch64eb
-#define helper_double_saturate helper_double_saturate_aarch64eb
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_aarch64eb
 #define helper_exception_internal helper_exception_internal_aarch64eb
 #define helper_exception_return helper_exception_return_aarch64eb
diff --git a/qemu/arm.h b/qemu/arm.h
index 5f8733ee..e9c480c7 100644
--- a/qemu/arm.h
+++ b/qemu/arm.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_arm
 #define helper_divu_i32 helper_divu_i32_arm
 #define helper_divu_i64 helper_divu_i64_arm
-#define helper_double_saturate helper_double_saturate_arm
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_arm
 #define helper_exception_internal helper_exception_internal_arm
 #define helper_exception_return helper_exception_return_arm
diff --git a/qemu/armeb.h b/qemu/armeb.h
index e515b832..834ff9cc 100644
--- a/qemu/armeb.h
+++ b/qemu/armeb.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_armeb
 #define helper_divu_i32 helper_divu_i32_armeb
 #define helper_divu_i64 helper_divu_i64_armeb
-#define helper_double_saturate helper_double_saturate_armeb
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_armeb
 #define helper_exception_internal helper_exception_internal_armeb
 #define helper_exception_return helper_exception_return_armeb
diff --git a/qemu/header_gen.py b/qemu/header_gen.py
index f53fbccb..fa7b15dd 100644
--- a/qemu/header_gen.py
+++ b/qemu/header_gen.py
@@ -1099,7 +1099,6 @@ symbols = (
     'helper_div_i64',
     'helper_divu_i32',
     'helper_divu_i64',
-    'helper_double_saturate',
     'helper_exception_bkpt_insn',
     'helper_exception_internal',
     'helper_exception_return',
diff --git a/qemu/m68k.h b/qemu/m68k.h
index 8b110810..42be1f3c 100644
--- a/qemu/m68k.h
+++ b/qemu/m68k.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_m68k
 #define helper_divu_i32 helper_divu_i32_m68k
 #define helper_divu_i64 helper_divu_i64_m68k
-#define helper_double_saturate helper_double_saturate_m68k
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_m68k
 #define helper_exception_internal helper_exception_internal_m68k
 #define helper_exception_return helper_exception_return_m68k
diff --git a/qemu/mips.h b/qemu/mips.h
index 434e35b7..23e14009 100644
--- a/qemu/mips.h
+++ b/qemu/mips.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_mips
 #define helper_divu_i32 helper_divu_i32_mips
 #define helper_divu_i64 helper_divu_i64_mips
-#define helper_double_saturate helper_double_saturate_mips
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_mips
 #define helper_exception_internal helper_exception_internal_mips
 #define helper_exception_return helper_exception_return_mips
diff --git a/qemu/mips64.h b/qemu/mips64.h
index 998d8dcc..7158d35f 100644
--- a/qemu/mips64.h
+++ b/qemu/mips64.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_mips64
 #define helper_divu_i32 helper_divu_i32_mips64
 #define helper_divu_i64 helper_divu_i64_mips64
-#define helper_double_saturate helper_double_saturate_mips64
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_mips64
 #define helper_exception_internal helper_exception_internal_mips64
 #define helper_exception_return helper_exception_return_mips64
diff --git a/qemu/mips64el.h b/qemu/mips64el.h
index 8a034451..44be4533 100644
--- a/qemu/mips64el.h
+++ b/qemu/mips64el.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_mips64el
 #define helper_divu_i32 helper_divu_i32_mips64el
 #define helper_divu_i64 helper_divu_i64_mips64el
-#define helper_double_saturate helper_double_saturate_mips64el
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_mips64el
 #define helper_exception_internal helper_exception_internal_mips64el
 #define helper_exception_return helper_exception_return_mips64el
diff --git a/qemu/mipsel.h b/qemu/mipsel.h
index 8bd0481f..f8e213a3 100644
--- a/qemu/mipsel.h
+++ b/qemu/mipsel.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_mipsel
 #define helper_divu_i32 helper_divu_i32_mipsel
 #define helper_divu_i64 helper_divu_i64_mipsel
-#define helper_double_saturate helper_double_saturate_mipsel
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_mipsel
 #define helper_exception_internal helper_exception_internal_mipsel
 #define helper_exception_return helper_exception_return_mipsel
diff --git a/qemu/powerpc.h b/qemu/powerpc.h
index 0d178c54..e77c2dbe 100644
--- a/qemu/powerpc.h
+++ b/qemu/powerpc.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_powerpc
 #define helper_divu_i32 helper_divu_i32_powerpc
 #define helper_divu_i64 helper_divu_i64_powerpc
-#define helper_double_saturate helper_double_saturate_powerpc
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_powerpc
 #define helper_exception_internal helper_exception_internal_powerpc
 #define helper_exception_return helper_exception_return_powerpc
diff --git a/qemu/riscv32.h b/qemu/riscv32.h
index e4bdf456..907e685a 100644
--- a/qemu/riscv32.h
+++ b/qemu/riscv32.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_riscv32
 #define helper_divu_i32 helper_divu_i32_riscv32
 #define helper_divu_i64 helper_divu_i64_riscv32
-#define helper_double_saturate helper_double_saturate_riscv32
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_riscv32
 #define helper_exception_internal helper_exception_internal_riscv32
 #define helper_exception_return helper_exception_return_riscv32
diff --git a/qemu/riscv64.h b/qemu/riscv64.h
index 7bb8d91d..5e87976f 100644
--- a/qemu/riscv64.h
+++ b/qemu/riscv64.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_riscv64
 #define helper_divu_i32 helper_divu_i32_riscv64
 #define helper_divu_i64 helper_divu_i64_riscv64
-#define helper_double_saturate helper_double_saturate_riscv64
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_riscv64
 #define helper_exception_internal helper_exception_internal_riscv64
 #define helper_exception_return helper_exception_return_riscv64
diff --git a/qemu/sparc.h b/qemu/sparc.h
index b4523031..af0c1488 100644
--- a/qemu/sparc.h
+++ b/qemu/sparc.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_sparc
 #define helper_divu_i32 helper_divu_i32_sparc
 #define helper_divu_i64 helper_divu_i64_sparc
-#define helper_double_saturate helper_double_saturate_sparc
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_sparc
 #define helper_exception_internal helper_exception_internal_sparc
 #define helper_exception_return helper_exception_return_sparc
diff --git a/qemu/sparc64.h b/qemu/sparc64.h
index 3592eaf9..e9edcb8e 100644
--- a/qemu/sparc64.h
+++ b/qemu/sparc64.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_sparc64
 #define helper_divu_i32 helper_divu_i32_sparc64
 #define helper_divu_i64 helper_divu_i64_sparc64
-#define helper_double_saturate helper_double_saturate_sparc64
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_sparc64
 #define helper_exception_internal helper_exception_internal_sparc64
 #define helper_exception_return helper_exception_return_sparc64
diff --git a/qemu/target/arm/helper.h b/qemu/target/arm/helper.h
index 00240b40..c51140b2 100644
--- a/qemu/target/arm/helper.h
+++ b/qemu/target/arm/helper.h
@@ -8,7 +8,6 @@ DEF_HELPER_3(add_saturate, i32, env, i32, i32)
 DEF_HELPER_3(sub_saturate, i32, env, i32, i32)
 DEF_HELPER_3(add_usaturate, i32, env, i32, i32)
 DEF_HELPER_3(sub_usaturate, i32, env, i32, i32)
-DEF_HELPER_2(double_saturate, i32, env, s32)
 DEF_HELPER_FLAGS_2(sdiv, TCG_CALL_NO_RWG_SE, s32, s32, s32)
 DEF_HELPER_FLAGS_2(udiv, TCG_CALL_NO_RWG_SE, i32, i32, i32)
 DEF_HELPER_FLAGS_1(rbit, TCG_CALL_NO_RWG_SE, i32, i32)
diff --git a/qemu/target/arm/op_helper.c b/qemu/target/arm/op_helper.c
index 28d351aa..47c32411 100644
--- a/qemu/target/arm/op_helper.c
+++ b/qemu/target/arm/op_helper.c
@@ -134,21 +134,6 @@ uint32_t HELPER(sub_saturate)(CPUARMState *env, uint32_t a, uint32_t b)
     return res;
 }
 
-uint32_t HELPER(double_saturate)(CPUARMState *env, int32_t val)
-{
-    uint32_t res;
-    if (val >= 0x40000000) {
-        res = ~SIGNBIT;
-        env->QF = 1;
-    } else if (val <= (int32_t)0xc0000000) {
-        res = SIGNBIT;
-        env->QF = 1;
-    } else {
-        res = val << 1;
-    }
-    return res;
-}
-
 uint32_t HELPER(add_usaturate)(CPUARMState *env, uint32_t a, uint32_t b)
 {
     uint32_t res = a + b;
diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c
index 90da8594..316451e9 100644
--- a/qemu/target/arm/translate.c
+++ b/qemu/target/arm/translate.c
@@ -8290,7 +8290,7 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn)
             tmp = load_reg(s, rm);
             tmp2 = load_reg(s, rn);
             if (op1 & 2)
-                gen_helper_double_saturate(tcg_ctx, tmp2, tcg_ctx->cpu_env, tmp2);
+                gen_helper_add_saturate(tcg_ctx, tmp2, tcg_ctx->cpu_env, tmp2, tmp2);
             if (op1 & 1)
                 gen_helper_sub_saturate(tcg_ctx, tmp, tcg_ctx->cpu_env, tmp, tmp2);
             else
@@ -10129,7 +10129,7 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn)
                 tmp = load_reg(s, rn);
                 tmp2 = load_reg(s, rm);
                 if (op & 1)
-                    gen_helper_double_saturate(tcg_ctx, tmp, tcg_ctx->cpu_env, tmp);
+                    gen_helper_add_saturate(tcg_ctx, tmp, tcg_ctx->cpu_env, tmp, tmp);
                 if (op & 2)
                     gen_helper_sub_saturate(tcg_ctx, tmp, tcg_ctx->cpu_env, tmp2, tmp);
                 else
diff --git a/qemu/x86_64.h b/qemu/x86_64.h
index e3f9df3e..33ee2432 100644
--- a/qemu/x86_64.h
+++ b/qemu/x86_64.h
@@ -1093,7 +1093,6 @@
 #define helper_div_i64 helper_div_i64_x86_64
 #define helper_divu_i32 helper_divu_i32_x86_64
 #define helper_divu_i64 helper_divu_i64_x86_64
-#define helper_double_saturate helper_double_saturate_x86_64
 #define helper_exception_bkpt_insn helper_exception_bkpt_insn_x86_64
 #define helper_exception_internal helper_exception_internal_x86_64
 #define helper_exception_return helper_exception_return_x86_64