From efd40478af08995731e29c3f8fd9babca3b8186e Mon Sep 17 00:00:00 2001 From: Lucas Azevedo Date: Tue, 28 May 2024 21:59:16 -0300 Subject: [PATCH] Use bitwise OR with mask for sign extension 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 --- arch/SH/SHDisassembler.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/SH/SHDisassembler.c b/arch/SH/SHDisassembler.c index 8f788096b4..da827a277c 100644 --- a/arch/SH/SHDisassembler.c +++ b/arch/SH/SHDisassembler.c @@ -1459,13 +1459,13 @@ static bool decode_long(uint32_t code, uint64_t address, MCInst *MI, if (code & 0x00010000) { // movi20s #imm, imm <<= 8; - if (imm >= 1 << 27) - imm = -((1 << 28) - imm); + if (imm & (1 << (28 - 1))) + imm |= ~((1 << 28) - 1); insn = SH_INS_MOVI20S; } else { // MOVI20 - if (imm >= 1 << 19) - imm = -((1 << 20) - imm); + if (imm & (1 << (28 - 1))) + imm |= ~((1 << 20) - 1); insn = SH_INS_MOVI20; } set_imm(info, 0, imm);