1*c9945492SAndroid Build Coastguard Worker /* 2*c9945492SAndroid Build Coastguard Worker * Shared data between exp, exp2 and pow. 3*c9945492SAndroid Build Coastguard Worker * 4*c9945492SAndroid Build Coastguard Worker * Copyright (c) 2018, Arm Limited. 5*c9945492SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 6*c9945492SAndroid Build Coastguard Worker */ 7*c9945492SAndroid Build Coastguard Worker 8*c9945492SAndroid Build Coastguard Worker #include "exp_data.h" 9*c9945492SAndroid Build Coastguard Worker 10*c9945492SAndroid Build Coastguard Worker #define N (1 << EXP_TABLE_BITS) 11*c9945492SAndroid Build Coastguard Worker 12*c9945492SAndroid Build Coastguard Worker const struct exp_data __exp_data = { 13*c9945492SAndroid Build Coastguard Worker // N/ln2 14*c9945492SAndroid Build Coastguard Worker .invln2N = 0x1.71547652b82fep0 * N, 15*c9945492SAndroid Build Coastguard Worker // -ln2/N 16*c9945492SAndroid Build Coastguard Worker .negln2hiN = -0x1.62e42fefa0000p-8, 17*c9945492SAndroid Build Coastguard Worker .negln2loN = -0x1.cf79abc9e3b3ap-47, 18*c9945492SAndroid Build Coastguard Worker // Used for rounding when !TOINT_INTRINSICS 19*c9945492SAndroid Build Coastguard Worker #if EXP_USE_TOINT_NARROW 20*c9945492SAndroid Build Coastguard Worker .shift = 0x1800000000.8p0, 21*c9945492SAndroid Build Coastguard Worker #else 22*c9945492SAndroid Build Coastguard Worker .shift = 0x1.8p52, 23*c9945492SAndroid Build Coastguard Worker #endif 24*c9945492SAndroid Build Coastguard Worker // exp polynomial coefficients. 25*c9945492SAndroid Build Coastguard Worker .poly = { 26*c9945492SAndroid Build Coastguard Worker // abs error: 1.555*2^-66 27*c9945492SAndroid Build Coastguard Worker // ulp error: 0.509 (0.511 without fma) 28*c9945492SAndroid Build Coastguard Worker // if |x| < ln2/256+eps 29*c9945492SAndroid Build Coastguard Worker // abs error if |x| < ln2/256+0x1p-15: 1.09*2^-65 30*c9945492SAndroid Build Coastguard Worker // abs error if |x| < ln2/128: 1.7145*2^-56 31*c9945492SAndroid Build Coastguard Worker 0x1.ffffffffffdbdp-2, 32*c9945492SAndroid Build Coastguard Worker 0x1.555555555543cp-3, 33*c9945492SAndroid Build Coastguard Worker 0x1.55555cf172b91p-5, 34*c9945492SAndroid Build Coastguard Worker 0x1.1111167a4d017p-7, 35*c9945492SAndroid Build Coastguard Worker }, 36*c9945492SAndroid Build Coastguard Worker .exp2_shift = 0x1.8p52 / N, 37*c9945492SAndroid Build Coastguard Worker // exp2 polynomial coefficients. 38*c9945492SAndroid Build Coastguard Worker .exp2_poly = { 39*c9945492SAndroid Build Coastguard Worker // abs error: 1.2195*2^-65 40*c9945492SAndroid Build Coastguard Worker // ulp error: 0.507 (0.511 without fma) 41*c9945492SAndroid Build Coastguard Worker // if |x| < 1/256 42*c9945492SAndroid Build Coastguard Worker // abs error if |x| < 1/128: 1.9941*2^-56 43*c9945492SAndroid Build Coastguard Worker 0x1.62e42fefa39efp-1, 44*c9945492SAndroid Build Coastguard Worker 0x1.ebfbdff82c424p-3, 45*c9945492SAndroid Build Coastguard Worker 0x1.c6b08d70cf4b5p-5, 46*c9945492SAndroid Build Coastguard Worker 0x1.3b2abd24650ccp-7, 47*c9945492SAndroid Build Coastguard Worker 0x1.5d7e09b4e3a84p-10, 48*c9945492SAndroid Build Coastguard Worker }, 49*c9945492SAndroid Build Coastguard Worker // 2^(k/N) ~= H[k]*(1 + T[k]) for int k in [0,N) 50*c9945492SAndroid Build Coastguard Worker // tab[2*k] = asuint64(T[k]) 51*c9945492SAndroid Build Coastguard Worker // tab[2*k+1] = asuint64(H[k]) - (k << 52)/N 52*c9945492SAndroid Build Coastguard Worker .tab = { 53*c9945492SAndroid Build Coastguard Worker 0x0, 0x3ff0000000000000, 54*c9945492SAndroid Build Coastguard Worker 0x3c9b3b4f1a88bf6e, 0x3feff63da9fb3335, 55*c9945492SAndroid Build Coastguard Worker 0xbc7160139cd8dc5d, 0x3fefec9a3e778061, 56*c9945492SAndroid Build Coastguard Worker 0xbc905e7a108766d1, 0x3fefe315e86e7f85, 57*c9945492SAndroid Build Coastguard Worker 0x3c8cd2523567f613, 0x3fefd9b0d3158574, 58*c9945492SAndroid Build Coastguard Worker 0xbc8bce8023f98efa, 0x3fefd06b29ddf6de, 59*c9945492SAndroid Build Coastguard Worker 0x3c60f74e61e6c861, 0x3fefc74518759bc8, 60*c9945492SAndroid Build Coastguard Worker 0x3c90a3e45b33d399, 0x3fefbe3ecac6f383, 61*c9945492SAndroid Build Coastguard Worker 0x3c979aa65d837b6d, 0x3fefb5586cf9890f, 62*c9945492SAndroid Build Coastguard Worker 0x3c8eb51a92fdeffc, 0x3fefac922b7247f7, 63*c9945492SAndroid Build Coastguard Worker 0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2, 64*c9945492SAndroid Build Coastguard Worker 0xbc6a033489906e0b, 0x3fef9b66affed31b, 65*c9945492SAndroid Build Coastguard Worker 0xbc9556522a2fbd0e, 0x3fef9301d0125b51, 66*c9945492SAndroid Build Coastguard Worker 0xbc5080ef8c4eea55, 0x3fef8abdc06c31cc, 67*c9945492SAndroid Build Coastguard Worker 0xbc91c923b9d5f416, 0x3fef829aaea92de0, 68*c9945492SAndroid Build Coastguard Worker 0x3c80d3e3e95c55af, 0x3fef7a98c8a58e51, 69*c9945492SAndroid Build Coastguard Worker 0xbc801b15eaa59348, 0x3fef72b83c7d517b, 70*c9945492SAndroid Build Coastguard Worker 0xbc8f1ff055de323d, 0x3fef6af9388c8dea, 71*c9945492SAndroid Build Coastguard Worker 0x3c8b898c3f1353bf, 0x3fef635beb6fcb75, 72*c9945492SAndroid Build Coastguard Worker 0xbc96d99c7611eb26, 0x3fef5be084045cd4, 73*c9945492SAndroid Build Coastguard Worker 0x3c9aecf73e3a2f60, 0x3fef54873168b9aa, 74*c9945492SAndroid Build Coastguard Worker 0xbc8fe782cb86389d, 0x3fef4d5022fcd91d, 75*c9945492SAndroid Build Coastguard Worker 0x3c8a6f4144a6c38d, 0x3fef463b88628cd6, 76*c9945492SAndroid Build Coastguard Worker 0x3c807a05b0e4047d, 0x3fef3f49917ddc96, 77*c9945492SAndroid Build Coastguard Worker 0x3c968efde3a8a894, 0x3fef387a6e756238, 78*c9945492SAndroid Build Coastguard Worker 0x3c875e18f274487d, 0x3fef31ce4fb2a63f, 79*c9945492SAndroid Build Coastguard Worker 0x3c80472b981fe7f2, 0x3fef2b4565e27cdd, 80*c9945492SAndroid Build Coastguard Worker 0xbc96b87b3f71085e, 0x3fef24dfe1f56381, 81*c9945492SAndroid Build Coastguard Worker 0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1, 82*c9945492SAndroid Build Coastguard Worker 0xbc3d219b1a6fbffa, 0x3fef187fd0dad990, 83*c9945492SAndroid Build Coastguard Worker 0x3c8b3782720c0ab4, 0x3fef1285a6e4030b, 84*c9945492SAndroid Build Coastguard Worker 0x3c6e149289cecb8f, 0x3fef0cafa93e2f56, 85*c9945492SAndroid Build Coastguard Worker 0x3c834d754db0abb6, 0x3fef06fe0a31b715, 86*c9945492SAndroid Build Coastguard Worker 0x3c864201e2ac744c, 0x3fef0170fc4cd831, 87*c9945492SAndroid Build Coastguard Worker 0x3c8fdd395dd3f84a, 0x3feefc08b26416ff, 88*c9945492SAndroid Build Coastguard Worker 0xbc86a3803b8e5b04, 0x3feef6c55f929ff1, 89*c9945492SAndroid Build Coastguard Worker 0xbc924aedcc4b5068, 0x3feef1a7373aa9cb, 90*c9945492SAndroid Build Coastguard Worker 0xbc9907f81b512d8e, 0x3feeecae6d05d866, 91*c9945492SAndroid Build Coastguard Worker 0xbc71d1e83e9436d2, 0x3feee7db34e59ff7, 92*c9945492SAndroid Build Coastguard Worker 0xbc991919b3ce1b15, 0x3feee32dc313a8e5, 93*c9945492SAndroid Build Coastguard Worker 0x3c859f48a72a4c6d, 0x3feedea64c123422, 94*c9945492SAndroid Build Coastguard Worker 0xbc9312607a28698a, 0x3feeda4504ac801c, 95*c9945492SAndroid Build Coastguard Worker 0xbc58a78f4817895b, 0x3feed60a21f72e2a, 96*c9945492SAndroid Build Coastguard Worker 0xbc7c2c9b67499a1b, 0x3feed1f5d950a897, 97*c9945492SAndroid Build Coastguard Worker 0x3c4363ed60c2ac11, 0x3feece086061892d, 98*c9945492SAndroid Build Coastguard Worker 0x3c9666093b0664ef, 0x3feeca41ed1d0057, 99*c9945492SAndroid Build Coastguard Worker 0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0, 100*c9945492SAndroid Build Coastguard Worker 0x3c93ff8e3f0f1230, 0x3feec32af0d7d3de, 101*c9945492SAndroid Build Coastguard Worker 0x3c7690cebb7aafb0, 0x3feebfdad5362a27, 102*c9945492SAndroid Build Coastguard Worker 0x3c931dbdeb54e077, 0x3feebcb299fddd0d, 103*c9945492SAndroid Build Coastguard Worker 0xbc8f94340071a38e, 0x3feeb9b2769d2ca7, 104*c9945492SAndroid Build Coastguard Worker 0xbc87deccdc93a349, 0x3feeb6daa2cf6642, 105*c9945492SAndroid Build Coastguard Worker 0xbc78dec6bd0f385f, 0x3feeb42b569d4f82, 106*c9945492SAndroid Build Coastguard Worker 0xbc861246ec7b5cf6, 0x3feeb1a4ca5d920f, 107*c9945492SAndroid Build Coastguard Worker 0x3c93350518fdd78e, 0x3feeaf4736b527da, 108*c9945492SAndroid Build Coastguard Worker 0x3c7b98b72f8a9b05, 0x3feead12d497c7fd, 109*c9945492SAndroid Build Coastguard Worker 0x3c9063e1e21c5409, 0x3feeab07dd485429, 110*c9945492SAndroid Build Coastguard Worker 0x3c34c7855019c6ea, 0x3feea9268a5946b7, 111*c9945492SAndroid Build Coastguard Worker 0x3c9432e62b64c035, 0x3feea76f15ad2148, 112*c9945492SAndroid Build Coastguard Worker 0xbc8ce44a6199769f, 0x3feea5e1b976dc09, 113*c9945492SAndroid Build Coastguard Worker 0xbc8c33c53bef4da8, 0x3feea47eb03a5585, 114*c9945492SAndroid Build Coastguard Worker 0xbc845378892be9ae, 0x3feea34634ccc320, 115*c9945492SAndroid Build Coastguard Worker 0xbc93cedd78565858, 0x3feea23882552225, 116*c9945492SAndroid Build Coastguard Worker 0x3c5710aa807e1964, 0x3feea155d44ca973, 117*c9945492SAndroid Build Coastguard Worker 0xbc93b3efbf5e2228, 0x3feea09e667f3bcd, 118*c9945492SAndroid Build Coastguard Worker 0xbc6a12ad8734b982, 0x3feea012750bdabf, 119*c9945492SAndroid Build Coastguard Worker 0xbc6367efb86da9ee, 0x3fee9fb23c651a2f, 120*c9945492SAndroid Build Coastguard Worker 0xbc80dc3d54e08851, 0x3fee9f7df9519484, 121*c9945492SAndroid Build Coastguard Worker 0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74, 122*c9945492SAndroid Build Coastguard Worker 0xbc86ee4ac08b7db0, 0x3fee9f9a48a58174, 123*c9945492SAndroid Build Coastguard Worker 0xbc8619321e55e68a, 0x3fee9feb564267c9, 124*c9945492SAndroid Build Coastguard Worker 0x3c909ccb5e09d4d3, 0x3feea0694fde5d3f, 125*c9945492SAndroid Build Coastguard Worker 0xbc7b32dcb94da51d, 0x3feea11473eb0187, 126*c9945492SAndroid Build Coastguard Worker 0x3c94ecfd5467c06b, 0x3feea1ed0130c132, 127*c9945492SAndroid Build Coastguard Worker 0x3c65ebe1abd66c55, 0x3feea2f336cf4e62, 128*c9945492SAndroid Build Coastguard Worker 0xbc88a1c52fb3cf42, 0x3feea427543e1a12, 129*c9945492SAndroid Build Coastguard Worker 0xbc9369b6f13b3734, 0x3feea589994cce13, 130*c9945492SAndroid Build Coastguard Worker 0xbc805e843a19ff1e, 0x3feea71a4623c7ad, 131*c9945492SAndroid Build Coastguard Worker 0xbc94d450d872576e, 0x3feea8d99b4492ed, 132*c9945492SAndroid Build Coastguard Worker 0x3c90ad675b0e8a00, 0x3feeaac7d98a6699, 133*c9945492SAndroid Build Coastguard Worker 0x3c8db72fc1f0eab4, 0x3feeace5422aa0db, 134*c9945492SAndroid Build Coastguard Worker 0xbc65b6609cc5e7ff, 0x3feeaf3216b5448c, 135*c9945492SAndroid Build Coastguard Worker 0x3c7bf68359f35f44, 0x3feeb1ae99157736, 136*c9945492SAndroid Build Coastguard Worker 0xbc93091fa71e3d83, 0x3feeb45b0b91ffc6, 137*c9945492SAndroid Build Coastguard Worker 0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5, 138*c9945492SAndroid Build Coastguard Worker 0xbc6c23f97c90b959, 0x3feeba44cbc8520f, 139*c9945492SAndroid Build Coastguard Worker 0xbc92434322f4f9aa, 0x3feebd829fde4e50, 140*c9945492SAndroid Build Coastguard Worker 0xbc85ca6cd7668e4b, 0x3feec0f170ca07ba, 141*c9945492SAndroid Build Coastguard Worker 0x3c71affc2b91ce27, 0x3feec49182a3f090, 142*c9945492SAndroid Build Coastguard Worker 0x3c6dd235e10a73bb, 0x3feec86319e32323, 143*c9945492SAndroid Build Coastguard Worker 0xbc87c50422622263, 0x3feecc667b5de565, 144*c9945492SAndroid Build Coastguard Worker 0x3c8b1c86e3e231d5, 0x3feed09bec4a2d33, 145*c9945492SAndroid Build Coastguard Worker 0xbc91bbd1d3bcbb15, 0x3feed503b23e255d, 146*c9945492SAndroid Build Coastguard Worker 0x3c90cc319cee31d2, 0x3feed99e1330b358, 147*c9945492SAndroid Build Coastguard Worker 0x3c8469846e735ab3, 0x3feede6b5579fdbf, 148*c9945492SAndroid Build Coastguard Worker 0xbc82dfcd978e9db4, 0x3feee36bbfd3f37a, 149*c9945492SAndroid Build Coastguard Worker 0x3c8c1a7792cb3387, 0x3feee89f995ad3ad, 150*c9945492SAndroid Build Coastguard Worker 0xbc907b8f4ad1d9fa, 0x3feeee07298db666, 151*c9945492SAndroid Build Coastguard Worker 0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb, 152*c9945492SAndroid Build Coastguard Worker 0xbc90a40e3da6f640, 0x3feef9728de5593a, 153*c9945492SAndroid Build Coastguard Worker 0xbc68d6f438ad9334, 0x3feeff76f2fb5e47, 154*c9945492SAndroid Build Coastguard Worker 0xbc91eee26b588a35, 0x3fef05b030a1064a, 155*c9945492SAndroid Build Coastguard Worker 0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2, 156*c9945492SAndroid Build Coastguard Worker 0xbc91bdfbfa9298ac, 0x3fef12c25bd71e09, 157*c9945492SAndroid Build Coastguard Worker 0x3c736eae30af0cb3, 0x3fef199bdd85529c, 158*c9945492SAndroid Build Coastguard Worker 0x3c8ee3325c9ffd94, 0x3fef20ab5fffd07a, 159*c9945492SAndroid Build Coastguard Worker 0x3c84e08fd10959ac, 0x3fef27f12e57d14b, 160*c9945492SAndroid Build Coastguard Worker 0x3c63cdaf384e1a67, 0x3fef2f6d9406e7b5, 161*c9945492SAndroid Build Coastguard Worker 0x3c676b2c6c921968, 0x3fef3720dcef9069, 162*c9945492SAndroid Build Coastguard Worker 0xbc808a1883ccb5d2, 0x3fef3f0b555dc3fa, 163*c9945492SAndroid Build Coastguard Worker 0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c, 164*c9945492SAndroid Build Coastguard Worker 0xbc900dae3875a949, 0x3fef4f87080d89f2, 165*c9945492SAndroid Build Coastguard Worker 0x3c74a385a63d07a7, 0x3fef5818dcfba487, 166*c9945492SAndroid Build Coastguard Worker 0xbc82919e2040220f, 0x3fef60e316c98398, 167*c9945492SAndroid Build Coastguard Worker 0x3c8e5a50d5c192ac, 0x3fef69e603db3285, 168*c9945492SAndroid Build Coastguard Worker 0x3c843a59ac016b4b, 0x3fef7321f301b460, 169*c9945492SAndroid Build Coastguard Worker 0xbc82d52107b43e1f, 0x3fef7c97337b9b5f, 170*c9945492SAndroid Build Coastguard Worker 0xbc892ab93b470dc9, 0x3fef864614f5a129, 171*c9945492SAndroid Build Coastguard Worker 0x3c74b604603a88d3, 0x3fef902ee78b3ff6, 172*c9945492SAndroid Build Coastguard Worker 0x3c83c5ec519d7271, 0x3fef9a51fbc74c83, 173*c9945492SAndroid Build Coastguard Worker 0xbc8ff7128fd391f0, 0x3fefa4afa2a490da, 174*c9945492SAndroid Build Coastguard Worker 0xbc8dae98e223747d, 0x3fefaf482d8e67f1, 175*c9945492SAndroid Build Coastguard Worker 0x3c8ec3bc41aa2008, 0x3fefba1bee615a27, 176*c9945492SAndroid Build Coastguard Worker 0x3c842b94c3a9eb32, 0x3fefc52b376bba97, 177*c9945492SAndroid Build Coastguard Worker 0x3c8a64a931d185ee, 0x3fefd0765b6e4540, 178*c9945492SAndroid Build Coastguard Worker 0xbc8e37bae43be3ed, 0x3fefdbfdad9cbe14, 179*c9945492SAndroid Build Coastguard Worker 0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8, 180*c9945492SAndroid Build Coastguard Worker 0x3c5305c14160cc89, 0x3feff3c22b8f71f1, 181*c9945492SAndroid Build Coastguard Worker }, 182*c9945492SAndroid Build Coastguard Worker }; 183