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),
|
||||
f64 => fma64(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)),
|
||||
};
|
||||
}
|
||||
|
@ -656,6 +656,10 @@ export fn ceil(x: f64) f64 {
|
||||
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 {
|
||||
return math.fma(f64, a, b, c);
|
||||
}
|
||||
|
@ -24,7 +24,8 @@ fn testMulAdd() !void {
|
||||
var c: f64 = 6.25;
|
||||
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 b: f128 = 2.5;
|
||||
var c: f128 = 6.25;
|
||||
|
Loading…
Reference in New Issue
Block a user