From 4c17b93f0a002606187430533c9efb2af89e8c63 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 6 Mar 2022 16:34:44 -0700 Subject: [PATCH] compiler_rt: additional powerpc-specific alias Apparently LLVM lowers f128 fma to `fmaf128` instead of `fmal`. --- lib/std/special/compiler_rt.zig | 45 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/lib/std/special/compiler_rt.zig b/lib/std/special/compiler_rt.zig index dd97642c58..e5aca0fdc7 100644 --- a/lib/std/special/compiler_rt.zig +++ b/lib/std/special/compiler_rt.zig @@ -674,6 +674,27 @@ comptime { @export(_aullrem, .{ .name = "\x01__aullrem", .linkage = strong_linkage }); } + const fmodl = @import("compiler_rt/floatfmodl.zig").fmodl; + @export(fmodl, .{ .name = "fmodl", .linkage = linkage }); + + @export(floorf, .{ .name = "floorf", .linkage = linkage }); + @export(floor, .{ .name = "floor", .linkage = linkage }); + @export(floorl, .{ .name = "floorl", .linkage = linkage }); + + @export(fma, .{ .name = "fma", .linkage = linkage }); + @export(fmaf, .{ .name = "fmaf", .linkage = linkage }); + @export(fmal, .{ .name = "fmal", .linkage = linkage }); + if (long_double_is_f80) { + @export(fmal, .{ .name = "__fmax", .linkage = linkage }); + } else { + @export(__fmax, .{ .name = "__fmax", .linkage = linkage }); + } + if (long_double_is_f128) { + @export(fmal, .{ .name = "fmaq", .linkage = linkage }); + } else { + @export(fmaq, .{ .name = "fmaq", .linkage = linkage }); + } + if (arch.isSPARC()) { // SPARC systems use a different naming scheme const _Qp_add = @import("compiler_rt/sparc.zig")._Qp_add; @@ -726,7 +747,7 @@ comptime { @export(_Qp_qtod, .{ .name = "_Qp_qtod", .linkage = linkage }); } - if ((arch == .powerpc or arch.isPPC64()) and !is_test) { + if ((arch.isPPC() or arch.isPPC64()) and !is_test) { @export(__addtf3, .{ .name = "__addkf3", .linkage = linkage }); @export(__subtf3, .{ .name = "__subkf3", .linkage = linkage }); @export(__multf3, .{ .name = "__mulkf3", .linkage = linkage }); @@ -751,27 +772,9 @@ comptime { @export(__letf2, .{ .name = "__lekf2", .linkage = linkage }); @export(__getf2, .{ .name = "__gtkf2", .linkage = linkage }); @export(__unordtf2, .{ .name = "__unordkf2", .linkage = linkage }); - } - const fmodl = @import("compiler_rt/floatfmodl.zig").fmodl; - @export(fmodl, .{ .name = "fmodl", .linkage = linkage }); - - @export(floorf, .{ .name = "floorf", .linkage = linkage }); - @export(floor, .{ .name = "floor", .linkage = linkage }); - @export(floorl, .{ .name = "floorl", .linkage = linkage }); - - @export(fma, .{ .name = "fma", .linkage = linkage }); - @export(fmaf, .{ .name = "fmaf", .linkage = linkage }); - @export(fmal, .{ .name = "fmal", .linkage = linkage }); - if (long_double_is_f80) { - @export(fmal, .{ .name = "__fmax", .linkage = linkage }); - } else { - @export(__fmax, .{ .name = "__fmax", .linkage = linkage }); - } - if (long_double_is_f128) { - @export(fmal, .{ .name = "fmaq", .linkage = linkage }); - } else { - @export(fmaq, .{ .name = "fmaq", .linkage = linkage }); + // LLVM PPC backend lowers f128 fma to `fmaf128`. + @export(fmal, .{ .name = "fmaf128", .linkage = linkage }); } }