X86: Implement PANDN, ANDNPS, and ANDNPD.
This commit is contained in:
parent
458521f055
commit
7b18f8a062
4 changed files with 85 additions and 8 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue