mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
The purpose of this branch is to switch to using an object file for each independent function, in order to make linking simpler - instead of relying on `-ffunction-sections` and `--gc-sections`, which involves the linker doing the work of linking everything and then undoing work via garbage collection, this will allow the linker to only include the compilation units that are depended on in the first place. This commit makes progress towards that goal.
37 lines
1.3 KiB
Zig
37 lines
1.3 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_aeabi) {
|
|
@export(__aeabi_dcmpge, .{ .name = "__aeabi_dcmpge", .linkage = common.linkage });
|
|
@export(__aeabi_dcmpgt, .{ .name = "__aeabi_dcmpgt", .linkage = common.linkage });
|
|
} else {
|
|
@export(__gedf2, .{ .name = "__gedf2", .linkage = common.linkage });
|
|
@export(__gtdf2, .{ .name = "__gtdf2", .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 __gedf2(a: f64, b: f64) callconv(.C) i32 {
|
|
return @enumToInt(comparef.cmpf2(f64, 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 __gtdf2(a: f64, b: f64) callconv(.C) i32 {
|
|
return __gedf2(a, b);
|
|
}
|
|
|
|
fn __aeabi_dcmpge(a: f64, b: f64) callconv(.AAPCS) i32 {
|
|
return comparef.cmpf2(f64, comparef.GE, a, b) != .Less;
|
|
}
|
|
|
|
fn __aeabi_dcmpgt(a: f64, b: f64) callconv(.AAPCS) i32 {
|
|
return @boolToInt(comparef.cmpf2(f64, comparef.GE, a, b) == .Greater);
|
|
}
|