Avoid negation of signed integers in C that may hold INT*_MIN.
Reported by minoki. Recent C compilers 'take advantage' of the undefined behavior. This completely changes the meaning of expressions like (k == -k).
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user