|
From: <sv...@va...> - 2005-04-06 01:45:48
|
Author: sewardj
Date: 2005-04-06 02:45:44 +0100 (Wed, 06 Apr 2005)
New Revision: 1123
Modified:
trunk/priv/guest-x86/toIR.c
Log:
As per r1121, avoid WaW stalls writing the guest state for movss mem->reg=
.
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-04-06 01:11:53 UTC (rev 1122)
+++ trunk/priv/guest-x86/toIR.c 2005-04-06 01:45:44 UTC (rev 1123)
@@ -7805,7 +7805,11 @@
delta +=3D 3+1;
} else {
addr =3D disAMode ( &alen, sorb, delta+3, dis_buf );
- putXMMReg( gregOfRM(modrm), mkV128(0) );
+ /* zero bits 127:64 */
+ putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );=20
+ /* zero bits 63:32 */
+ putXMMRegLane32( gregOfRM(modrm), 1, mkU32(0) );=20
+ /* write bits 31:0 */
putXMMRegLane32( gregOfRM(modrm), 0,
loadLE(Ity_I32, mkexpr(addr)) );
DIP("movss %s,%s\n", dis_buf,
@@ -9278,7 +9282,9 @@
delta +=3D 3+1;
} else {
addr =3D disAMode ( &alen, sorb, delta+3, dis_buf );
+ /* zero bits 127:64 */
putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
+ /* write bits 63:0 */
putXMMRegLane64( gregOfRM(modrm), 0,
loadLE(Ity_I64, mkexpr(addr)) );
DIP("movsd %s,%s\n", dis_buf,
|