| ... | @@ -1,10 +1,27 @@ | ... | @@ -1,10 +1,27 @@ |
| | 1 | const std = @import("std"); |
| | 2 | const math = std.math; |
| 1 | const builtin = @import("builtin"); | 3 | const builtin = @import("builtin"); |
| 2 | const __extendhfsf2 = @import("extendhfsf2.zig").__extendhfsf2; | 4 | const __extendhfsf2 = @import("extendhfsf2.zig").__extendhfsf2; |
| 3 | const __extendhftf2 = @import("extendhftf2.zig").__extendhftf2; | 5 | const __extendhftf2 = @import("extendhftf2.zig").__extendhftf2; |
| 4 | const __extendsftf2 = @import("extendsftf2.zig").__extendsftf2; | 6 | const __extendsftf2 = @import("extendsftf2.zig").__extendsftf2; |
| 5 | const __extenddftf2 = @import("extenddftf2.zig").__extenddftf2; | 7 | const __extenddftf2 = @import("extenddftf2.zig").__extenddftf2; |
| | 8 | const __extenddfxf2 = @import("extenddfxf2.zig").__extenddfxf2; |
| 6 | const F16T = @import("./common.zig").F16T; | 9 | const F16T = @import("./common.zig").F16T; |
| 7 | | 10 | |
| | 11 | fn test__extenddfxf2(a: f64, expected: u80) !void { |
| | 12 | const x = __extenddfxf2(a); |
| | 13 | |
| | 14 | const rep = @bitCast(u80, x); |
| | 15 | if (rep == expected) |
| | 16 | return; |
| | 17 | |
| | 18 | // test other possible NaN representation(signal NaN) |
| | 19 | if (math.isNan(@bitCast(f80, expected)) and math.isNan(x)) |
| | 20 | return; |
| | 21 | |
| | 22 | @panic("__extenddfxf2 test failure"); |
| | 23 | } |
| | 24 | |
| 8 | fn test__extenddftf2(a: f64, expected_hi: u64, expected_lo: u64) !void { | 25 | fn test__extenddftf2(a: f64, expected_hi: u64, expected_lo: u64) !void { |
| 9 | const x = __extenddftf2(a); | 26 | const x = __extenddftf2(a); |
| 10 | | 27 | |
| ... | @@ -65,6 +82,33 @@ fn test__extendsftf2(a: f32, expected_hi: u64, expected_lo: u64) !void { | ... | @@ -65,6 +82,33 @@ fn test__extendsftf2(a: f32, expected_hi: u64, expected_lo: u64) !void { |
| 65 | return error.TestFailure; | 82 | return error.TestFailure; |
| 66 | } | 83 | } |
| 67 | | 84 | |
| | 85 | test "extenddfxf2" { |
| | 86 | // qNaN |
| | 87 | try test__extenddfxf2(makeQNaN64(), 0x7fffc000000000000000); |
| | 88 | |
| | 89 | // NaN |
| | 90 | try test__extenddfxf2(makeNaN64(0x7100000000000), 0x7fffe080000000000000); |
| | 91 | // This is bad? |
| | 92 | |
| | 93 | // inf |
| | 94 | try test__extenddfxf2(makeInf64(), 0x7fff8000000000000000); |
| | 95 | |
| | 96 | // zero |
| | 97 | try test__extenddfxf2(0.0, 0x0); |
| | 98 | |
| | 99 | try test__extenddfxf2(0x0.a3456789abcdefp+6, 0x4004a3456789abcdf000); |
| | 100 | |
| | 101 | try test__extenddfxf2(0x0.edcba987654321fp-8, 0x3ff6edcba98765432000); |
| | 102 | |
| | 103 | try test__extenddfxf2(0x0.a3456789abcdefp+46, 0x402ca3456789abcdf000); |
| | 104 | |
| | 105 | try test__extenddfxf2(0x0.edcba987654321fp-44, 0x3fd2edcba98765432000); |
| | 106 | |
| | 107 | // subnormal |
| | 108 | try test__extenddfxf2(0x1.8000000000001p-1022, 0x3c01c000000000000800); |
| | 109 | try test__extenddfxf2(0x1.8000000000002p-1023, 0x3c00c000000000001000); |
| | 110 | } |
| | 111 | |
| 68 | test "extenddftf2" { | 112 | test "extenddftf2" { |
| 69 | // qNaN | 113 | // qNaN |
| 70 | try test__extenddftf2(makeQNaN64(), 0x7fff800000000000, 0x0); | 114 | try test__extenddftf2(makeQNaN64(), 0x7fff800000000000, 0x0); |
| ... | @@ -85,6 +129,10 @@ test "extenddftf2" { | ... | @@ -85,6 +129,10 @@ test "extenddftf2" { |
| 85 | try test__extenddftf2(0x1.23456789abcdefp+45, 0x402c23456789abcd, 0xf000000000000000); | 129 | try test__extenddftf2(0x1.23456789abcdefp+45, 0x402c23456789abcd, 0xf000000000000000); |
| 86 | | 130 | |
| 87 | try test__extenddftf2(0x1.edcba987654321fp-45, 0x3fd2edcba9876543, 0x2000000000000000); | 131 | try test__extenddftf2(0x1.edcba987654321fp-45, 0x3fd2edcba9876543, 0x2000000000000000); |
| | 132 | |
| | 133 | // subnormal |
| | 134 | try test__extenddftf2(0x1.8p-1022, 0x3c01800000000000, 0x0); |
| | 135 | try test__extenddftf2(0x1.8p-1023, 0x3c00800000000000, 0x0); |
| 88 | } | 136 | } |
| 89 | | 137 | |
| 90 | test "extendhfsf2" { | 138 | test "extendhfsf2" { |