aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-06-30 00:02:00 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-06-30 00:02:00 -0700
commit6bc6e47b1582a4538078c8f4e9b3dae386854d07 (patch)
tree3919cd49e8cfe2772c4028f0b056f47040651494 /test/behavior
parent54454fd0102af8b25dbc85751d37fd265380d920 (diff)
downloadzig-6bc6e47b1582a4538078c8f4e9b3dae386854d07.tar.gz
zig-6bc6e47b1582a4538078c8f4e9b3dae386854d07.zip
stage2: lower float negation explicitly
Rather than lowering float negation as `0.0 - x`. * Add AIR instruction for float negation. * Add compiler-rt functions for f128, f80 negation closes #11853
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/floatop.zig103
1 files changed, 103 insertions, 0 deletions
diff --git a/test/behavior/floatop.zig b/test/behavior/floatop.zig
index ac35834928..c057f7a842 100644
--- a/test/behavior/floatop.zig
+++ b/test/behavior/floatop.zig
@@ -574,6 +574,7 @@ test "negation f32" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {
@@ -593,6 +594,8 @@ test "negation f64" {
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {
@@ -707,3 +710,103 @@ test "comptime_float zero divided by zero produces zero" {
try expect((0.0 / 0.0) == 0.0);
}
+
+test "nan negation f16" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
+ const nan_comptime = comptime math.nan(f16);
+ const neg_nan_comptime = -nan_comptime;
+
+ var nan_runtime = math.nan(f16);
+ const neg_nan_runtime = -nan_runtime;
+
+ try expect(!math.signbit(nan_runtime));
+ try expect(math.signbit(neg_nan_runtime));
+
+ try expect(!math.signbit(nan_comptime));
+ try expect(math.signbit(neg_nan_comptime));
+}
+
+test "nan negation f32" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
+ const nan_comptime = comptime math.nan(f32);
+ const neg_nan_comptime = -nan_comptime;
+
+ var nan_runtime = math.nan(f32);
+ const neg_nan_runtime = -nan_runtime;
+
+ try expect(!math.signbit(nan_runtime));
+ try expect(math.signbit(neg_nan_runtime));
+
+ try expect(!math.signbit(nan_comptime));
+ try expect(math.signbit(neg_nan_comptime));
+}
+
+test "nan negation f64" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
+ const nan_comptime = comptime math.nan(f64);
+ const neg_nan_comptime = -nan_comptime;
+
+ var nan_runtime = math.nan(f64);
+ const neg_nan_runtime = -nan_runtime;
+
+ try expect(!math.signbit(nan_runtime));
+ try expect(math.signbit(neg_nan_runtime));
+
+ try expect(!math.signbit(nan_comptime));
+ try expect(math.signbit(neg_nan_comptime));
+}
+
+test "nan negation f128" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
+ const nan_comptime = comptime math.nan(f128);
+ const neg_nan_comptime = -nan_comptime;
+
+ var nan_runtime = math.nan(f128);
+ const neg_nan_runtime = -nan_runtime;
+
+ try expect(!math.signbit(nan_runtime));
+ try expect(math.signbit(neg_nan_runtime));
+
+ try expect(!math.signbit(nan_comptime));
+ try expect(math.signbit(neg_nan_comptime));
+}
+
+test "nan negation f80" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
+ const nan_comptime = comptime math.nan(f80);
+ const neg_nan_comptime = -nan_comptime;
+
+ var nan_runtime = math.nan(f80);
+ const neg_nan_runtime = -nan_runtime;
+
+ try expect(!math.signbit(nan_runtime));
+ try expect(math.signbit(neg_nan_runtime));
+
+ try expect(!math.signbit(nan_comptime));
+ try expect(math.signbit(neg_nan_comptime));
+}