authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-04-27 20:24:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-04-27 20:24:08-07:00
log0b2ed45f5fd69cb5f3afb3118726b17859bda0f5
treedec379ea5c7e80fa069df544f1d85087594c4cc6
parent0ffe82e624f9334473758349219fe1dbcf3edb3b

compiler-rt: inline sin and cos into sincos

This avoids the optimizer turning sincos into a recursive call to itself.

1 files changed, 13 insertions(+), 10 deletions(-)

lib/std/special/compiler_rt/sincos.zig+13-10
...@@ -1,24 +1,27 @@...@@ -1,24 +1,27 @@
1const sin = @import("sin.zig");
2const cos = @import("cos.zig");
3
1pub fn __sincosh(a: f16, r_sin: *f16, r_cos: *f16) callconv(.C) void {4pub fn __sincosh(a: f16, r_sin: *f16, r_cos: *f16) callconv(.C) void {
2 r_sin.* = @sin(a);5 r_sin.* = sin.__sinh(a);
3 r_cos.* = @cos(a);6 r_cos.* = cos.__cosh(a);
4}7}
58
6pub fn sincosf(a: f32, r_sin: *f32, r_cos: *f32) callconv(.C) void {9pub fn sincosf(a: f32, r_sin: *f32, r_cos: *f32) callconv(.C) void {
7 r_sin.* = @sin(a);10 r_sin.* = sin.sinf(a);
8 r_cos.* = @cos(a);11 r_cos.* = cos.cosf(a);
9}12}
1013
11pub fn sincos(a: f64, r_sin: *f64, r_cos: *f64) callconv(.C) void {14pub fn sincos(a: f64, r_sin: *f64, r_cos: *f64) callconv(.C) void {
12 r_sin.* = @sin(a);15 r_sin.* = sin.sin(a);
13 r_cos.* = @cos(a);16 r_cos.* = cos.cos(a);
14}17}
1518
16pub fn __sincosx(a: f80, r_sin: *f80, r_cos: *f80) callconv(.C) void {19pub fn __sincosx(a: f80, r_sin: *f80, r_cos: *f80) callconv(.C) void {
17 r_sin.* = @sin(a);20 r_sin.* = sin.__sinx(a);
18 r_cos.* = @cos(a);21 r_cos.* = cos.__cosx(a);
19}22}
2023
21pub fn sincosq(a: f128, r_sin: *f128, r_cos: *f128) callconv(.C) void {24pub fn sincosq(a: f128, r_sin: *f128, r_cos: *f128) callconv(.C) void {
22 r_sin.* = @sin(a);25 r_sin.* = sin.sinq(a);
23 r_cos.* = @cos(a);26 r_cos.* = cos.cosq(a);
24}27}