mulx supports apx

This commit is contained in:
MITSUNARI Shigeo 2023-11-10 09:32:44 +09:00
parent 82529af93e
commit 16f1a5d8a6
3 changed files with 13 additions and 3 deletions

View file

@ -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 },
};

View file

@ -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);

View file

@ -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); }