diff options
| author | LemonBoy <thatlemon@gmail.com> | 2021-04-15 18:12:11 +0200 |
|---|---|---|
| committer | LemonBoy <thatlemon@gmail.com> | 2021-04-15 18:12:11 +0200 |
| commit | f9481402f0c6f2eb4618bb0385aff18c12912c26 (patch) | |
| tree | dec626fa96c0c21c8965bf19ef9fcf497a86adfd /src/stage1/ir.cpp | |
| parent | c59241bda00376b5a6ee20ca52358329b7482f7f (diff) | |
| download | zig-f9481402f0c6f2eb4618bb0385aff18c12912c26.tar.gz zig-f9481402f0c6f2eb4618bb0385aff18c12912c26.zip | |
stage1: Fix negation for zero floating point values
Toggling the sign by computing 0-x doesn't really work for zero values.
Diffstat (limited to 'src/stage1/ir.cpp')
| -rw-r--r-- | src/stage1/ir.cpp | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/stage1/ir.cpp b/src/stage1/ir.cpp index 71a233c964..942b6028d9 100644 --- a/src/stage1/ir.cpp +++ b/src/stage1/ir.cpp @@ -11363,11 +11363,8 @@ static void float_negate(ZigValue *out_val, ZigValue *op) { } else if (op->type->id == ZigTypeIdFloat) { switch (op->type->data.floating.bit_count) { case 16: - { - const float16_t zero = zig_double_to_f16(0); - out_val->data.x_f16 = f16_sub(zero, op->data.x_f16); - return; - } + out_val->data.x_f16 = f16_neg(op->data.x_f16); + return; case 32: out_val->data.x_f32 = -op->data.x_f32; return; @@ -11375,9 +11372,7 @@ static void float_negate(ZigValue *out_val, ZigValue *op) { out_val->data.x_f64 = -op->data.x_f64; return; case 128: - float128_t zero_f128; - ui32_to_f128M(0, &zero_f128); - f128M_sub(&zero_f128, &op->data.x_f128, &out_val->data.x_f128); + f128M_neg(&op->data.x_f128, &out_val->data.x_f128); return; default: zig_unreachable(); |
