diff --git a/arm64-gen.c b/arm64-gen.c index 7adb32d6..7b122547 100644 --- a/arm64-gen.c +++ b/arm64-gen.c @@ -312,15 +312,15 @@ static void arm64_spoff(int reg, uint64_t off) static uint64_t arm64_check_offset(int invert, int sz_, uint64_t off) { uint32_t sz = sz_; - uint64_t scaled_mask = (uint64_t)0xfff << sz; + uint64_t scaled_mask = 0xffful << sz; if (!(off & ~scaled_mask) || (off < 256 || -off <= 256)) return invert ? off : 0ul; else if (off & scaled_mask) return invert ? off & scaled_mask : off & ~scaled_mask; - else if (off & (uint64_t)0x1ff) - return invert ? off & (uint64_t)0x1ff : off & ~(uint64_t)0x1ff; + else if (off & 0x1fful) + return invert ? off & 0x1fful : off & ~0x1fful; else return invert ? 0ul : off; } @@ -328,7 +328,7 @@ static uint64_t arm64_check_offset(int invert, int sz_, uint64_t off) static void arm64_ldrx(int sg, int sz_, int dst, int bas, uint64_t off) { uint32_t sz = sz_; - uint64_t scaled_mask = (uint64_t)0xfff << sz; + uint64_t scaled_mask = 0xffful << sz; if (sz >= 2) sg = 0; if (!(off & ~scaled_mask)) @@ -347,7 +347,7 @@ static void arm64_ldrx(int sg, int sz_, int dst, int bas, uint64_t off) static void arm64_ldrv(int sz_, int dst, int bas, uint64_t off) { uint32_t sz = sz_; - uint64_t scaled_mask = (uint64_t)0xfff << sz; + uint64_t scaled_mask = 0xffful << sz; if (!(off & ~scaled_mask)) o(0x3d400000 | dst | bas << 5 | off << (10 - sz) | @@ -446,7 +446,7 @@ static void arm64_ldrs(int reg_, int size) static void arm64_strx(int sz_, int dst, int bas, uint64_t off) { uint32_t sz = sz_; - uint64_t scaled_mask = (uint64_t)0xfff << sz; + uint64_t scaled_mask = 0xffful << sz; if (!(off & ~scaled_mask)) o(0x39000000 | dst | bas << 5 | off << (10 - sz) | sz << 30); @@ -464,7 +464,7 @@ static void arm64_strx(int sz_, int dst, int bas, uint64_t off) static void arm64_strv(int sz_, int dst, int bas, uint64_t off) { uint32_t sz = sz_; - uint64_t scaled_mask = (uint64_t)0xfff << sz; + uint64_t scaled_mask = 0xffful << sz; if (!(off & ~scaled_mask)) o(0x3d000000 | dst | bas << 5 | off << (10 - sz) | @@ -1798,9 +1798,9 @@ static int arm64_gen_opic(int op, uint32_t l, int rev, uint64_t val, uint32_t s = l ? val >> 63 : val >> 31; val = s ? -val : val; val = l ? val : (uint32_t)val; - if (!(val & ~(uint64_t)0xfff)) + if (!(val & ~0xffful)) o(0x11000000 | l << 31 | s << 30 | x | a << 5 | val << 10); - else if (!(val & ~(uint64_t)0xfff000)) + else if (!(val & ~0xfff000ul)) o(0x11400000 | l << 31 | s << 30 | x | a << 5 | val >> 12 << 10); else { arm64_movimm(30, val); // use x30