2022-07-10 17:53:24 +01:00
|
|
|
const builtin = @import("builtin");
|
|
|
|
const arch = builtin.cpu.arch;
|
2022-06-16 07:09:56 +01:00
|
|
|
const common = @import("./common.zig");
|
|
|
|
const floatToInt = @import("./float_to_int.zig").floatToInt;
|
|
|
|
|
|
|
|
pub const panic = common.panic;
|
|
|
|
|
|
|
|
comptime {
|
2022-07-10 17:53:24 +01:00
|
|
|
const fixunsdfti_fn = if (builtin.os.tag == .windows and arch == .x86_64) b: {
|
|
|
|
// The "ti" functions must use Vector(2, u64) return types to adhere to the ABI
|
|
|
|
// that LLVM expects compiler-rt to have.
|
|
|
|
break :b __fixunsdfti_windows_x86_64;
|
|
|
|
} else __fixunsdfti;
|
|
|
|
|
|
|
|
@export(fixunsdfti_fn, .{ .name = "__fixunsdfti", .linkage = common.linkage });
|
2022-06-16 07:09:56 +01:00
|
|
|
}
|
|
|
|
|
2022-06-16 23:14:12 +01:00
|
|
|
pub fn __fixunsdfti(a: f64) callconv(.C) u128 {
|
2022-06-16 07:09:56 +01:00
|
|
|
return floatToInt(u128, a);
|
|
|
|
}
|
2022-07-10 17:53:24 +01:00
|
|
|
|
|
|
|
const v128 = @import("std").meta.Vector(2, u64);
|
|
|
|
|
|
|
|
fn __fixunsdfti_windows_x86_64(a: f64) callconv(.C) v128 {
|
|
|
|
return @bitCast(v128, floatToInt(u128, a));
|
|
|
|
}
|