diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2025-04-11 04:23:36 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2025-04-11 07:06:01 -0400 |
| commit | b31a91bbef2bafb19fd2b76cd8a1c8a4ed15eb61 (patch) | |
| tree | d35fef3fbf408fed83b3572ce16ff488ec09cdd2 /lib/compiler_rt/floatuneitf.zig | |
| parent | ed9aa8f259d452cb344064ee412fc5af18877d55 (diff) | |
| download | zig-b31a91bbef2bafb19fd2b76cd8a1c8a4ed15eb61.tar.gz zig-b31a91bbef2bafb19fd2b76cd8a1c8a4ed15eb61.zip | |
compiler-rt: compute correct integer sizes from bits at runtime
Also, accepting `align(1)` pointers ensures that the alignment is safety
checked rather than assumed.
Diffstat (limited to 'lib/compiler_rt/floatuneitf.zig')
| -rw-r--r-- | lib/compiler_rt/floatuneitf.zig | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/compiler_rt/floatuneitf.zig b/lib/compiler_rt/floatuneitf.zig index 61c2c93b28..727d301f7b 100644 --- a/lib/compiler_rt/floatuneitf.zig +++ b/lib/compiler_rt/floatuneitf.zig @@ -1,6 +1,7 @@ -const divCeil = @import("std").math.divCeil; -const common = @import("./common.zig"); -const floatFromBigInt = @import("./float_from_int.zig").floatFromBigInt; +const std = @import("std"); +const builtin = @import("builtin"); +const common = @import("common.zig"); +const floatFromBigInt = @import("float_from_int.zig").floatFromBigInt; pub const panic = common.panic; @@ -8,6 +9,7 @@ comptime { @export(&__floatuneitf, .{ .name = "__floatuneitf", .linkage = common.linkage, .visibility = common.visibility }); } -pub fn __floatuneitf(a: [*]const u32, bits: usize) callconv(.c) f128 { - return floatFromBigInt(f128, .unsigned, a[0 .. divCeil(usize, bits, 32) catch unreachable]); +pub fn __floatuneitf(a: [*]const u8, bits: usize) callconv(.c) f128 { + const byte_size = std.zig.target.intByteSize(builtin.target, @intCast(bits)); + return floatFromBigInt(f128, .unsigned, @ptrCast(@alignCast(a[0..byte_size]))); } |
