mulx supports apx
This commit is contained in:
parent
82529af93e
commit
16f1a5d8a6
3 changed files with 13 additions and 3 deletions
|
@ -1733,7 +1733,7 @@ void put()
|
|||
uint8_t code;
|
||||
} tbl[] = {
|
||||
{ "andn", T_0F38 | T_VEX | T_NF, 0xF2 },
|
||||
{ "mulx", T_F2 | T_0F38, 0xF6 },
|
||||
{ "mulx", T_F2 | T_0F38 | T_VEX , 0xF6 },
|
||||
{ "pdep", T_F2 | T_0F38, 0xF5 },
|
||||
{ "pext", T_F3 | T_0F38, 0xF5 },
|
||||
};
|
||||
|
|
12
test/apx.cpp
12
test/apx.cpp
|
@ -457,7 +457,7 @@ CYBOZU_TEST_AUTO(NF)
|
|||
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
|
||||
}
|
||||
|
||||
CYBOZU_TEST_AUTO(andn)
|
||||
CYBOZU_TEST_AUTO(andn_etc)
|
||||
{
|
||||
struct Code : Xbyak::CodeGenerator {
|
||||
Code()
|
||||
|
@ -467,11 +467,21 @@ CYBOZU_TEST_AUTO(andn)
|
|||
andn(eax, ecx, r8d); // 32bit
|
||||
andn(r29, r30, r31); // 64bit
|
||||
andn(r29, r30, ptr [r31+r20*4]);
|
||||
|
||||
mulx(rax, rcx, r8);
|
||||
mulx(eax, ecx, r8d);
|
||||
mulx(r29, r30, r31);
|
||||
mulx(r29, r30, ptr [r31+r20*4]);
|
||||
}
|
||||
} c;
|
||||
const uint8_t tbl[] = {
|
||||
// andn
|
||||
0xc4, 0xc2, 0xf0, 0xf2, 0xc0, 0x62, 0xd2, 0xf4, 0x08, 0xf2, 0xc0, 0xc4, 0xc2, 0x70, 0xf2, 0xc0,
|
||||
0x62, 0x4a, 0x8c, 0x00, 0xf2, 0xef, 0x62, 0x4a, 0x88, 0x00, 0xf2, 0x2c, 0xa7,
|
||||
|
||||
// mulx
|
||||
0xc4, 0xc2, 0xf3, 0xf6, 0xc0, 0xc4, 0xc2, 0x73, 0xf6, 0xc0, 0x62, 0x4a, 0x8f, 0x00, 0xf6, 0xef,
|
||||
0x62, 0x4a, 0x8b, 0x00, 0xf6, 0x2c, 0xa7,
|
||||
};
|
||||
const size_t n = sizeof(tbl);
|
||||
CYBOZU_TEST_EQUAL(c.getSize(), n);
|
||||
|
|
|
@ -560,7 +560,7 @@ void mulpd(const Xmm& xmm, const Operand& op) { opSSE(xmm, op, T_0F | T_66, 0x59
|
|||
void mulps(const Xmm& xmm, const Operand& op) { opSSE(xmm, op, T_0F, 0x59, isXMM_XMMorMEM); }
|
||||
void mulsd(const Xmm& xmm, const Operand& op) { opSSE(xmm, op, T_0F | T_F2, 0x59, isXMM_XMMorMEM); }
|
||||
void mulss(const Xmm& xmm, const Operand& op) { opSSE(xmm, op, T_0F | T_F3, 0x59, isXMM_XMMorMEM); }
|
||||
void mulx(const Reg& r1, const Reg32e& r2, const Operand& op) { opRRO(r1, r2, op, T_F2|T_0F38, 0xf6); }
|
||||
void mulx(const Reg& r1, const Reg32e& r2, const Operand& op) { opRRO(r1, r2, op, T_VEX|T_F2|T_0F38, 0xf6); }
|
||||
void mwait() { db(0x0F); db(0x01); db(0xC9); }
|
||||
void mwaitx() { db(0x0F); db(0x01); db(0xFB); }
|
||||
void neg(const Operand& op) { opRext(op, 0, 3, 0, 0xF6); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue