change error range of imm
This commit is contained in:
parent
7a1ea1ed48
commit
762f40ffc3
2 changed files with 11 additions and 9 deletions
|
@ -38,13 +38,12 @@ 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);
|
||||
CYBOZU_TEST_NO_EXCEPTION(mov(qword[eax], 0x12345678));
|
||||
CYBOZU_TEST_NO_EXCEPTION(mov(qword[eax], 0x7fffffff));
|
||||
CYBOZU_TEST_NO_EXCEPTION(mov(qword[eax], -1));
|
||||
CYBOZU_TEST_NO_EXCEPTION(mov(qword[eax], 0xffffffffffffffffull));
|
||||
CYBOZU_TEST_EXCEPTION(mov(qword[eax], 0x80000000), Xbyak::Error);
|
||||
CYBOZU_TEST_EXCEPTION(mov(qword[eax], 0xffffffff), Xbyak::Error);
|
||||
}
|
||||
} code;
|
||||
}
|
||||
|
|
|
@ -1865,8 +1865,11 @@ public:
|
|||
db(imm, size);
|
||||
} else if (op.isMEM()) {
|
||||
opModM(static_cast<const Address&>(op), Reg(0, Operand::REG, op.getBit()), B11000110);
|
||||
int size = op.getBit() / 8; if (size > 4) size = 4;
|
||||
if (0xffffffff < imm && imm <= ~uint64(0x7fffffffu)) throw Error(ERR_IMM_IS_TOO_BIG);
|
||||
int size = op.getBit() / 8;
|
||||
if (size == 8) {
|
||||
if (!inner::IsInInt32(imm)) throw Error(ERR_IMM_IS_TOO_BIG);
|
||||
size = 4;
|
||||
}
|
||||
db(static_cast<uint32>(imm), size);
|
||||
} else {
|
||||
throw Error(ERR_BAD_COMBINATION);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue