|
From: <sv...@va...> - 2008-11-17 20:25:42
|
Author: sewardj
Date: 2008-11-17 20:25:37 +0000 (Mon, 17 Nov 2008)
New Revision: 1873
Log:
Handle "movsd G,E" for G and E both regs. This is the non-binutils
encoding. Fixes #175150.
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/toIR.c
===================================================================
--- trunk/priv/guest-x86/toIR.c 2008-11-08 15:25:00 UTC (rev 1872)
+++ trunk/priv/guest-x86/toIR.c 2008-11-17 20:25:37 UTC (rev 1873)
@@ -10016,7 +10016,11 @@
vassert(sz == 4);
modrm = getIByte(delta+3);
if (epartIsReg(modrm)) {
- /* fall through, we don't yet have a test case */
+ putXMMRegLane64( eregOfRM(modrm), 0,
+ getXMMRegLane64( gregOfRM(modrm), 0 ));
+ DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
+ nameXMMReg(eregOfRM(modrm)));
+ delta += 3+1;
} else {
addr = disAMode ( &alen, sorb, delta+3, dis_buf );
storeLE( mkexpr(addr),
@@ -10024,8 +10028,8 @@
DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
dis_buf);
delta += 3+alen;
- goto decode_success;
}
+ goto decode_success;
}
/* 66 0F 59 = MULPD -- mul 64Fx2 from R/M to R */
|