add movdiri
This commit is contained in:
parent
0ad6db1387
commit
379f8bf376
3 changed files with 13 additions and 3 deletions
|
@ -1051,6 +1051,7 @@ void put()
|
||||||
puts("void cmpxchg(const Operand& op, const Reg& reg) { opModRM(reg, op, (op.isREG() && reg.isREG() && op.getBit() == reg.getBit()), op.isMEM(), 0x0F, 0xB0 | (reg.isBit(8) ? 0 : 1)); }");
|
puts("void cmpxchg(const Operand& op, const Reg& reg) { opModRM(reg, op, (op.isREG() && reg.isREG() && op.getBit() == reg.getBit()), op.isMEM(), 0x0F, 0xB0 | (reg.isBit(8) ? 0 : 1)); }");
|
||||||
puts("void movbe(const Reg& reg, const Address& addr) { opModM(addr, reg, 0x0F, 0x38, 0xF0); }");
|
puts("void movbe(const Reg& reg, const Address& addr) { opModM(addr, reg, 0x0F, 0x38, 0xF0); }");
|
||||||
puts("void movbe(const Address& addr, const Reg& reg) { opModM(addr, reg, 0x0F, 0x38, 0xF1); }");
|
puts("void movbe(const Address& addr, const Reg& reg) { opModM(addr, reg, 0x0F, 0x38, 0xF1); }");
|
||||||
|
puts("void movdiri(const Address& addr, const Reg32e& reg) { opModM(addr, reg, 0x0F, 0x38, 0xF9); }");
|
||||||
puts("void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); }");
|
puts("void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); }");
|
||||||
puts("void adox(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0xF3, isREG32_REG32orMEM, NONE, 0x38); }");
|
puts("void adox(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0xF3, isREG32_REG32orMEM, NONE, 0x38); }");
|
||||||
puts("void cmpxchg8b(const Address& addr) { opModM(addr, Reg32(1), 0x0F, 0xC7); }");
|
puts("void cmpxchg8b(const Address& addr) { opModM(addr, Reg32(1), 0x0F, 0xC7); }");
|
||||||
|
|
|
@ -1931,19 +1931,27 @@ CYBOZU_TEST_AUTO(misc)
|
||||||
Code()
|
Code()
|
||||||
{
|
{
|
||||||
cldemote(ptr[eax+esi*4+0x12]);
|
cldemote(ptr[eax+esi*4+0x12]);
|
||||||
|
movdiri(ptr[edx+esi*2+4], eax);
|
||||||
#ifdef XBYAK64
|
#ifdef XBYAK64
|
||||||
cldemote(ptr[rax+rdi*8+0x123]);
|
cldemote(ptr[rax+rdi*8+0x123]);
|
||||||
|
movdiri(ptr[rax+r12], r9);
|
||||||
|
movdiri(ptr[rax+r12*2+4], r9d);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} c;
|
} c;
|
||||||
const uint8_t tbl[] = {
|
const uint8_t tbl[] = {
|
||||||
// cldemote
|
|
||||||
#ifdef XBYAK64
|
#ifdef XBYAK64
|
||||||
0x67,
|
0x67,
|
||||||
#endif
|
#endif
|
||||||
0x0f, 0x1c, 0x44, 0xb0, 0x12,
|
0x0f, 0x1c, 0x44, 0xb0, 0x12, // cldemote
|
||||||
#ifdef XBYAK64
|
#ifdef XBYAK64
|
||||||
0x0f, 0x1c, 0x84, 0xf8, 0x23, 0x01, 0x00, 0x00
|
0x67,
|
||||||
|
#endif
|
||||||
|
0x0f, 0x38, 0xf9, 0x44, 0x72, 0x04, // movdiri
|
||||||
|
#ifdef XBYAK64
|
||||||
|
0x0f, 0x1c, 0x84, 0xf8, 0x23, 0x01, 0x00, 0x00, // cldemote
|
||||||
|
0x4e, 0x0f, 0x38, 0xf9, 0x0c, 0x20, // movdiri
|
||||||
|
0x46, 0x0f, 0x38, 0xf9, 0x4c, 0x60, 0x04, // movdiri
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
|
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
|
||||||
|
|
|
@ -503,6 +503,7 @@ void movd(const Mmx& mmx, const Address& addr) { if (mmx.isXMM()) db(0x66); opMo
|
||||||
void movd(const Mmx& mmx, const Reg32& reg) { if (mmx.isXMM()) db(0x66); opModR(mmx, reg, 0x0F, 0x6E); }
|
void movd(const Mmx& mmx, const Reg32& reg) { if (mmx.isXMM()) db(0x66); opModR(mmx, reg, 0x0F, 0x6E); }
|
||||||
void movd(const Reg32& reg, const Mmx& mmx) { if (mmx.isXMM()) db(0x66); opModR(mmx, reg, 0x0F, 0x7E); }
|
void movd(const Reg32& reg, const Mmx& mmx) { if (mmx.isXMM()) db(0x66); opModR(mmx, reg, 0x0F, 0x7E); }
|
||||||
void movddup(const Xmm& xmm, const Operand& op) { opGen(xmm, op, 0x12, 0xF2, isXMM_XMMorMEM, NONE, NONE); }
|
void movddup(const Xmm& xmm, const Operand& op) { opGen(xmm, op, 0x12, 0xF2, isXMM_XMMorMEM, NONE, NONE); }
|
||||||
|
void movdiri(const Address& addr, const Reg32e& reg) { opModM(addr, reg, 0x0F, 0x38, 0xF9); }
|
||||||
void movdq2q(const Mmx& mmx, const Xmm& xmm) { db(0xF2); opModR(mmx, xmm, 0x0F, 0xD6); }
|
void movdq2q(const Mmx& mmx, const Xmm& xmm) { db(0xF2); opModR(mmx, xmm, 0x0F, 0xD6); }
|
||||||
void movdqa(const Address& addr, const Xmm& xmm) { db(0x66); opModM(addr, xmm, 0x0F, 0x7F); }
|
void movdqa(const Address& addr, const Xmm& xmm) { db(0x66); opModM(addr, xmm, 0x0F, 0x7F); }
|
||||||
void movdqa(const Xmm& xmm, const Operand& op) { opMMX(xmm, op, 0x6F, 0x66); }
|
void movdqa(const Xmm& xmm, const Operand& op) { opMMX(xmm, op, 0x6F, 0x66); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue