| author | |
| committer | |
| log | 160e1b229b6859861108270fc8783851a38517c6 |
| tree | e7411927ab481ba6ab4f2bcdff1c34fec2f7fc19 |
| parent | c5af4c75da81616eadce8cf866aac86fb9e4ba9d |
Fixes #31067
Co-authored-by: ndjenks <ndjenkoua@gmail.com>
Reviewed-on: https://codeberg.org/ziglang/zig/pulls/35835
Reviewed-by: Alex Rønne Petersen <alex@alexrp.com>21 files changed, 96 insertions(+), 25 deletions(-)
lib/compiler_rt.zig+2-1| ... | ... | @@ -441,7 +441,8 @@ pub const gnu_f16_abi = switch (builtin.cpu.arch) { |
| 441 | 441 | else => !builtin.os.tag.isDarwin(), |
| 442 | 442 | }; |
| 443 | 443 | |
| 444 | pub const want_sparc_abi = builtin.cpu.arch.isSPARC(); | |
| 444 | pub const want_sparc64_abi = builtin.cpu.arch == .sparc64; | |
| 445 | pub const want_sparc32_abi = builtin.cpu.arch == .sparc; | |
| 445 | 446 | |
| 446 | 447 | pub fn F16T(comptime OtherType: type) type { |
| 447 | 448 | return switch (builtin.cpu.arch) { |
lib/compiler_rt/addtf3.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const addf3 = @import("./addf3.zig").addf3; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__addtf3, "__addkf3"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_add, "_Qp_add"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__addtf3, "_Q_add"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__addtf3, "__addtf3"); |
| 12 | 14 | } |
lib/compiler_rt/cmptf2.zig+43-1| ... | ... | @@ -10,7 +10,7 @@ comptime { |
| 10 | 10 | symbol(&__netf2, "__nekf2"); |
| 11 | 11 | symbol(&__lttf2, "__ltkf2"); |
| 12 | 12 | symbol(&__letf2, "__lekf2"); |
| 13 | } else if (compiler_rt.want_sparc_abi) { | |
| 13 | } else if (compiler_rt.want_sparc64_abi) { | |
| 14 | 14 | symbol(&_Qp_cmp, "_Qp_cmp"); |
| 15 | 15 | symbol(&_Qp_feq, "_Qp_feq"); |
| 16 | 16 | symbol(&_Qp_fne, "_Qp_fne"); |
| ... | ... | @@ -18,6 +18,14 @@ comptime { |
| 18 | 18 | symbol(&_Qp_fle, "_Qp_fle"); |
| 19 | 19 | symbol(&_Qp_fgt, "_Qp_fgt"); |
| 20 | 20 | symbol(&_Qp_fge, "_Qp_fge"); |
| 21 | } else if (compiler_rt.want_sparc32_abi) { | |
| 22 | symbol(&_Q_cmp, "_Q_cmp"); | |
| 23 | symbol(&_Q_feq, "_Q_feq"); | |
| 24 | symbol(&_Q_fne, "_Q_fne"); | |
| 25 | symbol(&_Q_flt, "_Q_flt"); | |
| 26 | symbol(&_Q_fle, "_Q_fle"); | |
| 27 | symbol(&_Q_fgt, "_Q_fgt"); | |
| 28 | symbol(&_Q_fge, "_Q_fge"); | |
| 21 | 29 | } |
| 22 | 30 | symbol(&__eqtf2, "__eqtf2"); |
| 23 | 31 | symbol(&__netf2, "__netf2"); |
| ... | ... | @@ -102,3 +110,37 @@ fn _Qp_fle(a: *const f128, b: *const f128) callconv(.c) bool { |
| 102 | 110 | .Greater, .Unordered => false, |
| 103 | 111 | }; |
| 104 | 112 | } |
| 113 | ||
| 114 | fn _Q_cmp(a: f128, b: f128) callconv(.c) i32 { | |
| 115 | return @intFromEnum(comparef.cmpf2(f128, SparcFCMP, a, b)); | |
| 116 | } | |
| 117 | ||
| 118 | fn _Q_feq(a: f128, b: f128) callconv(.c) bool { | |
| 119 | return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Equal; | |
| 120 | } | |
| 121 | ||
| 122 | fn _Q_fne(a: f128, b: f128) callconv(.c) bool { | |
| 123 | return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) != .Equal; | |
| 124 | } | |
| 125 | ||
| 126 | fn _Q_flt(a: f128, b: f128) callconv(.c) bool { | |
| 127 | return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Less; | |
| 128 | } | |
| 129 | ||
| 130 | fn _Q_fgt(a: f128, b: f128) callconv(.c) bool { | |
| 131 | return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Greater; | |
| 132 | } | |
| 133 | ||
| 134 | fn _Q_fge(a: f128, b: f128) callconv(.c) bool { | |
| 135 | return switch (@as(SparcFCMP, @enumFromInt(_Q_cmp(a, b)))) { | |
| 136 | .Equal, .Greater => true, | |
| 137 | .Less, .Unordered => false, | |
| 138 | }; | |
| 139 | } | |
| 140 | ||
| 141 | fn _Q_fle(a: f128, b: f128) callconv(.c) bool { | |
| 142 | return switch (@as(SparcFCMP, @enumFromInt(_Q_cmp(a, b)))) { | |
| 143 | .Equal, .Less => true, | |
| 144 | .Greater, .Unordered => false, | |
| 145 | }; | |
| 146 | } |
lib/compiler_rt/comparef.zig-3| ... | ... | @@ -32,9 +32,6 @@ comptime { |
| 32 | 32 | |
| 33 | 33 | if (compiler_rt.want_ppc_abi) { |
| 34 | 34 | symbol(&__unordtf2, "__unordkf2"); |
| 35 | } else if (compiler_rt.want_sparc_abi) { | |
| 36 | // These exports are handled in cmptf2.zig because unordered comparisons | |
| 37 | // are based on calling _Qp_cmp. | |
| 38 | 35 | } |
| 39 | 36 | symbol(&__unordtf2, "__unordtf2"); |
| 40 | 37 | symbol(&__unordhf2, "__unordhf2"); |
lib/compiler_rt/divtf3.zig+3-1| ... | ... | @@ -9,8 +9,10 @@ const wideMultiply = compiler_rt.wideMultiply; |
| 9 | 9 | comptime { |
| 10 | 10 | if (compiler_rt.want_ppc_abi) { |
| 11 | 11 | symbol(&__divtf3, "__divkf3"); |
| 12 | } else if (compiler_rt.want_sparc_abi) { | |
| 12 | } else if (compiler_rt.want_sparc64_abi) { | |
| 13 | 13 | symbol(&_Qp_div, "_Qp_div"); |
| 14 | } else if (compiler_rt.want_sparc32_abi) { | |
| 15 | symbol(&__divtf3, "_Q_div"); | |
| 14 | 16 | } |
| 15 | 17 | symbol(&__divtf3, "__divtf3"); |
| 16 | 18 | } |
lib/compiler_rt/extenddftf2.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const symbol = @import("../compiler_rt.zig").symbol; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__extenddftf2, "__extenddfkf2"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_dtoq, "_Qp_dtoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__extenddftf2, "_Q_dtoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__extenddftf2, "__extenddftf2"); |
| 12 | 14 | } |
lib/compiler_rt/extendsftf2.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const extendf = @import("./extendf.zig").extendf; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__extendsftf2, "__extendsfkf2"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_stoq, "_Qp_stoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__extendsftf2, "_Q_stoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__extendsftf2, "__extendsftf2"); |
| 12 | 14 | } |
lib/compiler_rt/fixtfdi.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const symbol = @import("../compiler_rt.zig").symbol; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__fixtfdi, "__fixkfdi"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtox, "_Qp_qtox"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__fixtfdi, "_Q_qtoll"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__fixtfdi, "__fixtfdi"); |
| 12 | 14 | } |
lib/compiler_rt/fixtfsi.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const intFromFloat = @import("./int_from_float.zig").intFromFloat; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__fixtfsi, "__fixkfsi"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtoi, "_Qp_qtoi"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__fixtfsi, "_Q_qtoi"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__fixtfsi, "__fixtfsi"); |
| 12 | 14 | } |
lib/compiler_rt/fixunstfdi.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const intFromFloat = @import("./int_from_float.zig").intFromFloat; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__fixunstfdi, "__fixunskfdi"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtoux, "_Qp_qtoux"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__fixunstfdi, "_Q_qtoull"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__fixunstfdi, "__fixunstfdi"); |
| 12 | 14 | } |
lib/compiler_rt/fixunstfsi.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const intFromFloat = @import("./int_from_float.zig").intFromFloat; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__fixunstfsi, "__fixunskfsi"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtoui, "_Qp_qtoui"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__fixunstfsi, "_Q_qtou"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__fixunstfsi, "__fixunstfsi"); |
| 12 | 14 | } |
lib/compiler_rt/floatditf.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const symbol = @import("../compiler_rt.zig").symbol; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__floatditf, "__floatdikf"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_xtoq, "_Qp_xtoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__floatditf, "_Q_lltoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__floatditf, "__floatditf"); |
| 12 | 14 | } |
lib/compiler_rt/floatsitf.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const floatFromInt = @import("./float_from_int.zig").floatFromInt; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__floatsitf, "__floatsikf"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_itoq, "_Qp_itoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__floatsitf, "_Q_itoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__floatsitf, "__floatsitf"); |
| 12 | 14 | } |
lib/compiler_rt/floatunditf.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const floatFromInt = @import("./float_from_int.zig").floatFromInt; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__floatunditf, "__floatundikf"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_uxtoq, "_Qp_uxtoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | @export(&__floatunditf, "_Q_ulltoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__floatunditf, "__floatunditf"); |
| 12 | 14 | } |
lib/compiler_rt/floatunsitf.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const symbol = @import("../compiler_rt.zig").symbol; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__floatunsitf, "__floatunsikf"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_uitoq, "_Qp_uitoq"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__floatunsitf, "_Q_utoq"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__floatunsitf, "__floatunsitf"); |
| 12 | 14 | } |
lib/compiler_rt/getf2.zig-3| ... | ... | @@ -8,9 +8,6 @@ comptime { |
| 8 | 8 | if (compiler_rt.want_ppc_abi) { |
| 9 | 9 | symbol(&__getf2, "__gekf2"); |
| 10 | 10 | symbol(&__gttf2, "__gtkf2"); |
| 11 | } else if (compiler_rt.want_sparc_abi) { | |
| 12 | // These exports are handled in cmptf2.zig because gt and ge on sparc | |
| 13 | // are based on calling _Qp_cmp. | |
| 14 | 11 | } |
| 15 | 12 | symbol(&__getf2, "__getf2"); |
| 16 | 13 | symbol(&__gttf2, "__gttf2"); |
lib/compiler_rt/multf3.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const mulf3 = @import("./mulf3.zig").mulf3; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__multf3, "__mulkf3"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_mul, "_Qp_mul"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__multf3, "_Q_mul"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__multf3, "__multf3"); |
| 12 | 14 | } |
lib/compiler_rt/sqrt.zig+3-1| ... | ... | @@ -19,8 +19,10 @@ comptime { |
| 19 | 19 | symbol(&__sqrtx, "__sqrtx"); |
| 20 | 20 | if (compiler_rt.want_ppc_abi) { |
| 21 | 21 | symbol(&sqrtq, "sqrtf128"); |
| 22 | } else if (compiler_rt.want_sparc_abi) { | |
| 22 | } else if (compiler_rt.want_sparc64_abi) { | |
| 23 | 23 | symbol(&_Qp_sqrt, "_Qp_sqrt"); |
| 24 | } else if (compiler_rt.want_sparc32_abi) { | |
| 25 | symbol(&sqrtq, "_Q_sqrt"); | |
| 24 | 26 | } |
| 25 | 27 | symbol(&sqrtq, "sqrtq"); |
| 26 | 28 | symbol(&sqrtl, "sqrtl"); |
lib/compiler_rt/subtf3.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const addf3 = @import("./addf3.zig").addf3; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__subtf3, "__subkf3"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_sub, "_Qp_sub"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__subtf3, "_Q_sub"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__subtf3, "__subtf3"); |
| 12 | 14 | } |
lib/compiler_rt/trunctfdf2.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const truncf = @import("./truncf.zig").truncf; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__trunctfdf2, "__trunckfdf2"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtod, "_Qp_qtod"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__trunctfdf2, "_Q_qtod"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__trunctfdf2, "__trunctfdf2"); |
| 12 | 14 | } |
lib/compiler_rt/trunctfsf2.zig+3-1| ... | ... | @@ -5,8 +5,10 @@ const symbol = @import("../compiler_rt.zig").symbol; |
| 5 | 5 | comptime { |
| 6 | 6 | if (compiler_rt.want_ppc_abi) { |
| 7 | 7 | symbol(&__trunctfsf2, "__trunckfsf2"); |
| 8 | } else if (compiler_rt.want_sparc_abi) { | |
| 8 | } else if (compiler_rt.want_sparc64_abi) { | |
| 9 | 9 | symbol(&_Qp_qtos, "_Qp_qtos"); |
| 10 | } else if (compiler_rt.want_sparc32_abi) { | |
| 11 | symbol(&__trunctfsf2, "_Q_qtos"); | |
| 10 | 12 | } |
| 11 | 13 | symbol(&__trunctfsf2, "__trunctfsf2"); |
| 12 | 14 | } |