zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4208fa9ad9102471060c1909effaa6a9315155af (tree)
parent 383b8a032eb24f355eaaa560d471c0399df78121
Author: LemonBoy <thatlemon@gmail.com>
Date:   Thu,  9 May 2019 00:25:50 +0200

compiler-rt: add __floatsitf

Diffstat:
Mstd/special/compiler_rt.zig | 1+
Mstd/special/compiler_rt/floatsiXf.zig | 19+++++++++++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/std/special/compiler_rt.zig b/std/special/compiler_rt.zig @@ -67,6 +67,7 @@ comptime { @export("__floatsidf", @import("compiler_rt/floatsiXf.zig").__floatsidf, linkage); @export("__floatsisf", @import("compiler_rt/floatsiXf.zig").__floatsisf, linkage); @export("__floatdidf", @import("compiler_rt/floatdidf.zig").__floatdidf, linkage); + @export("__floatsitf", @import("compiler_rt/floatsiXf.zig").__floatsitf, linkage); @export("__floatunsidf", @import("compiler_rt/floatunsidf.zig").__floatunsidf, linkage); @export("__floatundidf", @import("compiler_rt/floatundidf.zig").__floatundidf, linkage); diff --git a/std/special/compiler_rt/floatsiXf.zig b/std/special/compiler_rt/floatsiXf.zig @@ -63,6 +63,16 @@ pub extern fn __floatsidf(arg: i32) f64 { return @inlineCall(floatsiXf, f64, arg); } +pub extern fn __floatsitf(arg: i32) f128 { + @setRuntimeSafety(builtin.is_test); + return @inlineCall(floatsiXf, f128, arg); +} + +fn test_one_floatsitf(a: i32, expected: u128) void { + const r = __floatsitf(a); + std.testing.expect(@bitCast(u128, r) == expected); +} + fn test_one_floatsidf(a: i32, expected: u64) void { const r = __floatsidf(a); std.testing.expect(@bitCast(u64, r) == expected); @@ -88,3 +98,12 @@ test "floatsisf" { test_one_floatsisf(0x7FFFFFFF, 0x4f000000); test_one_floatsisf(@bitCast(i32, @intCast(u32, 0x80000000)), 0xcf000000); } + +test "floatsitf" { + test_one_floatsitf(0, 0); + test_one_floatsitf(0x7FFFFFFF, 0x401dfffffffc00000000000000000000); + test_one_floatsitf(0x12345678, 0x401b2345678000000000000000000000); + test_one_floatsitf(-0x12345678, 0xc01b2345678000000000000000000000); + test_one_floatsitf(@bitCast(i32, @intCast(u32, 0xffffffff)), 0xbfff0000000000000000000000000000); + test_one_floatsitf(@bitCast(i32, @intCast(u32, 0x80000000)), 0xc01e0000000000000000000000000000); +}