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 @@
1const sin = @import("sin.zig");
2const cos = @import("cos.zig");
3
14pub fn __sincosh(a: f16, r_sin: *f16, r_cos: *f16) callconv(.C) void {
2 r_sin.* = @sin(a);
3 r_cos.* = @cos(a);
5 r_sin.* = sin.__sinh(a);
6 r_cos.* = cos.__cosh(a);
47}
58
69pub fn sincosf(a: f32, r_sin: *f32, r_cos: *f32) callconv(.C) void {
7 r_sin.* = @sin(a);
8 r_cos.* = @cos(a);
10 r_sin.* = sin.sinf(a);
11 r_cos.* = cos.cosf(a);
912}
1013
1114pub fn sincos(a: f64, r_sin: *f64, r_cos: *f64) callconv(.C) void {
12 r_sin.* = @sin(a);
13 r_cos.* = @cos(a);
15 r_sin.* = sin.sin(a);
16 r_cos.* = cos.cos(a);
1417}
1518
1619pub fn __sincosx(a: f80, r_sin: *f80, r_cos: *f80) callconv(.C) void {
17 r_sin.* = @sin(a);
18 r_cos.* = @cos(a);
20 r_sin.* = sin.__sinx(a);
21 r_cos.* = cos.__cosx(a);
1922}
2023
2124pub fn sincosq(a: f128, r_sin: *f128, r_cos: *f128) callconv(.C) void {
22 r_sin.* = @sin(a);
23 r_cos.* = @cos(a);
25 r_sin.* = sin.sinq(a);
26 r_cos.* = cos.cosq(a);
2427}