Commit 5518a0aff2
Changed files (3)
lib
std
math
special
test
behavior
lib/std/math/fma.zig
@@ -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)),
};
}
lib/std/special/c_stage1.zig
@@ -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);
}
test/behavior/muladd.zig
@@ -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;