mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 23:52:31 +00:00
c50f33b111
The Zig LLVM backend emits calls to softfloat methods with the "standard compiler-rt" names. Rather than add complexity to the backend and have to synchronize the naming scheme across all targets, the simplest fix is just to export these symbols under both the "standard" and the platform-specific naming convention.
31 lines
1.2 KiB
Zig
31 lines
1.2 KiB
Zig
///! The quoted behavior definitions are from
|
|
///! https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gccint/Soft-float-library-routines.html#Soft-float-library-routines
|
|
const common = @import("./common.zig");
|
|
const comparef = @import("./comparef.zig");
|
|
|
|
pub const panic = common.panic;
|
|
|
|
comptime {
|
|
if (common.want_ppc_abi) {
|
|
@export(__getf2, .{ .name = "__gekf2", .linkage = common.linkage });
|
|
@export(__gttf2, .{ .name = "__gtkf2", .linkage = common.linkage });
|
|
} else if (common.want_sparc_abi) {
|
|
// These exports are handled in cmptf2.zig because gt and ge on sparc
|
|
// are based on calling _Qp_cmp.
|
|
}
|
|
@export(__getf2, .{ .name = "__getf2", .linkage = common.linkage });
|
|
@export(__gttf2, .{ .name = "__gttf2", .linkage = common.linkage });
|
|
}
|
|
|
|
/// "These functions return a value greater than or equal to zero if neither
|
|
/// argument is NaN, and a is greater than or equal to b."
|
|
fn __getf2(a: f128, b: f128) callconv(.C) i32 {
|
|
return @enumToInt(comparef.cmpf2(f128, comparef.GE, a, b));
|
|
}
|
|
|
|
/// "These functions return a value greater than zero if neither argument is NaN,
|
|
/// and a is strictly greater than b."
|
|
fn __gttf2(a: f128, b: f128) callconv(.C) i32 {
|
|
return __getf2(a, b);
|
|
}
|