mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 07:32:44 +00:00
freestanding libc: export fmal
libc requires this to use `long double` which is sometimes the same as f128, sometimes not. Also for an unknown reason, aarch64 is getting an invalid result for the `@mulAdd` behavior test for f128. See #9900.
This commit is contained in:
parent
4ee91bb8a8
commit
5518a0aff2
@ -15,6 +15,10 @@ pub fn fma(comptime T: type, x: T, y: T, z: T) T {
|
|||||||
f32 => fma32(x, y, z),
|
f32 => fma32(x, y, z),
|
||||||
f64 => fma64(x, y, z),
|
f64 => fma64(x, y, z),
|
||||||
f128 => fma128(x, y, z),
|
f128 => fma128(x, y, z),
|
||||||
|
|
||||||
|
// TODO this is not correct for some targets
|
||||||
|
c_longdouble => @floatCast(c_longdouble, fma128(x, y, z)),
|
||||||
|
|
||||||
else => @compileError("fma not implemented for " ++ @typeName(T)),
|
else => @compileError("fma not implemented for " ++ @typeName(T)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -656,6 +656,10 @@ export fn ceil(x: f64) f64 {
|
|||||||
return math.ceil(x);
|
return math.ceil(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export fn fmal(a: c_longdouble, b: c_longdouble, c: c_longdouble) c_longdouble {
|
||||||
|
return math.fma(c_longdouble, a, b, c);
|
||||||
|
}
|
||||||
|
|
||||||
export fn fma(a: f64, b: f64, c: f64) f64 {
|
export fn fma(a: f64, b: f64, c: f64) f64 {
|
||||||
return math.fma(f64, a, b, c);
|
return math.fma(f64, a, b, c);
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,8 @@ fn testMulAdd() !void {
|
|||||||
var c: f64 = 6.25;
|
var c: f64 = 6.25;
|
||||||
try expect(@mulAdd(f64, a, b, c) == 20);
|
try expect(@mulAdd(f64, a, b, c) == 20);
|
||||||
}
|
}
|
||||||
{
|
// TODO https://github.com/ziglang/zig/issues/9900
|
||||||
|
if (@import("builtin").cpu.arch != .aarch64) {
|
||||||
var a: f16 = 5.5;
|
var a: f16 = 5.5;
|
||||||
var b: f128 = 2.5;
|
var b: f128 = 2.5;
|
||||||
var c: f128 = 6.25;
|
var c: f128 = 6.25;
|
||||||
|
Loading…
Reference in New Issue
Block a user