Implement X86 sse2 movdqu and movdqa instructions
The movdqa instruction should enforce 16-byte alignment. This implementation does not do that. These instructions are needed for most of x86_64 spec2k to run.
This commit is contained in:
parent
5b6f707a00
commit
14691148cd
|
@ -604,7 +604,7 @@
|
||||||
}
|
}
|
||||||
// repe (0xF3)
|
// repe (0xF3)
|
||||||
0x4: decode OPCODE_OP_BOTTOM3 {
|
0x4: decode OPCODE_OP_BOTTOM3 {
|
||||||
0x7: WarnUnimpl::movdqu_Vo_Wo();
|
0x7: MOVDQU(Vo,Wo);
|
||||||
default: UD2();
|
default: UD2();
|
||||||
}
|
}
|
||||||
// operand size (0x66)
|
// operand size (0x66)
|
||||||
|
@ -616,7 +616,7 @@
|
||||||
0x4: PUNPCKLQDQ(Vo,Wq);
|
0x4: PUNPCKLQDQ(Vo,Wq);
|
||||||
0x5: PUNPCKHQDQ(Vo,Wq);
|
0x5: PUNPCKHQDQ(Vo,Wq);
|
||||||
0x6: WarnUnimpl::movd_Vo_Ed();
|
0x6: WarnUnimpl::movd_Vo_Ed();
|
||||||
0x7: WarnUnimpl::movdqa_Vo_Wo();
|
0x7: MOVDQA(Vo,Wo);
|
||||||
}
|
}
|
||||||
default: UD2();
|
default: UD2();
|
||||||
}
|
}
|
||||||
|
@ -702,7 +702,7 @@
|
||||||
// repe (0xF3)
|
// repe (0xF3)
|
||||||
0x4: decode OPCODE_OP_BOTTOM3 {
|
0x4: decode OPCODE_OP_BOTTOM3 {
|
||||||
0x6: MOVQ(Vq,Wq);
|
0x6: MOVQ(Vq,Wq);
|
||||||
0x7: WarnUnimpl::movdqu_Wo_Vo();
|
0x7: MOVDQU(Wo,Vo);
|
||||||
default: UD2();
|
default: UD2();
|
||||||
}
|
}
|
||||||
// operand size (0x66)
|
// operand size (0x66)
|
||||||
|
@ -710,7 +710,7 @@
|
||||||
0x4: WarnUnimpl::haddpd_Vo_Wo();
|
0x4: WarnUnimpl::haddpd_Vo_Wo();
|
||||||
0x5: WarnUnimpl::hsubpd_Vo_Wo();
|
0x5: WarnUnimpl::hsubpd_Vo_Wo();
|
||||||
0x6: WarnUnimpl::movd_Ed_Vd();
|
0x6: WarnUnimpl::movd_Ed_Vd();
|
||||||
0x7: WarnUnimpl::movdqa_Wo_Vo();
|
0x7: MOVDQA(Wo,Vo);
|
||||||
default: UD2();
|
default: UD2();
|
||||||
}
|
}
|
||||||
// repne (0xF2)
|
// repne (0xF2)
|
||||||
|
|
|
@ -87,7 +87,59 @@ def macroop MOVQ2DQ_XMM_MMX {
|
||||||
movfp xmml, mmxm, dataSize=8
|
movfp xmml, mmxm, dataSize=8
|
||||||
lfpimm xmmh, 0
|
lfpimm xmmh, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQA_XMM_XMM {
|
||||||
|
movfp xmml, xmmlm
|
||||||
|
movfp xmmh, xmmhm
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQA_XMM_M {
|
||||||
|
ldfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
|
||||||
|
ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQA_XMM_P {
|
||||||
|
rdip t7
|
||||||
|
ldfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||||
|
ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQA_M_XMM {
|
||||||
|
stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
|
||||||
|
stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQA_P_XMM {
|
||||||
|
rdip t7
|
||||||
|
stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||||
|
stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQU_XMM_XMM {
|
||||||
|
movfp xmml, xmmlm
|
||||||
|
movfp xmmh, xmmhm
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQU_XMM_M {
|
||||||
|
ldfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
|
||||||
|
ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQU_XMM_P {
|
||||||
|
rdip t7
|
||||||
|
ldfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||||
|
ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQU_M_XMM {
|
||||||
|
stfp xmml, seg, sib, "DISPLACEMENT", dataSize=8
|
||||||
|
stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop MOVDQU_P_XMM {
|
||||||
|
rdip t7
|
||||||
|
stfp xmml, seg, riprel, "DISPLACEMENT", dataSize=8
|
||||||
|
stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
|
||||||
|
};
|
||||||
'''
|
'''
|
||||||
# MOVDQA
|
|
||||||
# MOVDQU
|
|
||||||
# LDDQU
|
# LDDQU
|
||||||
|
|
Loading…
Reference in a new issue