summaryrefslogtreecommitdiff
path: root/src/lj_emit_arm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_emit_arm.h')
-rw-r--r--src/lj_emit_arm.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lj_emit_arm.h b/src/lj_emit_arm.h
index 2db07ef6..633afb49 100644
--- a/src/lj_emit_arm.h
+++ b/src/lj_emit_arm.h
@@ -154,7 +154,7 @@ static int emit_kdelta2(ASMState *as, Reg d, int32_t i)
if (other) {
int32_t delta = i - other;
uint32_t sh, inv = 0, k2, k;
- if (delta < 0) { delta = -delta; inv = ARMI_ADD^ARMI_SUB; }
+ if (delta < 0) { delta = (int32_t)(~(uint32_t)delta+1u); inv = ARMI_ADD^ARMI_SUB; }
sh = lj_ffs(delta) & ~1;
k2 = emit_isk12(0, delta & (255 << sh));
k = emit_isk12(0, delta & ~(255 << sh));