From 0b2ed45f5fd69cb5f3afb3118726b17859bda0f5 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 27 Apr 2022 20:24:08 -0700 Subject: [PATCH] compiler-rt: inline sin and cos into sincos This avoids the optimizer turning sincos into a recursive call to itself. --- lib/std/special/compiler_rt/sincos.zig | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/std/special/compiler_rt/sincos.zig b/lib/std/special/compiler_rt/sincos.zig index fae326f182..0518e021ea 100644 --- a/lib/std/special/compiler_rt/sincos.zig +++ b/lib/std/special/compiler_rt/sincos.zig @@ -1,24 +1,27 @@ +const sin = @import("sin.zig"); +const cos = @import("cos.zig"); + pub fn __sincosh(a: f16, r_sin: *f16, r_cos: *f16) callconv(.C) void { - r_sin.* = @sin(a); - r_cos.* = @cos(a); + r_sin.* = sin.__sinh(a); + r_cos.* = cos.__cosh(a); } pub fn sincosf(a: f32, r_sin: *f32, r_cos: *f32) callconv(.C) void { - r_sin.* = @sin(a); - r_cos.* = @cos(a); + r_sin.* = sin.sinf(a); + r_cos.* = cos.cosf(a); } pub fn sincos(a: f64, r_sin: *f64, r_cos: *f64) callconv(.C) void { - r_sin.* = @sin(a); - r_cos.* = @cos(a); + r_sin.* = sin.sin(a); + r_cos.* = cos.cos(a); } pub fn __sincosx(a: f80, r_sin: *f80, r_cos: *f80) callconv(.C) void { - r_sin.* = @sin(a); - r_cos.* = @cos(a); + r_sin.* = sin.__sinx(a); + r_cos.* = cos.__cosx(a); } pub fn sincosq(a: f128, r_sin: *f128, r_cos: *f128) callconv(.C) void { - r_sin.* = @sin(a); - r_cos.* = @cos(a); + r_sin.* = sin.sinq(a); + r_cos.* = cos.cosq(a); }