qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 0/4] target-m68k areg writeback


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH 0/4] target-m68k areg writeback
Date: Wed, 2 Nov 2016 13:07:08 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0


Le 01/11/2016 à 22:29, Richard Henderson a écrit :
> Here's the patch I almost wrote in the email, followed by
> a cleanup that allows cmpm to be written "nicely".
> 
> I can test this to some extent with the coldfire kernel,
> but of course coldfire can't excersise any of the tricky
> edge cases that m68000 can.
> 
> I'm particularly interested in edge cases like
> 
>       mov.b   address@hidden, address@hidden
>       movea   address@hidden, a0
>       movea   a0, address@hidden
> 
> The first two are not really useful and likely not show up
> in normal code.  The third may well do so; I think our
> current code gets it wrong, but this will get it right.

Checked on a real 68040:


stack:
        .long 0x3456789a
top:

        .text
        .globl _start
_start:
        lea top,%a0
        move.l %a0,-(%a0)

The result is:
    %a0 = top - 4
and top is stored in place of "0x3456789a".
[this is also what happens without your patches]

If I try this with you patch, I have a core dump:

m68k-linux-gnu-gcc -g -m68040 -nostartfiles  -nodefaultlibs  -nostdlib
-o move move.S

./m68k-linux-user/qemu-m68k -singlestep -d in_asm,cpu -cpu m68040
../qemu-m68k/tests/m68k/move

----------------
IN:
0x800000b8:  lea 0x800020d0,%a0

D0 = 00000000   A0 = 00000000   F0 = 0000000000000000 (           0)
D1 = 00000000   A1 = 00000000   F1 = 0000000000000000 (           0)
D2 = 00000000   A2 = 00000000   F2 = 0000000000000000 (           0)
D3 = 00000000   A3 = 00000000   F3 = 0000000000000000 (           0)
D4 = 00000000   A4 = 00000000   F4 = 0000000000000000 (           0)
D5 = 00000000   A5 = 00000000   F5 = 0000000000000000 (           0)
D6 = 00000000   A6 = 00000000   F6 = 0000000000000000 (           0)
D7 = 00000000   A7 = f6fff0a0   F7 = 0000000000000000 (           0)
PC = 800000b8   SR = 0000 ----- FPRESULT =            0
----------------
IN:
0x800000be:  movel %a0,address@hidden

D0 = 00000000   A0 = 800020d0   F0 = 0000000000000000 (           0)
D1 = 00000000   A1 = 00000000   F1 = 0000000000000000 (           0)
D2 = 00000000   A2 = 00000000   F2 = 0000000000000000 (           0)
D3 = 00000000   A3 = 00000000   F3 = 0000000000000000 (           0)
D4 = 00000000   A4 = 00000000   F4 = 0000000000000000 (           0)
D5 = 00000000   A5 = 00000000   F5 = 0000000000000000 (           0)
D6 = 00000000   A6 = 00000000   F6 = 0000000000000000 (           0)
D7 = 00000000   A7 = f6fff0a0   F7 = 0000000000000000 (           0)
PC = 800000be   SR = 0000 ----- FPRESULT =            0
qemu-m68k: tcg/tcg.c:653: tcg_temp_free_internal: Assertion `idx >=
s->nb_globals && idx < s->nb_temps' failed.
qemu-m68k: translate-all.c:175: tb_lock: Assertion `!have_tb_lock' failed.

Laurent



reply via email to

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