qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] target/m68k: fix V flag for CC_OP_SUBx


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH] target/m68k: fix V flag for CC_OP_SUBx
Date: Wed, 14 Jun 2017 18:08:22 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0

On 06/14/2017 01:39 PM, Laurent Vivier wrote:
V flag for subtraction is:

    v = (res ^ src1) & (src1 ^ src2)

(see COMPUTE_CCR() in target/m68k/helper.c)

But gen_flush_flags() uses:

    v = (res ^ src2) & (src1 ^ src2)

The problem has been found with the following program:

         .global _start
_start:
         move.l  #-2147483648,%d0
         subq.l  #1,%d0
         jvc     1f
         move.l #1,%d1
         move.l #1,%d0
         trap #0
1:
         move.l #0,%d1
         move.l #1,%d0
         trap #0

It works fine (exit(1)) on real hardware, and with "-singlestep".

"-singlestep" uses gen_helper_flush_flags(), whereas
without "-singlestep", V flag is computed directly in
gen_flush_flags().

This patch updates gen_flush_flags() to have the same result
as with gen_helper_flush_flags().

Signed-off-by: Laurent Vivier<address@hidden>
---
  target/m68k/translate.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Henderson <address@hidden>


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]