[2/4] target-arm: Fix mixup in decoding of saturating add and sub

Submitted by Johan Bengtsson on Oct. 11, 2010, 8:18 a.m.

Details

Message ID 1286785138-20401-2-git-send-email-teofrastius@gmail.com
State New
Headers show

Commit Message

Johan Bengtsson Oct. 11, 2010, 8:18 a.m.
The thumb2 decoder contained a mixup between the bit controlling
doubling and the bit controlling if the operation was an add or a sub.

Signed-off-by: Johan Bengtsson <teofrastius@gmail.com>
---
 target-arm/translate.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Peter Maydell Oct. 13, 2010, 4 p.m.
On 11 October 2010 09:18, Johan Bengtsson <teofrastius@gmail.com> wrote:
> The thumb2 decoder contained a mixup between the bit controlling
> doubling and the bit controlling if the operation was an add or a sub.
>
> Signed-off-by: Johan Bengtsson <teofrastius@gmail.com>

I've confirmed against the ARM ARM that this patch matches
the T1 encodings of QADD, QDADD, QSUB, QDSUB, and
have tested that once the patch is applied qemu gives identical
results to the hardware for execution of these instructions.

Acked-by: Peter Maydell <peter.maydell@linaro.org>

> ---
>  target-arm/translate.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/target-arm/translate.c b/target-arm/translate.c
> index f39efc5..b530a53 100644
> --- a/target-arm/translate.c
> +++ b/target-arm/translate.c
> @@ -7713,9 +7713,9 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1)
>                 /* Saturating add/subtract.  */
>                 tmp = load_reg(s, rn);
>                 tmp2 = load_reg(s, rm);
> -                if (op & 2)
> -                    gen_helper_double_saturate(tmp, tmp);
>                 if (op & 1)
> +                    gen_helper_double_saturate(tmp, tmp);
> +                if (op & 2)
>                     gen_helper_sub_saturate(tmp, tmp2, tmp);
>                 else
>                     gen_helper_add_saturate(tmp, tmp, tmp2);
> --
> 1.7.0.4
>
>
>

Patch hide | download patch | download mbox

diff --git a/target-arm/translate.c b/target-arm/translate.c
index f39efc5..b530a53 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -7713,9 +7713,9 @@  static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1)
                 /* Saturating add/subtract.  */
                 tmp = load_reg(s, rn);
                 tmp2 = load_reg(s, rm);
-                if (op & 2)
-                    gen_helper_double_saturate(tmp, tmp);
                 if (op & 1)
+                    gen_helper_double_saturate(tmp, tmp);
+                if (op & 2)
                     gen_helper_sub_saturate(tmp, tmp2, tmp);
                 else
                     gen_helper_add_saturate(tmp, tmp, tmp2);