X86: Implement the remaining unpack instructions.

This commit is contained in:
Gabe Black 2009-08-17 18:27:19 -07:00
parent 7b18f8a062
commit 63403bd562
2 changed files with 74 additions and 8 deletions

View file

@ -295,8 +295,8 @@
default: movlps_Vq_Mq();
}
0x3: movlps_Mq_Vq();
0x4: unpcklps();
0x5: unpckhps();
0x4: Inst::UNPCKLPS(Vps,Wq);
0x5: Inst::UNPCKHPS(Vpd,Wq);
0x6: decode MODRM_MOD {
0x3: movlhps_Vq_VRq();
default: movhps_Vq_Mq();
@ -317,8 +317,8 @@
0x1: movupd_Wo_Vo();
0x2: Inst::MOVLPD(Vq,Mq);
0x3: Inst::MOVLPD(Mq,Vq);
0x4: unpcklpd_Vo_Wq();
0x5: unpckhpd_Vo_Wo();
0x4: Inst::UNPCKLPD(Vo,Wq);
0x5: Inst::UNPCKHPD(Vo,Wo);
0x6: movhpd_Vq_Mq();
0x7: movhpd_Mq_Vq();
}

View file

@ -54,8 +54,74 @@
# Authors: Gabe Black
microcode = '''
# UNPCKHPS
# UNPCKHPD
# UNPCKLPS
# UNPCKLPD
def macroop UNPCKLPS_XMM_XMM {
unpack xmmh, xmml, xmmlm, sel=1, size=4
unpack xmml, xmml, xmmlm, sel=0, size=4
};
def macroop UNPCKLPS_XMM_M {
ldfp ufp1, seg, sib, disp, dataSize=8
unpack xmmh, xmml, ufp1, sel=1, size=4
unpack xmml, xmml, ufp1, sel=0, size=4
};
def macroop UNPCKLPS_XMM_P {
rdip t7
ldfp ufp1, seg, riprel, disp, dataSize=8
unpack xmmh, xmml, ufp1, sel=1, size=4
unpack xmml, xmml, ufp1, sel=0, size=4
};
def macroop UNPCKLPD_XMM_XMM {
movfp xmmh, xmmlm
};
def macroop UNPCKLPD_XMM_M {
ldfp xmmh, seg, sib, disp, dataSize=8
};
def macroop UNPCKLPD_XMM_P {
rdip t7
ldfp xmmh, seg, riprel, disp, dataSize=8
};
def macroop UNPCKHPS_XMM_XMM {
unpack xmml, xmmh, xmmhm, sel=0, size=4
unpack xmmh, xmmh, xmmhm, sel=1, size=4
};
def macroop UNPCKHPS_XMM_M {
lea t1, seg, sib, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], 8, dataSize=8
unpack xmml, xmmh, ufp1, sel=0, size=4
unpack xmmh, xmmh, ufp1, sel=1, size=4
};
def macroop UNPCKHPS_XMM_P {
rdip t7
lea t1, seg, riprel, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], 8, dataSize=8
unpack xmml, xmmh, ufp1, sel=0, size=4
unpack xmmh, xmmh, ufp1, sel=1, size=4
};
def macroop UNPCKHPD_XMM_XMM {
movfp xmml, xmmh
movfp xmmh, xmmhm
};
def macroop UNPCKHPD_XMM_M {
lea t1, seg, sib, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], 8, dataSize=8
movfp xmml, xmmh
movfp xmmh, ufp1
};
def macroop UNPCKHPD_XMM_P {
rdip t7
lea t1, seg, riprel, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], 8, dataSize=8
movfp xmml, xmmh
movfp xmmh, ufp1
};
'''