authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-22 13:11:22-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-22 20:08:04-04:00
log874ad98f7ab0f5b7d2b5c035b974daf163474c29
treef46d63c968aa74bf6338af1c5c5d1c4eac47612d
parent4a132d4bce75aa9d81b5af0e8c2180ce1e0a3c60

Dwarf: fix treating big int limbs as signed


1 files changed, 2 insertions(+), 5 deletions(-)

src/link/Dwarf.zig+2-5
...@@ -1418,11 +1418,8 @@ pub const WipNav = struct {...@@ -1418,11 +1418,8 @@ pub const WipNav = struct {
1418 const limb_index = bit / limb_bits;1418 const limb_index = bit / limb_bits;
1419 const limb_shift: std.math.Log2Int(std.math.big.Limb) = @intCast(bit % limb_bits);1419 const limb_shift: std.math.Log2Int(std.math.big.Limb) = @intCast(bit % limb_bits);
1420 const low_abs_part: u7 = @truncate(big_int.limbs[limb_index] >> limb_shift);1420 const low_abs_part: u7 = @truncate(big_int.limbs[limb_index] >> limb_shift);
1421 const abs_part = if (limb_shift > limb_bits - 7) abs_part: {1421 const abs_part = if (limb_shift > limb_bits - 7 and limb_index + 1 < big_int.limbs.len) abs_part: {
1422 const next_limb: std.math.big.Limb = if (limb_index + 1 < big_int.limbs.len)1422 const high_abs_part: u7 = @truncate(big_int.limbs[limb_index + 1] << -%limb_shift);
1423 big_int.limbs[limb_index + 1]
1424 else if (big_int.positive) 0 else std.math.maxInt(std.math.big.Limb);
1425 const high_abs_part: u7 = @truncate(next_limb << -%limb_shift);
1426 break :abs_part high_abs_part | low_abs_part;1423 break :abs_part high_abs_part | low_abs_part;
1427 } else low_abs_part;1424 } else low_abs_part;
1428 const twos_comp_part = if (big_int.positive) abs_part else twos_comp_part: {1425 const twos_comp_part = if (big_int.positive) abs_part else twos_comp_part: {