X86: Implement PANDN, ANDNPS, and ANDNPD.

This commit is contained in:
Gabe Black 2009-08-17 18:25:00 -07:00
parent 458521f055
commit 7b18f8a062
4 changed files with 85 additions and 8 deletions

View file

@ -469,7 +469,7 @@
0x2: rqsrtps_Vo_Wo();
0x3: rcpps_Vo_Wo();
0x4: Inst::ANDPS(Vo,Wo);
0x5: andnps_Vo_Wo();
0x5: Inst::ANDNPS(Vo,Wo);
0x6: Inst::ORPS(Vo,Wo);
0x7: Inst::XORPS(Vo,Wo);
}
@ -485,7 +485,7 @@
0x0: movmskpd_Gd_VRo();
0x1: sqrtpd_Vo_Wo();
0x4: Inst::ANDPD(Vo,Wo);
0x5: andnpd_Vo_Wo();
0x5: Inst::ANDNPD(Vo,Wo);
0x6: Inst::ORPD(Vo,Wo);
//This really should be type o, but it works on q sized
//chunks at a time.
@ -990,7 +990,7 @@
0x4: paddusb_Pq_Qq();
0x5: paddusw_Pq_Qq();
0x6: pmaxub_Pq_Qq();
0x7: pandn_Pq_Qq();
0x7: Inst::PANDN(Pq,Qq);
}
// operand size (0x66)
0x1: decode OPCODE_OP_BOTTOM3 {
@ -1001,7 +1001,7 @@
0x4: paddusb_Vo_Wo();
0x5: paddusw_Vo_Wo();
0x6: pmaxub_Vo_Wo();
0x7: pandn_Vo_Wo();
0x7: Inst::PANDN(Vo,Wo);
}
default: Inst::UD2();
}

View file

@ -97,6 +97,48 @@ def macroop ANDPD_XMM_P {
mand xmml, xmml, ufp1
mand xmmh, xmmh, ufp2
};
def macroop ANDNPS_XMM_XMM {
mandn xmml, xmml, xmmlm
mandn xmmh, xmmh, xmmhm
};
def macroop ANDNPS_XMM_M {
lea t1, seg, sib, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
def macroop ANDNPS_XMM_P {
rdip t7
lea t1, seg, riprel, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
def macroop ANDNPD_XMM_XMM {
mandn xmml, xmml, xmmlm
mandn xmmh, xmmh, xmmhm
};
def macroop ANDNPD_XMM_M {
lea t1, seg, sib, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
def macroop ANDNPD_XMM_P {
rdip t7
lea t1, seg, riprel, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
'''
# ANDNPS
# ANDNPD

View file

@ -75,5 +75,26 @@ def macroop PAND_XMM_P {
mand xmml, xmml, ufp1
mand xmmh, xmmh, ufp2
};
def macroop PANDN_XMM_XMM {
mandn xmml, xmml, xmmlm
mandn xmmh, xmmh, xmmhm
};
def macroop PANDN_XMM_M {
lea t1, seg, sib, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
def macroop PANDN_XMM_P {
rdip t7
lea t1, seg, riprel, disp, dataSize=asz
ldfp ufp1, seg, [1, t0, t1], dataSize=8
ldfp ufp2, seg, [1, t0, t1], 8, dataSize=8
mandn xmml, xmml, ufp1
mandn xmmh, xmmh, ufp2
};
'''
# PANDN

View file

@ -68,5 +68,19 @@ def macroop PAND_MMX_P {
ldfp ufp1, seg, riprel, disp, dataSize=8
mand mmx, mmx, ufp1
};
def macroop PANDN_MMX_MMX {
mandn mmx, mmx, mmxm
};
def macroop PANDN_MMX_M {
ldfp ufp1, seg, sib, disp, dataSize=8
mandn mmx, mmx, ufp1
};
def macroop PANDN_MMX_P {
rdip t7
ldfp ufp1, seg, riprel, disp, dataSize=8
mandn mmx, mmx, ufp1
};
'''
# PANDN