[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [6011] TCG x86/x86-64: use move with zero-extend for loads/
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [6011] TCG x86/x86-64: use move with zero-extend for loads/stores |
Date: |
Sat, 13 Dec 2008 18:57:21 +0000 |
Revision: 6011
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6011
Author: aurel32
Date: 2008-12-13 18:57:21 +0000 (Sat, 13 Dec 2008)
Log Message:
-----------
TCG x86/x86-64: use move with zero-extend for loads/stores
Starting with version 4.3, gcc returns the result of a function in
rax/eax/ax/al instead of rax/eax, depending of the return type. As
a consequence we should use a zero extend moe in TCG loads/stores.
See http://gcc.gnu.org/ml/gcc/2008-01/msg00052.html for more details.
A big thanks to malc who founds the problem and wrote the x86 patch.
Signed-off-by: Aurelien Jarno <address@hidden>
Modified Paths:
--------------
trunk/tcg/i386/tcg-target.c
trunk/tcg/x86_64/tcg-target.c
Modified: trunk/tcg/i386/tcg-target.c
===================================================================
--- trunk/tcg/i386/tcg-target.c 2008-12-13 18:57:12 UTC (rev 6010)
+++ trunk/tcg/i386/tcg-target.c 2008-12-13 18:57:21 UTC (rev 6011)
@@ -525,7 +525,13 @@
tcg_out_modrm(s, 0xbf | P_EXT, data_reg, TCG_REG_EAX);
break;
case 0:
+ /* movzbl */
+ tcg_out_modrm(s, 0xb6 | P_EXT, data_reg, TCG_REG_EAX);
+ break;
case 1:
+ /* movzwl */
+ tcg_out_modrm(s, 0xb7 | P_EXT, data_reg, TCG_REG_EAX);
+ break;
case 2:
default:
tcg_out_mov(s, data_reg, TCG_REG_EAX);
Modified: trunk/tcg/x86_64/tcg-target.c
===================================================================
--- trunk/tcg/x86_64/tcg-target.c 2008-12-13 18:57:12 UTC (rev 6010)
+++ trunk/tcg/x86_64/tcg-target.c 2008-12-13 18:57:21 UTC (rev 6011)
@@ -575,7 +575,13 @@
tcg_out_modrm(s, 0x63 | P_REXW, data_reg, TCG_REG_RAX);
break;
case 0:
+ /* movzbq */
+ tcg_out_modrm(s, 0xb6 | P_EXT | P_REXW, data_reg, TCG_REG_RAX);
+ break;
case 1:
+ /* movzwq */
+ tcg_out_modrm(s, 0xb7 | P_EXT | P_REXW, data_reg, TCG_REG_RAX);
+ break;
case 2:
default:
/* movl */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [6011] TCG x86/x86-64: use move with zero-extend for loads/stores,
Aurelien Jarno <=