X86: Implement movd_Vo_Edp on X86

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.
This commit is contained in:
Vince Weaver
2009-10-30 15:52:33 -04:00
parent b2067840a6
commit 5873ec2238
2 changed files with 32 additions and 2 deletions

View File

@@ -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();
}

View 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):