unicorn/qemu/tcg/aarch64
Richard Henderson 043d65862a tcg/aarch64: Fix constant subtraction in tcg_out_addsub2
An hppa guest executing

0x000000000000e05c: ldil L%10000,r4
0x000000000000e060: ldo 0(r4),r4
0x000000000000e064: sub r3,r4,sp

produces

---- 000000000000e064 000000000000e068
sub2_i32 tmp0,tmp4,r3,$0x1,$0x10000,$0x0

after folding and constant propagation. Then we hit

tcg-target.c.inc:640: tcg_out_insn_3401: Assertion `aimm <= 0xfff' failed.

because aimm is in fact -16, but unsigned.

The ((bl < 0) ^ sub) condition which negates bl is incorrect and will
always lead to this abort. If the constant is positive, sub will make
it negative; if the constant is negative, sub will keep it negative.

Backports 707b45a2475e25709f0dee00f8fdf39d346ed21e
2021-03-09 13:16:41 -05:00
..
tcg-target-con-set.h tcg/aarch64: Split out constraint sets to tcg-target-con-set.h 2021-03-04 16:19:33 -05:00
tcg-target-con-str.h tcg/aarch64: Split out target constraints to tcg-target-con-str.h 2021-03-04 15:58:26 -05:00
tcg-target-opc.h tcg/aarch64: Support vector variable shift opcodes 2019-05-16 15:58:54 -04:00
tcg-target.h tcg: Remove TCG_TARGET_CON_SET_H 2021-03-04 16:29:16 -05:00
tcg-target.inc.c tcg/aarch64: Fix constant subtraction in tcg_out_addsub2 2021-03-09 13:16:41 -05:00