check imm of mov(Operand, imm)
This commit is contained in:
parent
93aae57298
commit
f03bbc298d
3 changed files with 22 additions and 4 deletions
|
@ -30,5 +30,22 @@ CYBOZU_TEST_AUTO(compOperand)
|
||||||
CYBOZU_TEST_ASSERT(ptr[eax] == ptr[eax]);
|
CYBOZU_TEST_ASSERT(ptr[eax] == ptr[eax]);
|
||||||
CYBOZU_TEST_ASSERT(dword[eax] != ptr[eax]);
|
CYBOZU_TEST_ASSERT(dword[eax] != ptr[eax]);
|
||||||
CYBOZU_TEST_ASSERT(ptr[eax] != ptr[eax+3]);
|
CYBOZU_TEST_ASSERT(ptr[eax] != ptr[eax+3]);
|
||||||
CYBOZU_TEST_ASSERT(ptr[eax] != ptr[eax+3]);
|
}
|
||||||
}
|
|
||||||
|
#ifdef XBYAK64
|
||||||
|
CYBOZU_TEST_AUTO(mov_const)
|
||||||
|
{
|
||||||
|
struct Code : Xbyak::CodeGenerator {
|
||||||
|
Code()
|
||||||
|
{
|
||||||
|
CYBOZU_TEST_NO_EXCEPTION(mov(dword[eax], -1));
|
||||||
|
CYBOZU_TEST_NO_EXCEPTION(mov(dword[eax], 0x7fffffff));
|
||||||
|
CYBOZU_TEST_NO_EXCEPTION(mov(dword[eax], -0x7fffffff));
|
||||||
|
CYBOZU_TEST_NO_EXCEPTION(mov(dword[eax], 0xabcd1234));
|
||||||
|
CYBOZU_TEST_NO_EXCEPTION(mov(dword[eax], 0xffffffff));
|
||||||
|
CYBOZU_TEST_EXCEPTION(mov(dword[eax], 0x100000000ull), Xbyak::Error);
|
||||||
|
CYBOZU_TEST_EXCEPTION(mov(dword[eax], -0x80000000ull), Xbyak::Error);
|
||||||
|
}
|
||||||
|
} code;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -100,7 +100,7 @@ namespace Xbyak {
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
DEFAULT_MAX_CODE_SIZE = 4096,
|
DEFAULT_MAX_CODE_SIZE = 4096,
|
||||||
VERSION = 0x4850 /* 0xABCD = A.BC(D) */
|
VERSION = 0x4851 /* 0xABCD = A.BC(D) */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef MIE_INTEGER_TYPE_DEFINED
|
#ifndef MIE_INTEGER_TYPE_DEFINED
|
||||||
|
@ -1866,6 +1866,7 @@ public:
|
||||||
} else if (op.isMEM()) {
|
} else if (op.isMEM()) {
|
||||||
opModM(static_cast<const Address&>(op), Reg(0, Operand::REG, op.getBit()), B11000110);
|
opModM(static_cast<const Address&>(op), Reg(0, Operand::REG, op.getBit()), B11000110);
|
||||||
int size = op.getBit() / 8; if (size > 4) size = 4;
|
int size = op.getBit() / 8; if (size > 4) size = 4;
|
||||||
|
if (0xffffffff < imm && imm <= ~uint64(0x7fffffffu)) throw Error(ERR_OFFSET_IS_TOO_BIG);
|
||||||
db(static_cast<uint32>(imm), size);
|
db(static_cast<uint32>(imm), size);
|
||||||
} else {
|
} else {
|
||||||
throw Error(ERR_BAD_COMBINATION);
|
throw Error(ERR_BAD_COMBINATION);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const char *getVersionString() const { return "4.85"; }
|
const char *getVersionString() const { return "4.851"; }
|
||||||
void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); }
|
void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); }
|
||||||
void packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); }
|
void packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); }
|
||||||
void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); }
|
void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue