X86: Fix bugs in movd implementation.
authorVince Weaver <vince@csl.cornell.edu>
Tue, 10 Nov 2009 16:29:30 +0000 (11:29 -0500)
committerVince Weaver <vince@csl.cornell.edu>
Tue, 10 Nov 2009 16:29:30 +0000 (11:29 -0500)
Unfortunately my implementation of the movd instruction had two bugs.

In one case, when moving a 32-bit value into an xmm register, the
lower half of the xmm register was not zero extended.

The other case is that xmm was used instead of xmmlm as the source
for a register move.  My test case didn't notice this at first
as it moved xmm0 to eax, which both have the same register
number.

src/arch/x86/isa/insts/general_purpose/data_transfer/move.py

index 7aee3fec1a8c19db1a8db9bd90bf1f1c3c4d016e..51f5ad23b5cb15a04908de3d33e1c1dcab7923ea 100644 (file)
@@ -357,7 +357,7 @@ def macroop MOVNTI_P_R {
 };
 
 def macroop MOVD_XMM_R {
-   mov2fp xmml, regm, srcSize=dsz, destSize=dsz
+   mov2fp xmml, regm, srcSize=dsz, destSize=8
    lfpimm xmmh, 0
 };
 
@@ -373,7 +373,7 @@ def macroop MOVD_XMM_P {
 };
 
 def macroop MOVD_R_XMM {
-    mov2int reg, xmml, size=dsz
+    mov2int reg, xmmlm, size=dsz
 };
 
 def macroop MOVD_M_XMM {