xref: /freebsd/contrib/arm-optimized-routines/math/sincosf_data.c (revision 31914882fca502069810b9e9ddea4bcd8136a4f4)
1*31914882SAlex Richardson /*
2*31914882SAlex Richardson  * Data definition for sinf, cosf and sincosf.
3*31914882SAlex Richardson  *
4*31914882SAlex Richardson  * Copyright (c) 2018-2019, Arm Limited.
5*31914882SAlex Richardson  * SPDX-License-Identifier: MIT
6*31914882SAlex Richardson  */
7*31914882SAlex Richardson 
8*31914882SAlex Richardson #include <stdint.h>
9*31914882SAlex Richardson #include <math.h>
10*31914882SAlex Richardson #include "math_config.h"
11*31914882SAlex Richardson #include "sincosf.h"
12*31914882SAlex Richardson 
13*31914882SAlex Richardson /* The constants and polynomials for sine and cosine.  The 2nd entry
14*31914882SAlex Richardson    computes -cos (x) rather than cos (x) to get negation for free.  */
15*31914882SAlex Richardson const sincos_t __sincosf_table[2] =
16*31914882SAlex Richardson {
17*31914882SAlex Richardson   {
18*31914882SAlex Richardson     { 1.0, -1.0, -1.0, 1.0 },
19*31914882SAlex Richardson #if TOINT_INTRINSICS
20*31914882SAlex Richardson     0x1.45F306DC9C883p-1,
21*31914882SAlex Richardson #else
22*31914882SAlex Richardson     0x1.45F306DC9C883p+23,
23*31914882SAlex Richardson #endif
24*31914882SAlex Richardson     0x1.921FB54442D18p0,
25*31914882SAlex Richardson     0x1p0,
26*31914882SAlex Richardson     -0x1.ffffffd0c621cp-2,
27*31914882SAlex Richardson     0x1.55553e1068f19p-5,
28*31914882SAlex Richardson     -0x1.6c087e89a359dp-10,
29*31914882SAlex Richardson     0x1.99343027bf8c3p-16,
30*31914882SAlex Richardson     -0x1.555545995a603p-3,
31*31914882SAlex Richardson     0x1.1107605230bc4p-7,
32*31914882SAlex Richardson     -0x1.994eb3774cf24p-13
33*31914882SAlex Richardson   },
34*31914882SAlex Richardson   {
35*31914882SAlex Richardson     { 1.0, -1.0, -1.0, 1.0 },
36*31914882SAlex Richardson #if TOINT_INTRINSICS
37*31914882SAlex Richardson     0x1.45F306DC9C883p-1,
38*31914882SAlex Richardson #else
39*31914882SAlex Richardson     0x1.45F306DC9C883p+23,
40*31914882SAlex Richardson #endif
41*31914882SAlex Richardson     0x1.921FB54442D18p0,
42*31914882SAlex Richardson     -0x1p0,
43*31914882SAlex Richardson     0x1.ffffffd0c621cp-2,
44*31914882SAlex Richardson     -0x1.55553e1068f19p-5,
45*31914882SAlex Richardson     0x1.6c087e89a359dp-10,
46*31914882SAlex Richardson     -0x1.99343027bf8c3p-16,
47*31914882SAlex Richardson     -0x1.555545995a603p-3,
48*31914882SAlex Richardson     0x1.1107605230bc4p-7,
49*31914882SAlex Richardson     -0x1.994eb3774cf24p-13
50*31914882SAlex Richardson   }
51*31914882SAlex Richardson };
52*31914882SAlex Richardson 
53*31914882SAlex Richardson /* Table with 4/PI to 192 bit precision.  To avoid unaligned accesses
54*31914882SAlex Richardson    only 8 new bits are added per entry, making the table 4 times larger.  */
55*31914882SAlex Richardson const uint32_t __inv_pio4[24] =
56*31914882SAlex Richardson {
57*31914882SAlex Richardson   0xa2,       0xa2f9,	  0xa2f983,   0xa2f9836e,
58*31914882SAlex Richardson   0xf9836e4e, 0x836e4e44, 0x6e4e4415, 0x4e441529,
59*31914882SAlex Richardson   0x441529fc, 0x1529fc27, 0x29fc2757, 0xfc2757d1,
60*31914882SAlex Richardson   0x2757d1f5, 0x57d1f534, 0xd1f534dd, 0xf534ddc0,
61*31914882SAlex Richardson   0x34ddc0db, 0xddc0db62, 0xc0db6295, 0xdb629599,
62*31914882SAlex Richardson   0x6295993c, 0x95993c43, 0x993c4390, 0x3c439041
63*31914882SAlex Richardson };
64