From 2c5f54c8983ed8649c1a35742bd24e696d6e34b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 28 Apr 2025 12:02:15 +0200 Subject: [PATCH 1/4] compiler-rt: Add missing _Qp_sqrt export for sparc64. https://github.com/ziglang/zig/issues/23716 --- lib/compiler_rt/sqrt.zig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/compiler_rt/sqrt.zig b/lib/compiler_rt/sqrt.zig index 331606f0f4..5c8dcc1f5a 100644 --- a/lib/compiler_rt/sqrt.zig +++ b/lib/compiler_rt/sqrt.zig @@ -13,6 +13,8 @@ comptime { @export(&__sqrtx, .{ .name = "__sqrtx", .linkage = common.linkage, .visibility = common.visibility }); if (common.want_ppc_abi) { @export(&sqrtq, .{ .name = "sqrtf128", .linkage = common.linkage, .visibility = common.visibility }); + } else if (common.want_sparc_abi) { + @export(&_Qp_sqrt, .{ .name = "_Qp_sqrt", .linkage = common.linkage, .visibility = common.visibility }); } @export(&sqrtq, .{ .name = "sqrtq", .linkage = common.linkage, .visibility = common.visibility }); @export(&sqrtl, .{ .name = "sqrtl", .linkage = common.linkage, .visibility = common.visibility }); @@ -242,6 +244,10 @@ pub fn sqrtq(x: f128) callconv(.c) f128 { return sqrt(@floatCast(x)); } +fn _Qp_sqrt(c: *f128, a: *f128) callconv(.c) void { + c.* = sqrt(@floatCast(a.*)); +} + pub fn sqrtl(x: c_longdouble) callconv(.c) c_longdouble { switch (@typeInfo(c_longdouble).float.bits) { 16 => return __sqrth(x), From d7e8337909fcf64360568c1f031240a1f9088dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 28 Apr 2025 12:02:33 +0200 Subject: [PATCH 2/4] std.os.linux: Add missing time_t definition for sparc64. --- lib/std/os/linux/sparc64.zig | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index 9d550bb582..594b11b7ac 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -304,6 +304,7 @@ pub const msghdr_const = extern struct { pub const off_t = i64; pub const ino_t = u64; +pub const time_t = isize; pub const mode_t = u32; pub const dev_t = usize; pub const nlink_t = u32; From fd4fcefe8aee5a8587b27e41de409a14e2c1dacc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 28 Apr 2025 12:01:46 +0200 Subject: [PATCH 3/4] test: Disable some varargs behavior tests on sparc. https://github.com/ziglang/zig/issues/23718 --- test/behavior/var_args.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/behavior/var_args.zig b/test/behavior/var_args.zig index a2aa154c72..19cb5c0ba5 100644 --- a/test/behavior/var_args.zig +++ b/test/behavior/var_args.zig @@ -106,6 +106,7 @@ test "simple variadic function" { } if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) return error.SkipZigTest; // TODO if (builtin.cpu.arch == .s390x and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21350 + if (builtin.cpu.arch.isSPARC() and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23718 const S = struct { fn simple(...) callconv(.c) c_int { @@ -200,6 +201,7 @@ test "variadic functions" { } if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) return error.SkipZigTest; // TODO if (builtin.cpu.arch == .s390x and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21350 + if (builtin.cpu.arch.isSPARC() and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23718 const S = struct { fn printf(list_ptr: *std.ArrayList(u8), format: [*:0]const u8, ...) callconv(.c) void { @@ -245,6 +247,7 @@ test "copy VaList" { } if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) return error.SkipZigTest; // TODO if (builtin.cpu.arch == .s390x and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21350 + if (builtin.cpu.arch.isSPARC() and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23718 const S = struct { fn add(count: c_int, ...) callconv(.c) c_int { @@ -282,6 +285,7 @@ test "unused VaList arg" { return error.SkipZigTest; // TODO } if (builtin.cpu.arch == .s390x and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21350 + if (builtin.cpu.arch.isSPARC() and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23718 const S = struct { fn thirdArg(dummy: c_int, ...) callconv(.c) c_int { From 12f56b874015be2b10ce3a279f146cba5d61c9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 28 Apr 2025 12:02:51 +0200 Subject: [PATCH 4/4] test: Disable `vector reduce operation` for sparc. https://github.com/ziglang/zig/issues/23719 --- test/behavior/vector.zig | 1 + 1 file changed, 1 insertion(+) diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index 08ff142ca5..4fd277c2a4 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -765,6 +765,7 @@ test "vector reduce operation" { if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21091 + if (builtin.cpu.arch.isSPARC()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23719 const S = struct { fn testReduce(comptime op: std.builtin.ReduceOp, x: anytype, expected: anytype) !void {