1 /*
2  * Shared data between exp, exp2 and pow.
3  *
4  * Copyright (c) 2018-2023, Arm Limited.
5  * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6  */
7 
8 #include "math_config.h"
9 
10 #define N (1 << V_POW_EXP_TABLE_BITS)
11 
12 const struct v_pow_exp_data __v_pow_exp_data = {
13 // exp polynomial coefficients.
14 .poly = {
15 // abs error: 1.43*2^-58
16 // ulp error: 0.549 (0.550 without fma)
17 // if |x| < ln2/512
18 0x1.fffffffffffd4p-2,
19 0x1.5555571d6ef9p-3,
20 0x1.5555576a5adcep-5,
21 },
22 // N/ln2
23 .n_over_ln2 = 0x1.71547652b82fep0 * N,
24 // ln2/N
25 .ln2_over_n_hi = 0x1.62e42fefc0000p-9,
26 .ln2_over_n_lo = -0x1.c610ca86c3899p-45,
27 // Used for rounding to nearest integer without using intrinsics.
28 .shift = 0x1.8p52,
29 // 2^(k/N) ~= H[k]*(1 + T[k]) for int k in [0,N)
30 // sbits[k] = asuint64(H[k]) - (k << 52)/N
31 .sbits = {
32 0x3ff0000000000000,
33 0x3feffb1afa5abcbf,
34 0x3feff63da9fb3335,
35 0x3feff168143b0281,
36 0x3fefec9a3e778061,
37 0x3fefe7d42e11bbcc,
38 0x3fefe315e86e7f85,
39 0x3fefde5f72f654b1,
40 0x3fefd9b0d3158574,
41 0x3fefd50a0e3c1f89,
42 0x3fefd06b29ddf6de,
43 0x3fefcbd42b72a836,
44 0x3fefc74518759bc8,
45 0x3fefc2bdf66607e0,
46 0x3fefbe3ecac6f383,
47 0x3fefb9c79b1f3919,
48 0x3fefb5586cf9890f,
49 0x3fefb0f145e46c85,
50 0x3fefac922b7247f7,
51 0x3fefa83b23395dec,
52 0x3fefa3ec32d3d1a2,
53 0x3fef9fa55fdfa9c5,
54 0x3fef9b66affed31b,
55 0x3fef973028d7233e,
56 0x3fef9301d0125b51,
57 0x3fef8edbab5e2ab6,
58 0x3fef8abdc06c31cc,
59 0x3fef86a814f204ab,
60 0x3fef829aaea92de0,
61 0x3fef7e95934f312e,
62 0x3fef7a98c8a58e51,
63 0x3fef76a45471c3c2,
64 0x3fef72b83c7d517b,
65 0x3fef6ed48695bbc0,
66 0x3fef6af9388c8dea,
67 0x3fef672658375d2f,
68 0x3fef635beb6fcb75,
69 0x3fef5f99f8138a1c,
70 0x3fef5be084045cd4,
71 0x3fef582f95281c6b,
72 0x3fef54873168b9aa,
73 0x3fef50e75eb44027,
74 0x3fef4d5022fcd91d,
75 0x3fef49c18438ce4d,
76 0x3fef463b88628cd6,
77 0x3fef42be3578a819,
78 0x3fef3f49917ddc96,
79 0x3fef3bdda27912d1,
80 0x3fef387a6e756238,
81 0x3fef351ffb82140a,
82 0x3fef31ce4fb2a63f,
83 0x3fef2e85711ece75,
84 0x3fef2b4565e27cdd,
85 0x3fef280e341ddf29,
86 0x3fef24dfe1f56381,
87 0x3fef21ba7591bb70,
88 0x3fef1e9df51fdee1,
89 0x3fef1b8a66d10f13,
90 0x3fef187fd0dad990,
91 0x3fef157e39771b2f,
92 0x3fef1285a6e4030b,
93 0x3fef0f961f641589,
94 0x3fef0cafa93e2f56,
95 0x3fef09d24abd886b,
96 0x3fef06fe0a31b715,
97 0x3fef0432edeeb2fd,
98 0x3fef0170fc4cd831,
99 0x3feefeb83ba8ea32,
100 0x3feefc08b26416ff,
101 0x3feef96266e3fa2d,
102 0x3feef6c55f929ff1,
103 0x3feef431a2de883b,
104 0x3feef1a7373aa9cb,
105 0x3feeef26231e754a,
106 0x3feeecae6d05d866,
107 0x3feeea401b7140ef,
108 0x3feee7db34e59ff7,
109 0x3feee57fbfec6cf4,
110 0x3feee32dc313a8e5,
111 0x3feee0e544ede173,
112 0x3feedea64c123422,
113 0x3feedc70df1c5175,
114 0x3feeda4504ac801c,
115 0x3feed822c367a024,
116 0x3feed60a21f72e2a,
117 0x3feed3fb2709468a,
118 0x3feed1f5d950a897,
119 0x3feecffa3f84b9d4,
120 0x3feece086061892d,
121 0x3feecc2042a7d232,
122 0x3feeca41ed1d0057,
123 0x3feec86d668b3237,
124 0x3feec6a2b5c13cd0,
125 0x3feec4e1e192aed2,
126 0x3feec32af0d7d3de,
127 0x3feec17dea6db7d7,
128 0x3feebfdad5362a27,
129 0x3feebe41b817c114,
130 0x3feebcb299fddd0d,
131 0x3feebb2d81d8abff,
132 0x3feeb9b2769d2ca7,
133 0x3feeb8417f4531ee,
134 0x3feeb6daa2cf6642,
135 0x3feeb57de83f4eef,
136 0x3feeb42b569d4f82,
137 0x3feeb2e2f4f6ad27,
138 0x3feeb1a4ca5d920f,
139 0x3feeb070dde910d2,
140 0x3feeaf4736b527da,
141 0x3feeae27dbe2c4cf,
142 0x3feead12d497c7fd,
143 0x3feeac0827ff07cc,
144 0x3feeab07dd485429,
145 0x3feeaa11fba87a03,
146 0x3feea9268a5946b7,
147 0x3feea84590998b93,
148 0x3feea76f15ad2148,
149 0x3feea6a320dceb71,
150 0x3feea5e1b976dc09,
151 0x3feea52ae6cdf6f4,
152 0x3feea47eb03a5585,
153 0x3feea3dd1d1929fd,
154 0x3feea34634ccc320,
155 0x3feea2b9febc8fb7,
156 0x3feea23882552225,
157 0x3feea1c1c70833f6,
158 0x3feea155d44ca973,
159 0x3feea0f4b19e9538,
160 0x3feea09e667f3bcd,
161 0x3feea052fa75173e,
162 0x3feea012750bdabf,
163 0x3fee9fdcddd47645,
164 0x3fee9fb23c651a2f,
165 0x3fee9f9298593ae5,
166 0x3fee9f7df9519484,
167 0x3fee9f7466f42e87,
168 0x3fee9f75e8ec5f74,
169 0x3fee9f8286ead08a,
170 0x3fee9f9a48a58174,
171 0x3fee9fbd35d7cbfd,
172 0x3fee9feb564267c9,
173 0x3feea024b1ab6e09,
174 0x3feea0694fde5d3f,
175 0x3feea0b938ac1cf6,
176 0x3feea11473eb0187,
177 0x3feea17b0976cfdb,
178 0x3feea1ed0130c132,
179 0x3feea26a62ff86f0,
180 0x3feea2f336cf4e62,
181 0x3feea3878491c491,
182 0x3feea427543e1a12,
183 0x3feea4d2add106d9,
184 0x3feea589994cce13,
185 0x3feea64c1eb941f7,
186 0x3feea71a4623c7ad,
187 0x3feea7f4179f5b21,
188 0x3feea8d99b4492ed,
189 0x3feea9cad931a436,
190 0x3feeaac7d98a6699,
191 0x3feeabd0a478580f,
192 0x3feeace5422aa0db,
193 0x3feeae05bad61778,
194 0x3feeaf3216b5448c,
195 0x3feeb06a5e0866d9,
196 0x3feeb1ae99157736,
197 0x3feeb2fed0282c8a,
198 0x3feeb45b0b91ffc6,
199 0x3feeb5c353aa2fe2,
200 0x3feeb737b0cdc5e5,
201 0x3feeb8b82b5f98e5,
202 0x3feeba44cbc8520f,
203 0x3feebbdd9a7670b3,
204 0x3feebd829fde4e50,
205 0x3feebf33e47a22a2,
206 0x3feec0f170ca07ba,
207 0x3feec2bb4d53fe0d,
208 0x3feec49182a3f090,
209 0x3feec674194bb8d5,
210 0x3feec86319e32323,
211 0x3feeca5e8d07f29e,
212 0x3feecc667b5de565,
213 0x3feece7aed8eb8bb,
214 0x3feed09bec4a2d33,
215 0x3feed2c980460ad8,
216 0x3feed503b23e255d,
217 0x3feed74a8af46052,
218 0x3feed99e1330b358,
219 0x3feedbfe53c12e59,
220 0x3feede6b5579fdbf,
221 0x3feee0e521356eba,
222 0x3feee36bbfd3f37a,
223 0x3feee5ff3a3c2774,
224 0x3feee89f995ad3ad,
225 0x3feeeb4ce622f2ff,
226 0x3feeee07298db666,
227 0x3feef0ce6c9a8952,
228 0x3feef3a2b84f15fb,
229 0x3feef68415b749b1,
230 0x3feef9728de5593a,
231 0x3feefc6e29f1c52a,
232 0x3feeff76f2fb5e47,
233 0x3fef028cf22749e4,
234 0x3fef05b030a1064a,
235 0x3fef08e0b79a6f1f,
236 0x3fef0c1e904bc1d2,
237 0x3fef0f69c3f3a207,
238 0x3fef12c25bd71e09,
239 0x3fef16286141b33d,
240 0x3fef199bdd85529c,
241 0x3fef1d1cd9fa652c,
242 0x3fef20ab5fffd07a,
243 0x3fef244778fafb22,
244 0x3fef27f12e57d14b,
245 0x3fef2ba88988c933,
246 0x3fef2f6d9406e7b5,
247 0x3fef33405751c4db,
248 0x3fef3720dcef9069,
249 0x3fef3b0f2e6d1675,
250 0x3fef3f0b555dc3fa,
251 0x3fef43155b5bab74,
252 0x3fef472d4a07897c,
253 0x3fef4b532b08c968,
254 0x3fef4f87080d89f2,
255 0x3fef53c8eacaa1d6,
256 0x3fef5818dcfba487,
257 0x3fef5c76e862e6d3,
258 0x3fef60e316c98398,
259 0x3fef655d71ff6075,
260 0x3fef69e603db3285,
261 0x3fef6e7cd63a8315,
262 0x3fef7321f301b460,
263 0x3fef77d5641c0658,
264 0x3fef7c97337b9b5f,
265 0x3fef81676b197d17,
266 0x3fef864614f5a129,
267 0x3fef8b333b16ee12,
268 0x3fef902ee78b3ff6,
269 0x3fef953924676d76,
270 0x3fef9a51fbc74c83,
271 0x3fef9f7977cdb740,
272 0x3fefa4afa2a490da,
273 0x3fefa9f4867cca6e,
274 0x3fefaf482d8e67f1,
275 0x3fefb4aaa2188510,
276 0x3fefba1bee615a27,
277 0x3fefbf9c1cb6412a,
278 0x3fefc52b376bba97,
279 0x3fefcac948dd7274,
280 0x3fefd0765b6e4540,
281 0x3fefd632798844f8,
282 0x3fefdbfdad9cbe14,
283 0x3fefe1d802243c89,
284 0x3fefe7c1819e90d8,
285 0x3fefedba3692d514,
286 0x3feff3c22b8f71f1,
287 0x3feff9d96b2a23d9,
288 },
289 };
290