summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86')
-rw-r--r--src/arch/x86/isa/decoder/two_byte_opcodes.isa4
-rw-r--r--src/arch/x86/isa/insts/general_purpose/data_transfer/move.py30
2 files changed, 32 insertions, 2 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
index 5512f417c..d52dfb26e 100644
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
@@ -615,7 +615,7 @@
0x3: PACKSSDW(Vo,Wo);
0x4: PUNPCKLQDQ(Vo,Wq);
0x5: PUNPCKHQDQ(Vo,Wq);
- 0x6: WarnUnimpl::movd_Vo_Ed();
+ 0x6: MOVD(Vo,Edp);
0x7: MOVDQA(Vo,Wo);
}
default: UD2();
@@ -709,7 +709,7 @@
0x1: decode OPCODE_OP_BOTTOM3 {
0x4: HADDPD(Vo,Wo);
0x5: WarnUnimpl::hsubpd_Vo_Wo();
- 0x6: WarnUnimpl::movd_Ed_Vd();
+ 0x6: MOVD(Edp,Vd);
0x7: MOVDQA(Wo,Vo);
default: UD2();
}
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 7ccdca6c3..7aee3fec1 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
@@ -355,6 +355,36 @@ def macroop MOVNTI_P_R {
rdip t7
st reg, seg, riprel, disp
};
+
+def macroop MOVD_XMM_R {
+ mov2fp xmml, regm, srcSize=dsz, destSize=dsz
+ lfpimm xmmh, 0
+};
+
+def macroop MOVD_XMM_M {
+ ldfp xmml, seg, sib, disp, dataSize=dsz
+ lfpimm xmmh, 0
+};
+
+def macroop MOVD_XMM_P {
+ rdip t7
+ ldfp xmml, seg, riprel, disp, dataSize=dsz
+ lfpimm xmmh, 0
+};
+
+def macroop MOVD_R_XMM {
+ mov2int reg, xmml, size=dsz
+};
+
+def macroop MOVD_M_XMM {
+ stfp xmml, seg, sib, disp, dataSize=dsz
+};
+
+def macroop MOVD_P_XMM {
+ rdip t7
+ stfp xmml, seg, riprel, disp, dataSize=dsz
+};
+
'''
#let {{
# class MOVD(Inst):