* [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi @ 2015-07-10 16:03 Aurelien Jarno 2015-07-10 16:03 ` [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness Aurelien Jarno 2015-07-10 18:22 ` [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Richard Henderson 0 siblings, 2 replies; 4+ messages in thread From: Aurelien Jarno @ 2015-07-10 16:03 UTC (permalink / raw) To: qemu-devel; +Cc: Aurelien Jarno, Richard Henderson Due to a copy&paste, the new op value is tested against mov_i32 instead of movi_i32. The test is therefore always false. Fix that. Cc: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> --- tcg/optimize.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0f6f700..18283cf 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -205,7 +205,7 @@ static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg *args, temps[dst].state = TCG_TEMP_CONST; temps[dst].val = val; mask = val; - if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_mov_i32) { + if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_movi_i32) { /* High bits of the destination are now garbage. */ mask |= ~0xffffffffull; } -- 2.1.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness 2015-07-10 16:03 [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Aurelien Jarno @ 2015-07-10 16:03 ` Aurelien Jarno 2015-07-10 18:22 ` Richard Henderson 2015-07-10 18:22 ` [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Richard Henderson 1 sibling, 1 reply; 4+ messages in thread From: Aurelien Jarno @ 2015-07-10 16:03 UTC (permalink / raw) To: qemu-devel; +Cc: Aurelien Jarno, Richard Henderson By convention, on a 64-bit host TCG internally stores 32-bit constants as sign-extended. This is not the case in the optimizer when a 32-bit constant is folded. This doesn't seem to have more consequences than suboptimal code generation. For instance the x86 backend assumes sign-extended constants, and in some rare cases uses a 32-bit unsigned immediate 0xffffffff instead of a 8-bit signed immediate 0xff for the constant -1. This is with a ppc guest: before ------ ---- 0x9f29cc movi_i32 tmp1,$0xffffffff movi_i32 tmp2,$0x0 add2_i32 tmp0,CA,CA,tmp2,r6,tmp2 add2_i32 tmp0,CA,tmp0,CA,tmp1,tmp2 mov_i32 r10,tmp0 0x7fd8c7dfe90c: xor %ebp,%ebp 0x7fd8c7dfe90e: mov %ebp,%r11d 0x7fd8c7dfe911: mov 0x18(%r14),%r9d 0x7fd8c7dfe915: add %r9d,%r10d 0x7fd8c7dfe918: adc %ebp,%r11d 0x7fd8c7dfe91b: add $0xffffffff,%r10d 0x7fd8c7dfe922: adc %ebp,%r11d 0x7fd8c7dfe925: mov %r11d,0x134(%r14) 0x7fd8c7dfe92c: mov %r10d,0x28(%r14) after ----- ---- 0x9f29cc movi_i32 tmp1,$0xffffffffffffffff movi_i32 tmp2,$0x0 add2_i32 tmp0,CA,CA,tmp2,r6,tmp2 add2_i32 tmp0,CA,tmp0,CA,tmp1,tmp2 mov_i32 r10,tmp0 0x7f37010d490c: xor %ebp,%ebp 0x7f37010d490e: mov %ebp,%r11d 0x7f37010d4911: mov 0x18(%r14),%r9d 0x7f37010d4915: add %r9d,%r10d 0x7f37010d4918: adc %ebp,%r11d 0x7f37010d491b: add $0xffffffffffffffff,%r10d 0x7f37010d491f: adc %ebp,%r11d 0x7f37010d4922: mov %r11d,0x134(%r14) 0x7f37010d4929: mov %r10d,0x28(%r14) Cc: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> --- tcg/optimize.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 18283cf..cd0e793 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -395,7 +395,7 @@ static TCGArg do_constant_folding(TCGOpcode op, TCGArg x, TCGArg y) { TCGArg res = do_constant_folding_2(op, x, y); if (op_bits(op) == 32) { - res &= 0xffffffff; + res = (int32_t)res; } return res; } @@ -1128,8 +1128,8 @@ void tcg_optimize(TCGContext *s) rl = args[0]; rh = args[1]; - tcg_opt_gen_movi(s, op, args, rl, (uint32_t)a); - tcg_opt_gen_movi(s, op2, args2, rh, (uint32_t)(a >> 32)); + tcg_opt_gen_movi(s, op, args, rl, (int32_t)a); + tcg_opt_gen_movi(s, op2, args2, rh, (int32_t)(a >> 32)); /* We've done all we need to do with the movi. Skip it. */ oi_next = op2->next; @@ -1149,8 +1149,8 @@ void tcg_optimize(TCGContext *s) rl = args[0]; rh = args[1]; - tcg_opt_gen_movi(s, op, args, rl, (uint32_t)r); - tcg_opt_gen_movi(s, op2, args2, rh, (uint32_t)(r >> 32)); + tcg_opt_gen_movi(s, op, args, rl, (int32_t)r); + tcg_opt_gen_movi(s, op2, args2, rh, (int32_t)(r >> 32)); /* We've done all we need to do with the movi. Skip it. */ oi_next = op2->next; -- 2.1.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness 2015-07-10 16:03 ` [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness Aurelien Jarno @ 2015-07-10 18:22 ` Richard Henderson 0 siblings, 0 replies; 4+ messages in thread From: Richard Henderson @ 2015-07-10 18:22 UTC (permalink / raw) To: Aurelien Jarno, qemu-devel On 07/10/2015 05:03 PM, Aurelien Jarno wrote: > Cc: Richard Henderson<rth@twiddle.net> > Signed-off-by: Aurelien Jarno<aurelien@aurel32.net> > --- > tcg/optimize.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) Reviewed-by: Richard Henderson <rth@twiddle.net> r~ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi 2015-07-10 16:03 [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Aurelien Jarno 2015-07-10 16:03 ` [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness Aurelien Jarno @ 2015-07-10 18:22 ` Richard Henderson 1 sibling, 0 replies; 4+ messages in thread From: Richard Henderson @ 2015-07-10 18:22 UTC (permalink / raw) To: Aurelien Jarno, qemu-devel On 07/10/2015 05:03 PM, Aurelien Jarno wrote: > Due to a copy&paste, the new op value is tested against mov_i32 instead > of movi_i32. The test is therefore always false. Fix that. > > Cc: Richard Henderson<rth@twiddle.net> > Signed-off-by: Aurelien Jarno<aurelien@aurel32.net> > --- > tcg/optimize.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Richard Henderson <rth@twiddle.net> r~ ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-07-10 18:22 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-07-10 16:03 [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Aurelien Jarno 2015-07-10 16:03 ` [Qemu-devel] [PATCH 2/2] tcg/optimize: fix constant signedness Aurelien Jarno 2015-07-10 18:22 ` Richard Henderson 2015-07-10 18:22 ` [Qemu-devel] [PATCH 1/2] tcg/optimize: fix tcg_opt_gen_movi Richard Henderson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).