authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-18 23:46:34+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-18 23:46:34+02:00
log0346aef2da921a424e0763ed345adc207b4e684b
tree0a9a5b1d5ab255990ea3a9dab640f58c3eedb4fb
parent9636d76b6d26d142f7d23e6d25eec1c28cf571b4
parent2c5f2d67c1695a24b58d257706b9e9611fdb3f12

Merge pull request 'limb64: make fixLastLimb endian aware' (#31910) from pavelverigo/zig:limb64-be-fixes into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/31910 Reviewed-by: Andrew Kelley <andrew@ziglang.org>

1 files changed, 3 insertions(+), 34 deletions(-)

lib/compiler_rt/limb64.zig+3-34
...@@ -57,9 +57,10 @@ fn fixLastLimb(out_ptr: [*]u64, is_signed: bool, bits: u16) void {...@@ -57,9 +57,10 @@ fn fixLastLimb(out_ptr: [*]u64, is_signed: bool, bits: u16) void {
57 if (limb_cnt == true_limb_cnt) return;57 if (limb_cnt == true_limb_cnt) return;
58 const true_out = out_ptr[0..true_limb_cnt];58 const true_out = out_ptr[0..true_limb_cnt];
5959
60 const sign: u64 = if (!is_signed or @as(i64, @bitCast(true_out[limb_cnt - 1])) >= 0) 0 else ~@as(u64, 0);60 const ms = limbGet(true_out, limb_cnt - 1);
61 const sign: u64 = if (!is_signed or @as(i64, @bitCast(ms)) >= 0) 0 else ~@as(u64, 0);
61 for (limb_cnt..true_limb_cnt) |i| {62 for (limb_cnt..true_limb_cnt) |i| {
62 true_out[i] = sign;63 limbSet(true_out, i, sign);
63 }64 }
64}65}
6566
...@@ -152,10 +153,6 @@ fn test__addo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })...@@ -152,10 +153,6 @@ fn test__addo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })
152}153}
153154
154test __addo_limb64 {155test __addo_limb64 {
155 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
156 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
157 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
158
159 try test__addo_limb64(u64, 1, 2, .{ 3, false });156 try test__addo_limb64(u64, 1, 2, .{ 3, false });
160 try test__addo_limb64(u64, maxInt(u64), 2, .{ 1, true });157 try test__addo_limb64(u64, maxInt(u64), 2, .{ 1, true });
161 try test__addo_limb64(u65, maxInt(u65), 2, .{ 1, true });158 try test__addo_limb64(u65, maxInt(u65), 2, .{ 1, true });
...@@ -232,10 +229,6 @@ fn test__subo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })...@@ -232,10 +229,6 @@ fn test__subo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })
232}229}
233230
234test __subo_limb64 {231test __subo_limb64 {
235 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
236 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
237 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
238
239 try test__subo_limb64(u64, 3, 2, .{ 1, false });232 try test__subo_limb64(u64, 3, 2, .{ 1, false });
240 try test__subo_limb64(u64, 0, 1, .{ maxInt(u64), true });233 try test__subo_limb64(u64, 0, 1, .{ maxInt(u64), true });
241 try test__subo_limb64(u65, 0, 1, .{ maxInt(u65), true });234 try test__subo_limb64(u65, 0, 1, .{ maxInt(u65), true });
...@@ -485,10 +478,6 @@ fn test__not_limb64(comptime T: type, a: T, expected: T) !void {...@@ -485,10 +478,6 @@ fn test__not_limb64(comptime T: type, a: T, expected: T) !void {
485}478}
486479
487test __not_limb64 {480test __not_limb64 {
488 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
489 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
490 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
491
492 try test__not_limb64(u64, 1, maxInt(u64) - 1);481 try test__not_limb64(u64, 1, maxInt(u64) - 1);
493 try test__not_limb64(u64, 3, maxInt(u64) - 3);482 try test__not_limb64(u64, 3, maxInt(u64) - 3);
494 try test__not_limb64(u65, maxInt(u65), 0);483 try test__not_limb64(u65, maxInt(u65), 0);
...@@ -567,10 +556,6 @@ fn test__shlo_limb64(comptime T: type, a: T, shift: u16, expected: struct { T, b...@@ -567,10 +556,6 @@ fn test__shlo_limb64(comptime T: type, a: T, shift: u16, expected: struct { T, b
567}556}
568557
569test __shlo_limb64 {558test __shlo_limb64 {
570 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
571 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
572 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
573
574 try test__shlo_limb64(u64, 0x1234_5678_9ABC_DEF0, 4, .{ 0x2345_6789_ABCD_EF00, true });559 try test__shlo_limb64(u64, 0x1234_5678_9ABC_DEF0, 4, .{ 0x2345_6789_ABCD_EF00, true });
575 try test__shlo_limb64(u64, 0x8000_0000_0000_0001, 63, .{ 0x8000_0000_0000_0000, true });560 try test__shlo_limb64(u64, 0x8000_0000_0000_0001, 63, .{ 0x8000_0000_0000_0000, true });
576 try test__shlo_limb64(u65, 1, 64, .{ 0x1_0000_0000_0000_0000, false });561 try test__shlo_limb64(u65, 1, 64, .{ 0x1_0000_0000_0000_0000, false });
...@@ -647,10 +632,6 @@ fn test__shr_limb64(comptime T: type, a: T, shift: u16, expected: T) !void {...@@ -647,10 +632,6 @@ fn test__shr_limb64(comptime T: type, a: T, shift: u16, expected: T) !void {
647}632}
648633
649test __shr_limb64 {634test __shr_limb64 {
650 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
651 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
652 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
653
654 try test__shr_limb64(u64, 0x1234_5678_9ABC_DEF0, 4, 0x0123_4567_89AB_CDEF);635 try test__shr_limb64(u64, 0x1234_5678_9ABC_DEF0, 4, 0x0123_4567_89AB_CDEF);
655 try test__shr_limb64(u64, 0x8000_0000_0000_0001, 63, 1);636 try test__shr_limb64(u64, 0x8000_0000_0000_0001, 63, 1);
656 try test__shr_limb64(u65, 0x1_0000_0000_0000_0000, 64, 1);637 try test__shr_limb64(u65, 0x1_0000_0000_0000_0000, 64, 1);
...@@ -878,10 +859,6 @@ fn test__bitreverse_limb64(comptime T: type, a: T, expected: T) !void {...@@ -878,10 +859,6 @@ fn test__bitreverse_limb64(comptime T: type, a: T, expected: T) !void {
878}859}
879860
880test __bitreverse_limb64 {861test __bitreverse_limb64 {
881 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
882 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
883 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
884
885 try test__bitreverse_limb64(u64, 1 << 7, 1 << 56);862 try test__bitreverse_limb64(u64, 1 << 7, 1 << 56);
886 try test__bitreverse_limb64(u65, 1 << 64, 1);863 try test__bitreverse_limb64(u65, 1 << 64, 1);
887 try test__bitreverse_limb64(u65, 1 << 9, 1 << 55);864 try test__bitreverse_limb64(u65, 1 << 9, 1 << 55);
...@@ -934,10 +911,6 @@ fn test__byteswap_limb64(comptime T: type, a: T, expected: T) !void {...@@ -934,10 +911,6 @@ fn test__byteswap_limb64(comptime T: type, a: T, expected: T) !void {
934}911}
935912
936test __byteswap_limb64 {913test __byteswap_limb64 {
937 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
938 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
939 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
940
941 try test__byteswap_limb64(u64, 0x0123_4567_89AB_CDEF, 0xEFCD_AB89_6745_2301);914 try test__byteswap_limb64(u64, 0x0123_4567_89AB_CDEF, 0xEFCD_AB89_6745_2301);
942 try test__byteswap_limb64(u72, 0x01_23_45_67_89_AB_CD_EF_11, 0x11_EF_CD_AB_89_67_45_23_01);915 try test__byteswap_limb64(u72, 0x01_23_45_67_89_AB_CD_EF_11, 0x11_EF_CD_AB_89_67_45_23_01);
943 try test__byteswap_limb64(u128, 1 << 72, 1 << 48);916 try test__byteswap_limb64(u128, 1 << 72, 1 << 48);
...@@ -1064,10 +1037,6 @@ fn test__mulo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })...@@ -1064,10 +1037,6 @@ fn test__mulo_limb64(comptime T: type, a: T, b: T, expected: struct { T, bool })
1064}1037}
10651038
1066test __mulo_limb64 {1039test __mulo_limb64 {
1067 if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
1068 if (builtin.cpu.arch == .mips64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
1069 if (builtin.cpu.arch == .powerpc64) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/31905
1070
1071 try test__mulo_limb64(u64, 3, 5, .{ 15, false });1040 try test__mulo_limb64(u64, 3, 5, .{ 15, false });
1072 try test__mulo_limb64(u64, maxInt(u64), 2, .{ maxInt(u64) - 1, true });1041 try test__mulo_limb64(u64, maxInt(u64), 2, .{ maxInt(u64) - 1, true });
1073 try test__mulo_limb64(u65, 1 << 32, 1 << 32, .{ 1 << 64, false });1042 try test__mulo_limb64(u65, 1 << 32, 1 << 32, .{ 1 << 64, false });