summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorVince Weaver <vince@csl.cornell.edu>2009-11-10 11:29:30 -0500
committerVince Weaver <vince@csl.cornell.edu>2009-11-10 11:29:30 -0500
commit53e27c0277a41ab1cae45d82fb4409f65cf660c3 (patch)
tree5d16a18e97d04cea8ef6b362f5fc0ce4b1c96d4f /src/arch
parente81cc233a6fa82d2aec45bd9160db15df112f584 (diff)
downloadgem5-53e27c0277a41ab1cae45d82fb4409f65cf660c3.tar.xz
X86: Fix bugs in movd implementation.
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.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/isa/insts/general_purpose/data_transfer/move.py4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/arch/x86/isa/insts/general_purpose/data_transfer/move.py b/src/arch/x86/isa/insts/general_purpose/data_transfer/move.py
index 7aee3fec1..51f5ad23b 100644
--- a/src/arch/x86/isa/insts/general_purpose/data_transfer/move.py
+++ b/src/arch/x86/isa/insts/general_purpose/data_transfer/move.py
@@ -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 {