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();
|
0x2: rqsrtps_Vo_Wo();
|
||||||
0x3: rcpps_Vo_Wo();
|
0x3: rcpps_Vo_Wo();
|
||||||
0x4: Inst::ANDPS(Vo,Wo);
|
0x4: Inst::ANDPS(Vo,Wo);
|
||||||
0x5: andnps_Vo_Wo();
|
0x5: Inst::ANDNPS(Vo,Wo);
|
||||||
0x6: Inst::ORPS(Vo,Wo);
|
0x6: Inst::ORPS(Vo,Wo);
|
||||||
0x7: Inst::XORPS(Vo,Wo);
|
0x7: Inst::XORPS(Vo,Wo);
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@
|
||||||
0x0: movmskpd_Gd_VRo();
|
0x0: movmskpd_Gd_VRo();
|
||||||
0x1: sqrtpd_Vo_Wo();
|
0x1: sqrtpd_Vo_Wo();
|
||||||
0x4: Inst::ANDPD(Vo,Wo);
|
0x4: Inst::ANDPD(Vo,Wo);
|
||||||
0x5: andnpd_Vo_Wo();
|
0x5: Inst::ANDNPD(Vo,Wo);
|
||||||
0x6: Inst::ORPD(Vo,Wo);
|
0x6: Inst::ORPD(Vo,Wo);
|
||||||
//This really should be type o, but it works on q sized
|
//This really should be type o, but it works on q sized
|
||||||
//chunks at a time.
|
//chunks at a time.
|
||||||
|
@ -990,7 +990,7 @@
|
||||||
0x4: paddusb_Pq_Qq();
|
0x4: paddusb_Pq_Qq();
|
||||||
0x5: paddusw_Pq_Qq();
|
0x5: paddusw_Pq_Qq();
|
||||||
0x6: pmaxub_Pq_Qq();
|
0x6: pmaxub_Pq_Qq();
|
||||||
0x7: pandn_Pq_Qq();
|
0x7: Inst::PANDN(Pq,Qq);
|
||||||
}
|
}
|
||||||
// operand size (0x66)
|
// operand size (0x66)
|
||||||
0x1: decode OPCODE_OP_BOTTOM3 {
|
0x1: decode OPCODE_OP_BOTTOM3 {
|
||||||
|
@ -1001,7 +1001,7 @@
|
||||||
0x4: paddusb_Vo_Wo();
|
0x4: paddusb_Vo_Wo();
|
||||||
0x5: paddusw_Vo_Wo();
|
0x5: paddusw_Vo_Wo();
|
||||||
0x6: pmaxub_Vo_Wo();
|
0x6: pmaxub_Vo_Wo();
|
||||||
0x7: pandn_Vo_Wo();
|
0x7: Inst::PANDN(Vo,Wo);
|
||||||
}
|
}
|
||||||
default: Inst::UD2();
|
default: Inst::UD2();
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,48 @@ def macroop ANDPD_XMM_P {
|
||||||
mand xmml, xmml, ufp1
|
mand xmml, xmml, ufp1
|
||||||
mand xmmh, xmmh, ufp2
|
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 xmml, xmml, ufp1
|
||||||
mand xmmh, xmmh, ufp2
|
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
|
ldfp ufp1, seg, riprel, disp, dataSize=8
|
||||||
mand mmx, mmx, ufp1
|
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