Use bitwise OR with mask for sign extension (#2371)
Sign extend using bitwise OR with mask, instead of unary minus. Fixes error when building for UWP with Security Development Lifecycle (SDL). See https://learn.microsoft.com/en-us/cpp/build/reference/sdl-enable-additional-security-checks?view=msvc-170
This commit is contained in:
parent
3f87ce0f6a
commit
e90ef3928f
|
@ -1459,13 +1459,13 @@ static bool decode_long(uint32_t code, uint64_t address, MCInst *MI,
|
||||||
if (code & 0x00010000) {
|
if (code & 0x00010000) {
|
||||||
// movi20s #imm,
|
// movi20s #imm,
|
||||||
imm <<= 8;
|
imm <<= 8;
|
||||||
if (imm >= 1 << 27)
|
if (imm & (1 << (28 - 1)))
|
||||||
imm = -((1 << 28) - imm);
|
imm |= ~((1 << 28) - 1);
|
||||||
insn = SH_INS_MOVI20S;
|
insn = SH_INS_MOVI20S;
|
||||||
} else {
|
} else {
|
||||||
// MOVI20
|
// MOVI20
|
||||||
if (imm >= 1 << 19)
|
if (imm & (1 << (28 - 1)))
|
||||||
imm = -((1 << 20) - imm);
|
imm |= ~((1 << 20) - 1);
|
||||||
insn = SH_INS_MOVI20;
|
insn = SH_INS_MOVI20;
|
||||||
}
|
}
|
||||||
set_imm(info, 0, imm);
|
set_imm(info, 0, imm);
|
||||||
|
|
Loading…
Reference in New Issue