xref: /aosp_15_r20/external/llvm-libc/src/math/generic/range_reduction_double_nofma.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1 //===-- Range reduction for double precision sin/cos/tan --------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_SRC_MATH_GENERIC_RANGE_REDUCTION_DOUBLE_NOFMA_H
10 #define LLVM_LIBC_SRC_MATH_GENERIC_RANGE_REDUCTION_DOUBLE_NOFMA_H
11 
12 #include "src/__support/FPUtil/FPBits.h"
13 #include "src/__support/FPUtil/double_double.h"
14 #include "src/__support/FPUtil/multiply_add.h"
15 #include "src/__support/FPUtil/nearest_integer.h"
16 #include "src/__support/common.h"
17 #include "src/__support/macros/config.h"
18 #include "src/__support/macros/optimization.h"
19 #include "src/math/generic/range_reduction_double_common.h"
20 
21 namespace LIBC_NAMESPACE_DECL {
22 
23 using fputil::DoubleDouble;
24 
fast(double x,DoubleDouble & u)25 LIBC_INLINE unsigned LargeRangeReduction::fast(double x, DoubleDouble &u) {
26   using FPBits = typename fputil::FPBits<double>;
27   FPBits xbits(x);
28 
29   int x_e_m62 = xbits.get_biased_exponent() - (FPBits::EXP_BIAS + 62);
30   idx = static_cast<unsigned>((x_e_m62 >> 4) + 3);
31   // Scale x down by 2^(-(16 * (idx - 3))
32   xbits.set_biased_exponent((x_e_m62 & 15) + FPBits::EXP_BIAS + 62);
33   // 2^62 <= |x_reduced| < 2^(62 + 16) = 2^78
34   x_reduced = xbits.get_val();
35   // x * c_hi = ph.hi + ph.lo exactly.
36   DoubleDouble x_split = fputil::split(x_reduced);
37   DoubleDouble ph = fputil::exact_mult<SPLIT>(x_split, x_reduced,
38                                               ONE_TWENTY_EIGHT_OVER_PI[idx][0]);
39   // x * c_mid = pm.hi + pm.lo exactly.
40   DoubleDouble pm = fputil::exact_mult<SPLIT>(x_split, x_reduced,
41                                               ONE_TWENTY_EIGHT_OVER_PI[idx][1]);
42   // x * c_lo = pl.hi + pl.lo exactly.
43   DoubleDouble pl = fputil::exact_mult<SPLIT>(x_split, x_reduced,
44                                               ONE_TWENTY_EIGHT_OVER_PI[idx][2]);
45   // Extract integral parts and fractional parts of (ph.lo + pm.hi).
46   double sum_hi = ph.lo + pm.hi;
47   double kd = fputil::nearest_integer(sum_hi);
48 
49   // x * 128/pi mod 1 ~ y_hi + y_mid + y_lo
50   y_hi = (ph.lo - kd) + pm.hi; // Exact
51   y_mid = fputil::exact_add(pm.lo, pl.hi);
52   y_lo = pl.lo;
53 
54   // y_l = x * c_lo_2 + pl.lo
55   double y_l =
56       fputil::multiply_add(x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][3], y_lo);
57   DoubleDouble y = fputil::exact_add(y_hi, y_mid.hi);
58   y.lo += (y_mid.lo + y_l);
59 
60   // Digits of pi/128, generated by Sollya with:
61   // > a = round(pi/128, D, RN);
62   // > b = round(pi/128 - a, D, RN);
63   constexpr DoubleDouble PI_OVER_128_DD = {0x1.1a62633145c07p-60,
64                                            0x1.921fb54442d18p-6};
65 
66   // Error bound: with {a} denote the fractional part of a, i.e.:
67   //   {a} = a - round(a)
68   // Then,
69   //   | {x * 128/pi} - (y_hi + y_lo) | <=  ulp(ulp(y_hi)) <= 2^-105
70   //   | {x mod pi/128} - (u.hi + u.lo) | < 2 * 2^-6 * 2^-105 = 2^-110
71   u = fputil::quick_mult<SPLIT>(y, PI_OVER_128_DD);
72 
73   return static_cast<unsigned>(static_cast<int64_t>(kd));
74 }
75 
76 // Lookup table for sin(k * pi / 128) with k = 0, ..., 255.
77 // Table is generated with Sollya as follow:
78 // > display = hexadecimal;
79 // > for k from 0 to 255 do {
80 //     a = round(sin(k * pi/128), 51, RN);
81 //     b = round(sin(k * pi/128) - a, D, RN);
82 //     print("{", b, ",", a, "},");
83 //   };
84 LIBC_INLINE constexpr DoubleDouble SIN_K_PI_OVER_128[256] = {
85     {0, 0},
86     {0x1.f938a73db97fbp-58, 0x1.92155f7a3667cp-6},
87     {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},
88     {0x1.ccbeeeae8129ap-56, 0x1.2d52092ce19f4p-4},
89     {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},
90     {-0x1.cbb1f71aca352p-56, 0x1.f564e56a9731p-4},
91     {-0x1.dd9ffeaecbdc4p-55, 0x1.2c8106e8e613cp-3},
92     {-0x1.ab3802218894fp-55, 0x1.5e214448b3fc8p-3},
93     {-0x1.49b466e7fe36p-55, 0x1.8f8b83c69a60cp-3},
94     {-0x1.035e2873ca432p-55, 0x1.c0b826a7e4f64p-3},
95     {-0x1.50b7bbc4768b1p-55, 0x1.f19f97b215f1cp-3},
96     {-0x1.3ed9efaa42ab3p-55, 0x1.111d262b1f678p-2},
97     {0x1.a8b5c974ee7b5p-54, 0x1.294062ed59f04p-2},
98     {0x1.4325f12be8946p-54, 0x1.4135c941766p-2},
99     {0x1.fc2047e54e614p-55, 0x1.58f9a75ab1fdcp-2},
100     {-0x1.512c678219317p-54, 0x1.7088530fa45ap-2},
101     {-0x1.2e59dba7ab4c2p-54, 0x1.87de2a6aea964p-2},
102     {-0x1.d24afdade848bp-54, 0x1.9ef7943a8ed8cp-2},
103     {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},
104     {-0x1.e97af1a63c807p-54, 0x1.cc66e9931c46p-2},
105     {-0x1.c3e4edc5872f8p-55, 0x1.e2b5d3806f63cp-2},
106     {0x1.fb44f80f92225p-54, 0x1.f8ba4dbf89ab8p-2},
107     {0x1.9697faf2e2fe5p-53, 0x1.073879922ffecp-1},
108     {-0x1.7bc8eda6af93cp-53, 0x1.11eb3541b4b24p-1},
109     {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},
110     {-0x1.5769d0fbcddc3p-53, 0x1.26d054cdd12ep-1},
111     {0x1.c20673b2116b2p-54, 0x1.30ff7fce17034p-1},
112     {0x1.3c7c4bc72a92cp-53, 0x1.3affa292050b8p-1},
113     {-0x1.e7f895d302395p-53, 0x1.44cf325091dd8p-1},
114     {0x1.13c293edceb32p-53, 0x1.4e6cabbe3e5e8p-1},
115     {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},
116     {-0x1.24a366a5fe547p-53, 0x1.610b7551d2cep-1},
117     {0x1.21165f626cdd5p-54, 0x1.6a09e667f3bccp-1},
118     {-0x1.bcac43c389ba9p-53, 0x1.72d0837efff98p-1},
119     {-0x1.21ea6f59be15bp-53, 0x1.7b5df226aafbp-1},
120     {0x1.d217be0e2b971p-53, 0x1.83b0e0bff976cp-1},
121     {0x1.69d0f6897664ap-54, 0x1.8bc806b15174p-1},
122     {-0x1.615f32b6f907ap-54, 0x1.93a22499263fcp-1},
123     {0x1.6788ebcc76dc6p-54, 0x1.9b3e047f3874p-1},
124     {0x1.ddae89fd441d1p-53, 0x1.a29a7a046278p-1},
125     {-0x1.f98273c5d2495p-54, 0x1.a9b66290ea1a4p-1},
126     {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},
127     {0x1.90e58336c64a8p-53, 0x1.b728345196e3cp-1},
128     {0x1.9f6963354e3fep-53, 0x1.bd7c0ac6f9528p-1},
129     {0x1.a47d3a2a0dcbep-54, 0x1.c38b2f180bdbp-1},
130     {0x1.ed0489e16b9ap-54, 0x1.c954b213411f4p-1},
131     {-0x1.0f3db5dad5ac5p-53, 0x1.ced7af43cc774p-1},
132     {0x1.ac42b5a8b6943p-53, 0x1.d4134d14dc938p-1},
133     {-0x1.d75033dfb9ca8p-53, 0x1.d906bcf328d48p-1},
134     {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},
135     {0x1.7f59c49f6cd6dp-54, 0x1.e212104f686e4p-1},
136     {0x1.ee94a90d7b88bp-53, 0x1.e6288ec48e11p-1},
137     {-0x1.a27d3874701f9p-53, 0x1.e9f4156c62ddcp-1},
138     {-0x1.85f4e1b8298dp-54, 0x1.ed740e7684964p-1},
139     {-0x1.ab4e148e52d9ep-54, 0x1.f0a7efb9230d8p-1},
140     {0x1.8a11412b82346p-54, 0x1.f38f3ac64e588p-1},
141     {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},
142     {0x1.3564acef1ff97p-53, 0x1.f8764fa714ba8p-1},
143     {-0x1.5e82a3284d5c8p-53, 0x1.fa7557f08a518p-1},
144     {-0x1.709bccb89a989p-54, 0x1.fc26470e19fd4p-1},
145     {0x1.9e082721dfb8ep-53, 0x1.fd88da3d12524p-1},
146     {-0x1.eade132f3981dp-53, 0x1.fe9cdad01883cp-1},
147     {0x1.e3a843d1db55fp-53, 0x1.ff621e3796d7cp-1},
148     {0x1.765595d548d9ap-54, 0x1.ffd886084cd0cp-1},
149     {0, 1},
150 #ifndef LIBC_MATH_HAS_SMALL_TABLES
151     {0x1.765595d548d9ap-54, 0x1.ffd886084cd0cp-1},
152     {0x1.e3a843d1db55fp-53, 0x1.ff621e3796d7cp-1},
153     {-0x1.eade132f3981dp-53, 0x1.fe9cdad01883cp-1},
154     {0x1.9e082721dfb8ep-53, 0x1.fd88da3d12524p-1},
155     {-0x1.709bccb89a989p-54, 0x1.fc26470e19fd4p-1},
156     {-0x1.5e82a3284d5c8p-53, 0x1.fa7557f08a518p-1},
157     {0x1.3564acef1ff97p-53, 0x1.f8764fa714ba8p-1},
158     {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},
159     {0x1.8a11412b82346p-54, 0x1.f38f3ac64e588p-1},
160     {-0x1.ab4e148e52d9ep-54, 0x1.f0a7efb9230d8p-1},
161     {-0x1.85f4e1b8298dp-54, 0x1.ed740e7684964p-1},
162     {-0x1.a27d3874701f9p-53, 0x1.e9f4156c62ddcp-1},
163     {0x1.ee94a90d7b88bp-53, 0x1.e6288ec48e11p-1},
164     {0x1.7f59c49f6cd6dp-54, 0x1.e212104f686e4p-1},
165     {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},
166     {-0x1.d75033dfb9ca8p-53, 0x1.d906bcf328d48p-1},
167     {0x1.ac42b5a8b6943p-53, 0x1.d4134d14dc938p-1},
168     {-0x1.0f3db5dad5ac5p-53, 0x1.ced7af43cc774p-1},
169     {0x1.ed0489e16b9ap-54, 0x1.c954b213411f4p-1},
170     {0x1.a47d3a2a0dcbep-54, 0x1.c38b2f180bdbp-1},
171     {0x1.9f6963354e3fep-53, 0x1.bd7c0ac6f9528p-1},
172     {0x1.90e58336c64a8p-53, 0x1.b728345196e3cp-1},
173     {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},
174     {-0x1.f98273c5d2495p-54, 0x1.a9b66290ea1a4p-1},
175     {0x1.ddae89fd441d1p-53, 0x1.a29a7a046278p-1},
176     {0x1.6788ebcc76dc6p-54, 0x1.9b3e047f3874p-1},
177     {-0x1.615f32b6f907ap-54, 0x1.93a22499263fcp-1},
178     {0x1.69d0f6897664ap-54, 0x1.8bc806b15174p-1},
179     {0x1.d217be0e2b971p-53, 0x1.83b0e0bff976cp-1},
180     {-0x1.21ea6f59be15bp-53, 0x1.7b5df226aafbp-1},
181     {-0x1.bcac43c389ba9p-53, 0x1.72d0837efff98p-1},
182     {0x1.21165f626cdd5p-54, 0x1.6a09e667f3bccp-1},
183     {-0x1.24a366a5fe547p-53, 0x1.610b7551d2cep-1},
184     {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},
185     {0x1.13c293edceb32p-53, 0x1.4e6cabbe3e5e8p-1},
186     {-0x1.e7f895d302395p-53, 0x1.44cf325091dd8p-1},
187     {0x1.3c7c4bc72a92cp-53, 0x1.3affa292050b8p-1},
188     {0x1.c20673b2116b2p-54, 0x1.30ff7fce17034p-1},
189     {-0x1.5769d0fbcddc3p-53, 0x1.26d054cdd12ep-1},
190     {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},
191     {-0x1.7bc8eda6af93cp-53, 0x1.11eb3541b4b24p-1},
192     {0x1.9697faf2e2fe5p-53, 0x1.073879922ffecp-1},
193     {0x1.fb44f80f92225p-54, 0x1.f8ba4dbf89ab8p-2},
194     {-0x1.c3e4edc5872f8p-55, 0x1.e2b5d3806f63cp-2},
195     {-0x1.e97af1a63c807p-54, 0x1.cc66e9931c46p-2},
196     {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},
197     {-0x1.d24afdade848bp-54, 0x1.9ef7943a8ed8cp-2},
198     {-0x1.2e59dba7ab4c2p-54, 0x1.87de2a6aea964p-2},
199     {-0x1.512c678219317p-54, 0x1.7088530fa45ap-2},
200     {0x1.fc2047e54e614p-55, 0x1.58f9a75ab1fdcp-2},
201     {0x1.4325f12be8946p-54, 0x1.4135c941766p-2},
202     {0x1.a8b5c974ee7b5p-54, 0x1.294062ed59f04p-2},
203     {-0x1.3ed9efaa42ab3p-55, 0x1.111d262b1f678p-2},
204     {-0x1.50b7bbc4768b1p-55, 0x1.f19f97b215f1cp-3},
205     {-0x1.035e2873ca432p-55, 0x1.c0b826a7e4f64p-3},
206     {-0x1.49b466e7fe36p-55, 0x1.8f8b83c69a60cp-3},
207     {-0x1.ab3802218894fp-55, 0x1.5e214448b3fc8p-3},
208     {-0x1.dd9ffeaecbdc4p-55, 0x1.2c8106e8e613cp-3},
209     {-0x1.cbb1f71aca352p-56, 0x1.f564e56a9731p-4},
210     {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},
211     {0x1.ccbeeeae8129ap-56, 0x1.2d52092ce19f4p-4},
212     {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},
213     {0x1.f938a73db97fbp-58, 0x1.92155f7a3667cp-6},
214     {0, 0},
215     {-0x1.f938a73db97fbp-58, -0x1.92155f7a3667cp-6},
216     {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},
217     {-0x1.ccbeeeae8129ap-56, -0x1.2d52092ce19f4p-4},
218     {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},
219     {0x1.cbb1f71aca352p-56, -0x1.f564e56a9731p-4},
220     {0x1.dd9ffeaecbdc4p-55, -0x1.2c8106e8e613cp-3},
221     {0x1.ab3802218894fp-55, -0x1.5e214448b3fc8p-3},
222     {0x1.49b466e7fe36p-55, -0x1.8f8b83c69a60cp-3},
223     {0x1.035e2873ca432p-55, -0x1.c0b826a7e4f64p-3},
224     {0x1.50b7bbc4768b1p-55, -0x1.f19f97b215f1cp-3},
225     {0x1.3ed9efaa42ab3p-55, -0x1.111d262b1f678p-2},
226     {-0x1.a8b5c974ee7b5p-54, -0x1.294062ed59f04p-2},
227     {-0x1.4325f12be8946p-54, -0x1.4135c941766p-2},
228     {-0x1.fc2047e54e614p-55, -0x1.58f9a75ab1fdcp-2},
229     {0x1.512c678219317p-54, -0x1.7088530fa45ap-2},
230     {0x1.2e59dba7ab4c2p-54, -0x1.87de2a6aea964p-2},
231     {0x1.d24afdade848bp-54, -0x1.9ef7943a8ed8cp-2},
232     {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},
233     {0x1.e97af1a63c807p-54, -0x1.cc66e9931c46p-2},
234     {0x1.c3e4edc5872f8p-55, -0x1.e2b5d3806f63cp-2},
235     {-0x1.fb44f80f92225p-54, -0x1.f8ba4dbf89ab8p-2},
236     {-0x1.9697faf2e2fe5p-53, -0x1.073879922ffecp-1},
237     {0x1.7bc8eda6af93cp-53, -0x1.11eb3541b4b24p-1},
238     {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},
239     {0x1.5769d0fbcddc3p-53, -0x1.26d054cdd12ep-1},
240     {-0x1.c20673b2116b2p-54, -0x1.30ff7fce17034p-1},
241     {-0x1.3c7c4bc72a92cp-53, -0x1.3affa292050b8p-1},
242     {0x1.e7f895d302395p-53, -0x1.44cf325091dd8p-1},
243     {-0x1.13c293edceb32p-53, -0x1.4e6cabbe3e5e8p-1},
244     {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},
245     {0x1.24a366a5fe547p-53, -0x1.610b7551d2cep-1},
246     {-0x1.21165f626cdd5p-54, -0x1.6a09e667f3bccp-1},
247     {0x1.bcac43c389ba9p-53, -0x1.72d0837efff98p-1},
248     {0x1.21ea6f59be15bp-53, -0x1.7b5df226aafbp-1},
249     {-0x1.d217be0e2b971p-53, -0x1.83b0e0bff976cp-1},
250     {-0x1.69d0f6897664ap-54, -0x1.8bc806b15174p-1},
251     {0x1.615f32b6f907ap-54, -0x1.93a22499263fcp-1},
252     {-0x1.6788ebcc76dc6p-54, -0x1.9b3e047f3874p-1},
253     {-0x1.ddae89fd441d1p-53, -0x1.a29a7a046278p-1},
254     {0x1.f98273c5d2495p-54, -0x1.a9b66290ea1a4p-1},
255     {0x1.926da300ffccep-55, -0x1.b090a581502p-1},
256     {-0x1.90e58336c64a8p-53, -0x1.b728345196e3cp-1},
257     {-0x1.9f6963354e3fep-53, -0x1.bd7c0ac6f9528p-1},
258     {-0x1.a47d3a2a0dcbep-54, -0x1.c38b2f180bdbp-1},
259     {-0x1.ed0489e16b9ap-54, -0x1.c954b213411f4p-1},
260     {0x1.0f3db5dad5ac5p-53, -0x1.ced7af43cc774p-1},
261     {-0x1.ac42b5a8b6943p-53, -0x1.d4134d14dc938p-1},
262     {0x1.d75033dfb9ca8p-53, -0x1.d906bcf328d48p-1},
263     {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},
264     {-0x1.7f59c49f6cd6dp-54, -0x1.e212104f686e4p-1},
265     {-0x1.ee94a90d7b88bp-53, -0x1.e6288ec48e11p-1},
266     {0x1.a27d3874701f9p-53, -0x1.e9f4156c62ddcp-1},
267     {0x1.85f4e1b8298dp-54, -0x1.ed740e7684964p-1},
268     {0x1.ab4e148e52d9ep-54, -0x1.f0a7efb9230d8p-1},
269     {-0x1.8a11412b82346p-54, -0x1.f38f3ac64e588p-1},
270     {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},
271     {-0x1.3564acef1ff97p-53, -0x1.f8764fa714ba8p-1},
272     {0x1.5e82a3284d5c8p-53, -0x1.fa7557f08a518p-1},
273     {0x1.709bccb89a989p-54, -0x1.fc26470e19fd4p-1},
274     {-0x1.9e082721dfb8ep-53, -0x1.fd88da3d12524p-1},
275     {0x1.eade132f3981dp-53, -0x1.fe9cdad01883cp-1},
276     {-0x1.e3a843d1db55fp-53, -0x1.ff621e3796d7cp-1},
277     {-0x1.765595d548d9ap-54, -0x1.ffd886084cd0cp-1},
278     {0, -1},
279     {-0x1.765595d548d9ap-54, -0x1.ffd886084cd0cp-1},
280     {-0x1.e3a843d1db55fp-53, -0x1.ff621e3796d7cp-1},
281     {0x1.eade132f3981dp-53, -0x1.fe9cdad01883cp-1},
282     {-0x1.9e082721dfb8ep-53, -0x1.fd88da3d12524p-1},
283     {0x1.709bccb89a989p-54, -0x1.fc26470e19fd4p-1},
284     {0x1.5e82a3284d5c8p-53, -0x1.fa7557f08a518p-1},
285     {-0x1.3564acef1ff97p-53, -0x1.f8764fa714ba8p-1},
286     {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},
287     {-0x1.8a11412b82346p-54, -0x1.f38f3ac64e588p-1},
288     {0x1.ab4e148e52d9ep-54, -0x1.f0a7efb9230d8p-1},
289     {0x1.85f4e1b8298dp-54, -0x1.ed740e7684964p-1},
290     {0x1.a27d3874701f9p-53, -0x1.e9f4156c62ddcp-1},
291     {-0x1.ee94a90d7b88bp-53, -0x1.e6288ec48e11p-1},
292     {-0x1.7f59c49f6cd6dp-54, -0x1.e212104f686e4p-1},
293     {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},
294     {0x1.d75033dfb9ca8p-53, -0x1.d906bcf328d48p-1},
295     {-0x1.ac42b5a8b6943p-53, -0x1.d4134d14dc938p-1},
296     {0x1.0f3db5dad5ac5p-53, -0x1.ced7af43cc774p-1},
297     {-0x1.ed0489e16b9ap-54, -0x1.c954b213411f4p-1},
298     {-0x1.a47d3a2a0dcbep-54, -0x1.c38b2f180bdbp-1},
299     {-0x1.9f6963354e3fep-53, -0x1.bd7c0ac6f9528p-1},
300     {-0x1.90e58336c64a8p-53, -0x1.b728345196e3cp-1},
301     {0x1.926da300ffccep-55, -0x1.b090a581502p-1},
302     {0x1.f98273c5d2495p-54, -0x1.a9b66290ea1a4p-1},
303     {-0x1.ddae89fd441d1p-53, -0x1.a29a7a046278p-1},
304     {-0x1.6788ebcc76dc6p-54, -0x1.9b3e047f3874p-1},
305     {0x1.615f32b6f907ap-54, -0x1.93a22499263fcp-1},
306     {-0x1.69d0f6897664ap-54, -0x1.8bc806b15174p-1},
307     {-0x1.d217be0e2b971p-53, -0x1.83b0e0bff976cp-1},
308     {0x1.21ea6f59be15bp-53, -0x1.7b5df226aafbp-1},
309     {0x1.bcac43c389ba9p-53, -0x1.72d0837efff98p-1},
310     {-0x1.21165f626cdd5p-54, -0x1.6a09e667f3bccp-1},
311     {0x1.24a366a5fe547p-53, -0x1.610b7551d2cep-1},
312     {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},
313     {-0x1.13c293edceb32p-53, -0x1.4e6cabbe3e5e8p-1},
314     {0x1.e7f895d302395p-53, -0x1.44cf325091dd8p-1},
315     {-0x1.3c7c4bc72a92cp-53, -0x1.3affa292050b8p-1},
316     {-0x1.c20673b2116b2p-54, -0x1.30ff7fce17034p-1},
317     {0x1.5769d0fbcddc3p-53, -0x1.26d054cdd12ep-1},
318     {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},
319     {0x1.7bc8eda6af93cp-53, -0x1.11eb3541b4b24p-1},
320     {-0x1.9697faf2e2fe5p-53, -0x1.073879922ffecp-1},
321     {-0x1.fb44f80f92225p-54, -0x1.f8ba4dbf89ab8p-2},
322     {0x1.c3e4edc5872f8p-55, -0x1.e2b5d3806f63cp-2},
323     {0x1.e97af1a63c807p-54, -0x1.cc66e9931c46p-2},
324     {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},
325     {0x1.d24afdade848bp-54, -0x1.9ef7943a8ed8cp-2},
326     {0x1.2e59dba7ab4c2p-54, -0x1.87de2a6aea964p-2},
327     {0x1.512c678219317p-54, -0x1.7088530fa45ap-2},
328     {-0x1.fc2047e54e614p-55, -0x1.58f9a75ab1fdcp-2},
329     {-0x1.4325f12be8946p-54, -0x1.4135c941766p-2},
330     {-0x1.a8b5c974ee7b5p-54, -0x1.294062ed59f04p-2},
331     {0x1.3ed9efaa42ab3p-55, -0x1.111d262b1f678p-2},
332     {0x1.50b7bbc4768b1p-55, -0x1.f19f97b215f1cp-3},
333     {0x1.035e2873ca432p-55, -0x1.c0b826a7e4f64p-3},
334     {0x1.49b466e7fe36p-55, -0x1.8f8b83c69a60cp-3},
335     {0x1.ab3802218894fp-55, -0x1.5e214448b3fc8p-3},
336     {0x1.dd9ffeaecbdc4p-55, -0x1.2c8106e8e613cp-3},
337     {0x1.cbb1f71aca352p-56, -0x1.f564e56a9731p-4},
338     {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},
339     {-0x1.ccbeeeae8129ap-56, -0x1.2d52092ce19f4p-4},
340     {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},
341     {-0x1.f938a73db97fbp-58, -0x1.92155f7a3667cp-6},
342 #endif // !LIBC_MATH_HAS_SMALL_TABLES
343 };
344 
345 } // namespace LIBC_NAMESPACE_DECL
346 
347 #endif // LLVM_LIBC_SRC_MATH_GENERIC_RANGE_REDUCTION_DOUBLE_NOFMA_H
348