From 67d975662ecb977948b28d9dd4d311f40c925829 Mon Sep 17 00:00:00 2001 From: Lucas Azevedo Date: Wed, 18 Sep 2024 14:09:54 -0300 Subject: [PATCH] [next] SH: Use bitwise OR with mask for sign extension (#2389) * 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 * Remove unused store Remove unused store caught by clang-tidy. * Suppress clang-tidy false positive Ignore an unitialized va_list false positive emitted by clang-tidy --------- Co-authored-by: Wu ChenXu --- 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 76d5e4c02f..34bb036794 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);