aboutsummaryrefslogtreecommitdiffhomepage
path: root/x86_64/emit.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2026-03-08 19:03:41 +0100
committerlemon <lsof@mailbox.org>2026-03-08 19:03:59 +0100
commitd943de389796a44e40be39ef46aa5be01013a166 (patch)
tree80ecad7f06727f94737653ca6c89655ae9f3afd9 /x86_64/emit.c
parent77f78e58c94812d1ec40b57df86d2a87e6f32b41 (diff)
fix some more cases of signed integer overflow
Diffstat (limited to 'x86_64/emit.c')
-rw-r--r--x86_64/emit.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/x86_64/emit.c b/x86_64/emit.c
index fbee46b..d3a466b 100644
--- a/x86_64/emit.c
+++ b/x86_64/emit.c
@@ -370,7 +370,7 @@ encode(uchar **pcode, const struct desc *tab, int ntab, enum irclass k, struct o
if (mem.index == NOINDEX && mem.shift == 0) sib = 0;
else sib = 1;
mod = !mem.disp ? 0 /* disp = 0 -> mod = 00 */
- : (uint)(mem.disp + 128) < 256 ? 1 /* disp8 -> mod = 01 */
+ : (schar)mem.disp == mem.disp ? 1 /* disp8 -> mod = 01 */
: 2; /* disp32 -> mod = 10 */
if (mod == 0 && (mem.base == RBP || mem.base == R13)) mod = 1;
if (mem.base == RSP || mem.base == R12) sib = 1;
@@ -1030,7 +1030,7 @@ emitinstr(uchar **pcode, struct function *fn, struct block *blk, int curi, struc
} else if (ins->reg-1 == dst.reg) { /* two-address add */
src = ref2oper(ins->r);
if (src.t == OIMM && src.imm < 0) /* ADD -imm -> SUB imm, for niceness */
- Xsub(pcode, cls, dst, (src.imm = -src.imm, src));
+ Xsub(pcode, cls, dst, (src.imm = -(uint)src.imm, src));
else
Xadd(pcode, cls, dst, src);
} else if (isregref(ins->r) && ins->reg-1 == mkregoper(ins->r).reg) {