qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] RISU TCG failures (AArch64 on AArch64)


From: Peter Maydell
Subject: Re: [Qemu-devel] RISU TCG failures (AArch64 on AArch64)
Date: Tue, 6 Dec 2016 11:27:08 +0000

On 6 December 2016 at 11:06, Alex Bennée <address@hidden> wrote:

A quick eyeball of the logs:

> loading test image 
> testcases.aarch64/insn_ADDPv_ADD_RES1_ADD_RES2_ADDS__INC.risu.bin...
> starting apprentice image at 0x4000801000
> Executed 100 test instructions (pc=0x4000801574).Executed 200 test 
> instructions (pc=0x4000801aec).Executed 300 test instructions 
> (pc=0x4000801d08).Executed 400 test instructions (pc=0x4000802264).Executed 
> 500 test instructions (pc=0x40008027b8).Executed 600 test instructions 
> (pc=0x40008029e8).Executed 700 test instructions (pc=0x4000802f3c).Executed 
> 800 test instructions (pc=0x40008034a8).Executed 900 test instructions 
> (pc=0x40008036cc).Executed 1000 test instructions 
> (pc=0x4000803c2c).----------------
> IN:
> 0x0000004000803cac:  ab1feff6      adds x22, xzr, xzr, lsl #59

>  ---- 0000004000803cac 0000000000000000 0000000000000000
>  movi_i64 tmp2,$0x0
>  movi_i64 tmp3,$0x0
>  movi_i64 tmp7,$0x0
>  add2_i64 tmp5,tmp6,tmp2,tmp7,tmp3,tmp7           dead: 2 3 4 5
>  mov_i32 CF,tmp6                                  sync: 0  dead: 0 1
>  mov_i32 ZF,tmp5
>  movi_i64 tmp9,$0x20
>  shr_i64 tmp8,tmp5,tmp9                           dead: 2
[...]

> OUT: [size=108]
> 0x556a9c11a0:  b85f8274      ldur w20, [x19, #-8]
> 0x556a9c11a4:  350002d4      cbnz w20, #+0x58 (addr 0x556a9c11fc)
> 0x556a9c11a8:  b10003f4      adds x20, sp, #0x0 (0)
> 0x556a9c11ac:  9a1f03f5      adc x21, xzr, xzr

Looks like the add2_i64 has emitted a bogus adds, because
it thinks adds (immediate) allows use of xzr when it doesn't
(for this insn Rn==31 means SP, not XZR).


> loading test image testcases.aarch64/insn_BSL_CCMN_CCMNi_CCMP__INC.risu.bin...
> starting apprentice image at 0x4000801000
> ----------------
> IN:
> 0x000000400080157c:  3a5cabed      ccmn wzr, #28, #NZcV, ge
> 0x0000004000801580:  00005af0      unallocated (Unallocated)

> OP after optimization and liveness analysis:
>  ld_i32 tmp0,env,$0xfffffffffffffff8              dead: 1
>  movi_i32 tmp1,$0x0
>  brcond_i32 tmp0,tmp1,ne,$L0                      dead: 0 1
>
>  ---- 000000400080157c 0000000000000000 0000000000000000
>  xor_i32 tmp1,VF,NF                               dead: 1 2
>  movi_i32 tmp2,$0x0
>  setcond_i32 tmp0,tmp1,tmp2,lt                    dead: 1 2
>  movi_i64 tmp3,$0x1c
>  movi_i64 tmp4,$0x0
>  movi_i32 tmp6,$0x0
>  mov_i32 tmp1,tmp4                                dead: 1
>  mov_i32 tmp2,tmp3                                dead: 1
>  add2_i32 NF,CF,tmp1,tmp6,tmp2,tmp6               dead: 3 5

> 0x55956bfc4c:  310073f5      adds w21, wsp, #0x1c (28)
> 0x55956bfc50:  1a1f03f6      adc w22, wzr, wzr

Same again but with add2_i32.

> loading test image testcases.aarch64/insn_MOVI_MOVK_MOVN_MOVZ__INC.risu.bin...


> 0x000000400080be2c:  6f01e7a0      movi v0.2d, #0xffffffff00ff
> 0x000000400080be30:  00005af0      unallocated (Unallocated)

>  ---- 000000400080be2c 0000000000000000 0000000000000000
>  movi_i64 tmp2,$0xffffffff00ff
>  mov_i64 tmp3,tmp2                                dead: 1
>  st_i64 tmp3,env,$0x838
>  st_i64 tmp3,env,$0x840                           dead: 0

> OUT: [size=72]
> 0x5561a8beb0:  b85f8274      ldur w20, [x19, #-8]
> 0x5561a8beb4:  350001b4      cbnz w20, #+0x34 (addr 0x5561a8bee8)
> 0x5561a8beb8:  929fe014      mov x20, #0xffffffffffff00ff

Generated move with wrong constant value...

> loading test image 
> testcases.aarch64/insn_UCVTFv_UCVTFvf_UCVTFvis_UCVTFv_RES1__INC.risu.bin...
> starting apprentice image at 0x4000801000
> Executed 100 test instructions (pc=0x400080158c).Executed 200 test 
> instructions (pc=0x4000801b10).Executed 300 test instructions 
> (pc=0x400080208c).Executed 400 test instructions (pc=0x40008022c8).Executed 
> 500 test instructions (pc=0x4000802880).Executed 600 test instructions 
> (pc=0x4000802e10).Executed 700 test instructions (pc=0x4000803034).Executed 
> 800 test instructions (pc=0x40008035a8).----------------
> IN:
> 0x0000004000803a74:  6f01e6fc      movi v28.2d, #0xffff00ffffff
> 0x0000004000803a78:  00005af0      unallocated (Unallocated)

>  movi_i64 tmp2,$0xffff00ffffff

> OUT: [size=72]
> 0x555c897290:  b85f8274      ldur w20, [x19, #-8]
> 0x555c897294:  350001b4      cbnz w20, #+0x34 (addr 0x555c8972c8)
> 0x555c897298:  92bfe014      mov x20, #0xffffffff00ffffff

Same thing again.

So there's two bugs here, one in handling of add2 in the
backend, and one in constant loading.

thanks
-- PMM



reply via email to

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