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;
|
uint8_t code;
|
||||||
} tbl[] = {
|
} tbl[] = {
|
||||||
{ "andn", T_0F38 | T_VEX | T_NF, 0xF2 },
|
{ "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 },
|
{ "pdep", T_F2 | T_0F38, 0xF5 },
|
||||||
{ "pext", T_F3 | 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_EQUAL_ARRAY(c.getCode(), tbl, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
CYBOZU_TEST_AUTO(andn)
|
CYBOZU_TEST_AUTO(andn_etc)
|
||||||
{
|
{
|
||||||
struct Code : Xbyak::CodeGenerator {
|
struct Code : Xbyak::CodeGenerator {
|
||||||
Code()
|
Code()
|
||||||
|
@ -467,11 +467,21 @@ CYBOZU_TEST_AUTO(andn)
|
||||||
andn(eax, ecx, r8d); // 32bit
|
andn(eax, ecx, r8d); // 32bit
|
||||||
andn(r29, r30, r31); // 64bit
|
andn(r29, r30, r31); // 64bit
|
||||||
andn(r29, r30, ptr [r31+r20*4]);
|
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;
|
} c;
|
||||||
const uint8_t tbl[] = {
|
const uint8_t tbl[] = {
|
||||||
|
// andn
|
||||||
0xc4, 0xc2, 0xf0, 0xf2, 0xc0, 0x62, 0xd2, 0xf4, 0x08, 0xf2, 0xc0, 0xc4, 0xc2, 0x70, 0xf2, 0xc0,
|
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,
|
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);
|
const size_t n = sizeof(tbl);
|
||||||
CYBOZU_TEST_EQUAL(c.getSize(), n);
|
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 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 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 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 mwait() { db(0x0F); db(0x01); db(0xC9); }
|
||||||
void mwaitx() { db(0x0F); db(0x01); db(0xFB); }
|
void mwaitx() { db(0x0F); db(0x01); db(0xFB); }
|
||||||
void neg(const Operand& op) { opRext(op, 0, 3, 0, 0xF6); }
|
void neg(const Operand& op) { opRext(op, 0, 3, 0, 0xF6); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue