X86: Implement movd_Vo_Edp on X86
authorVince Weaver <vince@csl.cornell.edu>
Fri, 30 Oct 2009 19:52:33 +0000 (15:52 -0400)
committerVince Weaver <vince@csl.cornell.edu>
Fri, 30 Oct 2009 19:52:33 +0000 (15:52 -0400)
This patch implements the movd_Vo_Edp series of instructions.

It addresses various concerns by Gabe Black about which file the
instruction belonged in, as well as supporting REX prefixed
instructions properly.

This instruction is needed for some of the spec2k benchmarks, most
notably bzip2.

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

index 5512f417c491e8cadaa6f015cde359f544a2251b..d52dfb26e951d13172affa8b3d292b8fd4b2eb85 100644 (file)
                         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();
                     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();
                     }
index 7ccdca6c3469f3b5578931ba2da3b95cda41d4dc..7aee3fec1a8c19db1a8db9bd90bf1f1c3c4d016e 100644 (file)
@@ -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):