authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-05-09 00:25:50+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-05-09 00:25:50+02:00
log4208fa9ad9102471060c1909effaa6a9315155af
tree7cece9df984d291afac9c32dedde881fca10b385
parent383b8a032eb24f355eaaa560d471c0399df78121

compiler-rt: add __floatsitf


2 files changed, 20 insertions(+), 0 deletions(-)

std/special/compiler_rt.zig+1
...@@ -67,6 +67,7 @@ comptime {...@@ -67,6 +67,7 @@ comptime {
67 @export("__floatsidf", @import("compiler_rt/floatsiXf.zig").__floatsidf, linkage);67 @export("__floatsidf", @import("compiler_rt/floatsiXf.zig").__floatsidf, linkage);
68 @export("__floatsisf", @import("compiler_rt/floatsiXf.zig").__floatsisf, linkage);68 @export("__floatsisf", @import("compiler_rt/floatsiXf.zig").__floatsisf, linkage);
69 @export("__floatdidf", @import("compiler_rt/floatdidf.zig").__floatdidf, linkage);69 @export("__floatdidf", @import("compiler_rt/floatdidf.zig").__floatdidf, linkage);
70 @export("__floatsitf", @import("compiler_rt/floatsiXf.zig").__floatsitf, linkage);
70 @export("__floatunsidf", @import("compiler_rt/floatunsidf.zig").__floatunsidf, linkage);71 @export("__floatunsidf", @import("compiler_rt/floatunsidf.zig").__floatunsidf, linkage);
71 @export("__floatundidf", @import("compiler_rt/floatundidf.zig").__floatundidf, linkage);72 @export("__floatundidf", @import("compiler_rt/floatundidf.zig").__floatundidf, linkage);
7273
std/special/compiler_rt/floatsiXf.zig+19
...@@ -63,6 +63,16 @@ pub extern fn __floatsidf(arg: i32) f64 {...@@ -63,6 +63,16 @@ pub extern fn __floatsidf(arg: i32) f64 {
63 return @inlineCall(floatsiXf, f64, arg);63 return @inlineCall(floatsiXf, f64, arg);
64}64}
6565
66pub extern fn __floatsitf(arg: i32) f128 {
67 @setRuntimeSafety(builtin.is_test);
68 return @inlineCall(floatsiXf, f128, arg);
69}
70
71fn test_one_floatsitf(a: i32, expected: u128) void {
72 const r = __floatsitf(a);
73 std.testing.expect(@bitCast(u128, r) == expected);
74}
75
66fn test_one_floatsidf(a: i32, expected: u64) void {76fn test_one_floatsidf(a: i32, expected: u64) void {
67 const r = __floatsidf(a);77 const r = __floatsidf(a);
68 std.testing.expect(@bitCast(u64, r) == expected);78 std.testing.expect(@bitCast(u64, r) == expected);
...@@ -88,3 +98,12 @@ test "floatsisf" {...@@ -88,3 +98,12 @@ test "floatsisf" {
88 test_one_floatsisf(0x7FFFFFFF, 0x4f000000);98 test_one_floatsisf(0x7FFFFFFF, 0x4f000000);
89 test_one_floatsisf(@bitCast(i32, @intCast(u32, 0x80000000)), 0xcf000000);99 test_one_floatsisf(@bitCast(i32, @intCast(u32, 0x80000000)), 0xcf000000);
90}100}
101
102test "floatsitf" {
103 test_one_floatsitf(0, 0);
104 test_one_floatsitf(0x7FFFFFFF, 0x401dfffffffc00000000000000000000);
105 test_one_floatsitf(0x12345678, 0x401b2345678000000000000000000000);
106 test_one_floatsitf(-0x12345678, 0xc01b2345678000000000000000000000);
107 test_one_floatsitf(@bitCast(i32, @intCast(u32, 0xffffffff)), 0xbfff0000000000000000000000000000);
108 test_one_floatsitf(@bitCast(i32, @intCast(u32, 0x80000000)), 0xc01e0000000000000000000000000000);
109}