1bbb75554SSiva Chandra //===-- sinf/cosf data tables ---------------------------------------------===//
2bbb75554SSiva Chandra //
3bbb75554SSiva Chandra // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4bbb75554SSiva Chandra // See https://llvm.org/LICENSE.txt for license information.
5bbb75554SSiva Chandra // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6bbb75554SSiva Chandra //
7bbb75554SSiva Chandra //===----------------------------------------------------------------------===//
8bbb75554SSiva Chandra 
9bbb75554SSiva Chandra #include "math_utils.h"
10bbb75554SSiva Chandra #include "sincosf_utils.h"
11bbb75554SSiva Chandra 
12bbb75554SSiva Chandra #include <stdint.h>
13bbb75554SSiva Chandra 
14bbb75554SSiva Chandra namespace __llvm_libc {
15bbb75554SSiva Chandra 
16bbb75554SSiva Chandra // The constants and polynomials for sine and cosine.  The 2nd entry
17bbb75554SSiva Chandra // computes -cos (x) rather than cos (x) to get negation for free.
18*75d2fcb0SSiva Chandra Reddy constexpr sincos_t SINCOSF_TABLE[2] = {
19bbb75554SSiva Chandra     {{1.0, -1.0, -1.0, 1.0},
20b0cd3abfSTue Ly      0x1.45f306dc9c883p+23,
21b0cd3abfSTue Ly      0x1.921fb54442d18p+0,
22b0cd3abfSTue Ly      0x1p+0,
23b0cd3abfSTue Ly      -0x1.ffffffd0c621cp-2,
24b0cd3abfSTue Ly      0x1.55553e1068f19p-5,
25b0cd3abfSTue Ly      -0x1.6c087e89a359dp-10,
26b0cd3abfSTue Ly      0x1.99343027bf8c3p-16,
27b0cd3abfSTue Ly      -0x1.555545995a603p-3,
28b0cd3abfSTue Ly      0x1.1107605230bc4p-7,
29b0cd3abfSTue Ly      -0x1.994eb3774cf24p-13},
30bbb75554SSiva Chandra     {{1.0, -1.0, -1.0, 1.0},
31b0cd3abfSTue Ly      0x1.45f306dc9c883p+23,
32b0cd3abfSTue Ly      0x1.921fb54442d18p+0,
33b0cd3abfSTue Ly      -0x1p+0,
34b0cd3abfSTue Ly      0x1.ffffffd0c621cp-2,
35b0cd3abfSTue Ly      -0x1.55553e1068f19p-5,
36b0cd3abfSTue Ly      0x1.6c087e89a359dp-10,
37b0cd3abfSTue Ly      -0x1.99343027bf8c3p-16,
38b0cd3abfSTue Ly      -0x1.555545995a603p-3,
39b0cd3abfSTue Ly      0x1.1107605230bc4p-7,
40b0cd3abfSTue Ly      -0x1.994eb3774cf24p-13},
41bbb75554SSiva Chandra };
42bbb75554SSiva Chandra 
43bbb75554SSiva Chandra // Table with 4/PI to 192 bit precision.  To avoid unaligned accesses
44bbb75554SSiva Chandra // only 8 new bits are added per entry, making the table 4 times larger.
45*75d2fcb0SSiva Chandra Reddy constexpr uint32_t INV_PIO4[24] = {
46bbb75554SSiva Chandra     0xa2,       0xa2f9,     0xa2f983,   0xa2f9836e, 0xf9836e4e, 0x836e4e44,
47bbb75554SSiva Chandra     0x6e4e4415, 0x4e441529, 0x441529fc, 0x1529fc27, 0x29fc2757, 0xfc2757d1,
48bbb75554SSiva Chandra     0x2757d1f5, 0x57d1f534, 0xd1f534dd, 0xf534ddc0, 0x34ddc0db, 0xddc0db62,
49bbb75554SSiva Chandra     0xc0db6295, 0xdb629599, 0x6295993c, 0x95993c43, 0x993c4390, 0x3c439041};
50bbb75554SSiva Chandra 
51bbb75554SSiva Chandra } // namespace __llvm_libc
52