1 /* 2 * Copyright (c) 2016, Intel Corporation. 3 * Intel Math Library (LIBM) Source Code 4 * 5 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6 * 7 * This code is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 only, as 9 * published by the Free Software Foundation. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 * 25 */ 26 27 #include "precompiled.hpp" 28 #include "asm/assembler.hpp" 29 #include "asm/assembler.inline.hpp" 30 #include "runtime/stubRoutines.hpp" 31 #include "macroAssembler_x86.hpp" 32 33 #ifdef _MSC_VER 34 #define ALIGNED_(x) __declspec(align(x)) 35 #else 36 #define ALIGNED_(x) __attribute__ ((aligned(x))) 37 #endif 38 39 /******************************************************************************/ 40 // ALGORITHM DESCRIPTION - TAN() 41 // --------------------- 42 // 43 // Polynomials coefficients and other constants. 44 // 45 // Note that in this algorithm, there is a different polynomial for 46 // each breakpoint, so there are 32 sets of polynomial coefficients 47 // as well as 32 instances of the other constants. 48 // 49 // The polynomial coefficients and constants are offset from the start 50 // of the main block as follows: 51 // 52 // 0: c8 | c0 53 // 16: c9 | c1 54 // 32: c10 | c2 55 // 48: c11 | c3 56 // 64: c12 | c4 57 // 80: c13 | c5 58 // 96: c14 | c6 59 // 112: c15 | c7 60 // 128: T_hi 61 // 136: T_lo 62 // 144: Sigma 63 // 152: T_hl 64 // 160: Tau 65 // 168: Mask 66 // 176: (end of block) 67 // 68 // The total table size is therefore 5632 bytes. 69 // 70 // Note that c0 and c1 are always zero. We could try storing 71 // other constants here, and just loading the low part of the 72 // SIMD register in these cases, after ensuring the high part 73 // is zero. 74 // 75 // The higher terms of the polynomial are computed in the *low* 76 // part of the SIMD register. This is so we can overlap the 77 // multiplication by r^8 and the unpacking of the other part. 78 // 79 // The constants are: 80 // T_hi + T_lo = accurate constant term in power series 81 // Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit) 82 // Tau = multiplier for the reciprocal, always -1 or 0 83 // 84 // The basic reconstruction formula using these constants is: 85 // 86 // High = tau * recip_hi + t_hi 87 // Med = (sgn * r + t_hl * r)_hi 88 // Low = (sgn * r + t_hl * r)_lo + 89 // tau * recip_lo + T_lo + (T_hl + sigma) * c + pol 90 // 91 // where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15 92 // 93 // (c0 = c1 = 0, but using them keeps SIMD regularity) 94 // 95 // We then do a compensated sum High + Med, add the low parts together 96 // and then do the final sum. 97 // 98 // Here recip_hi + recip_lo is an accurate reciprocal of the remainder 99 // modulo pi/2 100 // 101 // Special cases: 102 // tan(NaN) = quiet NaN, and raise invalid exception 103 // tan(INF) = NaN and raise invalid exception 104 // tan(+/-0) = +/-0 105 // 106 /******************************************************************************/ 107 108 #ifdef _LP64 109 // The 64 bit code is at most SSE2 compliant 110 ALIGNED_(16) juint _ONEHALF_tan[] = 111 { 112 0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL 113 }; 114 115 ALIGNED_(16) juint _MUL16[] = 116 { 117 0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL 118 }; 119 120 ALIGNED_(16) juint _sign_mask_tan[] = 121 { 122 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL 123 }; 124 125 ALIGNED_(16) juint _PI32INV_tan[] = 126 { 127 0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL 128 }; 129 130 ALIGNED_(16) juint _P_1_tan[] = 131 { 132 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL 133 }; 134 135 ALIGNED_(16) juint _P_2_tan[] = 136 { 137 0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL 138 }; 139 140 ALIGNED_(16) juint _P_3_tan[] = 141 { 142 0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL 143 }; 144 145 ALIGNED_(16) juint _Ctable_tan[] = 146 { 147 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL, 148 0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 149 0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL, 150 0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 151 0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL, 152 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL, 153 0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 154 0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 155 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL, 156 0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL, 157 0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL, 158 0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL, 159 0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL, 160 0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL, 161 0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL, 162 0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL, 163 0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL, 164 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL, 165 0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL, 166 0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL, 167 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL, 168 0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL, 169 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL, 170 0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL, 171 0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL, 172 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL, 173 0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL, 174 0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 175 0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL, 176 0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL, 177 0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 178 0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL, 179 0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 180 0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL, 181 0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 182 0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL, 183 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL, 184 0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL, 185 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL, 186 0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL, 187 0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL, 188 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL, 189 0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL, 190 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 191 0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL, 192 0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL, 193 0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 194 0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL, 195 0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 196 0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 197 0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL, 198 0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 199 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL, 200 0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL, 201 0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL, 202 0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL, 203 0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL, 204 0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL, 205 0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL, 206 0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL, 207 0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL, 208 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL, 209 0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL, 210 0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL, 211 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL, 212 0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL, 213 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL, 214 0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL, 215 0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL, 216 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL, 217 0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL, 218 0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 219 0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL, 220 0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL, 221 0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 222 0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL, 223 0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 224 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 225 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 226 0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL, 227 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL, 228 0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL, 229 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL, 230 0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL, 231 0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL, 232 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL, 233 0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL, 234 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 235 0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 236 0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL, 237 0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 238 0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL, 239 0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 240 0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 241 0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL, 242 0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 243 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL, 244 0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL, 245 0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL, 246 0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL, 247 0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL, 248 0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL, 249 0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL, 250 0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL, 251 0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL, 252 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL, 253 0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL, 254 0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL, 255 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL, 256 0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL, 257 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL, 258 0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL, 259 0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL, 260 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL, 261 0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL, 262 0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 263 0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL, 264 0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL, 265 0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 266 0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL, 267 0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 268 0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL, 269 0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 270 0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL, 271 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL, 272 0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL, 273 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL, 274 0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL, 275 0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL, 276 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL, 277 0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL, 278 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 279 0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL, 280 0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL, 281 0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 282 0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL, 283 0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 284 0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 285 0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL, 286 0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 287 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL, 288 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL, 289 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 290 0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL, 291 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL, 292 0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL, 293 0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL, 294 0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 295 0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL, 296 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL, 297 0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL, 298 0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL, 299 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL, 300 0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL, 301 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL, 302 0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL, 303 0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL, 304 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL, 305 0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL, 306 0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 307 0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL, 308 0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL, 309 0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 310 0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL, 311 0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 312 0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL, 313 0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 314 0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL, 315 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL, 316 0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL, 317 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL, 318 0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL, 319 0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL, 320 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL, 321 0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL, 322 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 323 0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 324 0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL, 325 0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 326 0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL, 327 0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 328 0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 329 0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL, 330 0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 331 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL, 332 0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL, 333 0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL, 334 0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL, 335 0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL, 336 0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL, 337 0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL, 338 0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL, 339 0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL, 340 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL, 341 0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL, 342 0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL, 343 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL, 344 0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL, 345 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL, 346 0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL, 347 0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL, 348 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL, 349 0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL, 350 0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 351 0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL, 352 0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL, 353 0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 354 0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL, 355 0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 356 0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL, 357 0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 358 0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL, 359 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL, 360 0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL, 361 0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL, 362 0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL, 363 0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL, 364 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL, 365 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL, 366 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 367 0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 368 0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL, 369 0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 370 0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL, 371 0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 372 0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL, 373 0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL, 374 0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 375 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL, 376 0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL, 377 0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL, 378 0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL, 379 0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL, 380 0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL, 381 0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL, 382 0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL, 383 0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL, 384 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL, 385 0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL, 386 0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL, 387 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL, 388 0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL, 389 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL, 390 0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL, 391 0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL, 392 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL, 393 0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL, 394 0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 395 0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL, 396 0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL, 397 0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 398 0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL, 399 0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 400 0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL, 401 0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 402 0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL, 403 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL, 404 0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL, 405 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL, 406 0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL, 407 0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL, 408 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL, 409 0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL, 410 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 411 0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL, 412 0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL, 413 0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 414 0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL, 415 0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 416 0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 417 0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL, 418 0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 419 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL, 420 0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL, 421 0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL, 422 0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL, 423 0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL, 424 0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL, 425 0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL, 426 0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL, 427 0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL, 428 0x00000000UL, 0x00000000UL, 0x00000000UL 429 }; 430 431 ALIGNED_(16) juint _MASK_35_tan[] = 432 { 433 0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL 434 }; 435 436 ALIGNED_(16) juint _Q_11_tan[] = 437 { 438 0xb8fe4d77UL, 0x3f82609aUL 439 }; 440 441 ALIGNED_(16) juint _Q_9_tan[] = 442 { 443 0xbf847a43UL, 0x3f9664a0UL 444 }; 445 446 ALIGNED_(16) juint _Q_7_tan[] = 447 { 448 0x52c4c8abUL, 0x3faba1baUL 449 }; 450 451 ALIGNED_(16) juint _Q_5_tan[] = 452 { 453 0x11092746UL, 0x3fc11111UL 454 }; 455 456 ALIGNED_(16) juint _Q_3_tan[] = 457 { 458 0x55555612UL, 0x3fd55555UL 459 }; 460 461 ALIGNED_(16) juint _PI_INV_TABLE_tan[] = 462 { 463 0x00000000UL, 0x00000000UL, 0xa2f9836eUL, 0x4e441529UL, 0xfc2757d1UL, 464 0xf534ddc0UL, 0xdb629599UL, 0x3c439041UL, 0xfe5163abUL, 0xdebbc561UL, 465 0xb7246e3aUL, 0x424dd2e0UL, 0x06492eeaUL, 0x09d1921cUL, 0xfe1deb1cUL, 466 0xb129a73eUL, 0xe88235f5UL, 0x2ebb4484UL, 0xe99c7026UL, 0xb45f7e41UL, 467 0x3991d639UL, 0x835339f4UL, 0x9c845f8bUL, 0xbdf9283bUL, 0x1ff897ffUL, 468 0xde05980fUL, 0xef2f118bUL, 0x5a0a6d1fUL, 0x6d367ecfUL, 0x27cb09b7UL, 469 0x4f463f66UL, 0x9e5fea2dUL, 0x7527bac7UL, 0xebe5f17bUL, 0x3d0739f7UL, 470 0x8a5292eaUL, 0x6bfb5fb1UL, 0x1f8d5d08UL, 0x56033046UL, 0xfc7b6babUL, 471 0xf0cfbc21UL 472 }; 473 474 ALIGNED_(8) juint _PI_4_tan[] = 475 { 476 0x00000000UL, 0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL 477 }; 478 479 ALIGNED_(8) juint _QQ_2_tan[] = 480 { 481 0x676733afUL, 0x3d32e7b9UL 482 }; 483 484 ALIGNED_(8) juint _ONE_tan[] = 485 { 486 0x00000000UL, 0x3ff00000UL 487 }; 488 489 ALIGNED_(8) juint _TWO_POW_55_tan[] = 490 { 491 0x00000000UL, 0x43600000UL 492 }; 493 494 ALIGNED_(4) juint _TWO_POW_M55_tan[] = 495 { 496 0x00000000UL, 0x3c800000UL 497 }; 498 499 ALIGNED_(4) juint _NEG_ZERO_tan[] = 500 { 501 0x00000000UL, 0x80000000UL 502 }; 503 504 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r8, Register r9, Register r10, Register r11) { 505 506 Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1; 507 Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1; 508 Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1; 509 Label L_2TAG_PACKET_12_0_1, L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1, B1_2, B1_3, B1_4, B1_5, start; 510 511 address ONEHALF = (address)_ONEHALF_tan; 512 address MUL16 = (address)_MUL16; 513 address sign_mask = (address)_sign_mask_tan; 514 address PI32INV = (address)_PI32INV_tan; 515 address P_1 = (address)_P_1_tan; 516 address P_2 = (address)_P_2_tan; 517 address P_3 = (address)_P_3_tan; 518 address Ctable = (address)_Ctable_tan; 519 address MASK_35 = (address)_MASK_35_tan; 520 address Q_11 = (address)_Q_11_tan; 521 address Q_9 = (address)_Q_9_tan; 522 address Q_7 = (address)_Q_7_tan; 523 address Q_5 = (address)_Q_5_tan; 524 address Q_3 = (address)_Q_3_tan; 525 address PI_INV_TABLE = (address)_PI_INV_TABLE_tan; 526 address PI_4 = (address)_PI_4_tan; 527 address QQ_2 = (address)_QQ_2_tan; 528 address ONE = (address)_ONE_tan; 529 address TWO_POW_55 = (address)_TWO_POW_55_tan; 530 address TWO_POW_M55 = (address)_TWO_POW_M55_tan; 531 address NEG_ZERO = (address)_NEG_ZERO_tan; 532 533 bind(start); 534 push(rbx); 535 subq(rsp, 16); 536 movsd(Address(rsp, 8), xmm0); 537 538 bind(B1_2); 539 pextrw(eax, xmm0, 3); 540 andl(eax, 32767); 541 subl(eax, 16314); 542 cmpl(eax, 270); 543 jcc(Assembler::above, L_2TAG_PACKET_0_0_1); 544 movdqu(xmm5, ExternalAddress(ONEHALF)); //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL 545 movdqu(xmm6, ExternalAddress(MUL16)); //0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL 546 unpcklpd(xmm0, xmm0); 547 movdqu(xmm4, ExternalAddress(sign_mask)); //0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL 548 andpd(xmm4, xmm0); 549 movdqu(xmm1, ExternalAddress(PI32INV)); //0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL 550 mulpd(xmm1, xmm0); 551 por(xmm5, xmm4); 552 addpd(xmm1, xmm5); 553 movdqu(xmm7, xmm1); 554 unpckhpd(xmm7, xmm7); 555 cvttsd2sil(edx, xmm7); 556 cvttpd2dq(xmm1, xmm1); 557 cvtdq2pd(xmm1, xmm1); 558 mulpd(xmm1, xmm6); 559 movdqu(xmm3, ExternalAddress(P_1)); //0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL 560 movq(xmm5, ExternalAddress(QQ_2)); //0x676733afUL, 0x3d32e7b9UL 561 addq(rdx, 469248); 562 movdqu(xmm4, ExternalAddress(P_2)); //0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL 563 mulpd(xmm3, xmm1); 564 andq(rdx, 31); 565 mulsd(xmm5, xmm1); 566 movq(rcx, rdx); 567 mulpd(xmm4, xmm1); 568 shlq(rcx, 1); 569 subpd(xmm0, xmm3); 570 mulpd(xmm1, ExternalAddress(P_3)); //0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL 571 addq(rdx, rcx); 572 shlq(rcx, 2); 573 addq(rdx, rcx); 574 addsd(xmm5, xmm0); 575 movdqu(xmm2, xmm0); 576 subpd(xmm0, xmm4); 577 movq(xmm6, ExternalAddress(ONE)); //0x00000000UL, 0x3ff00000UL 578 shlq(rdx, 4); 579 lea(rax, ExternalAddress(Ctable)); 580 andpd(xmm5, ExternalAddress(MASK_35)); //0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL 581 movdqu(xmm3, xmm0); 582 addq(rax, rdx); 583 subpd(xmm2, xmm0); 584 unpckhpd(xmm0, xmm0); 585 divsd(xmm6, xmm5); 586 subpd(xmm2, xmm4); 587 movdqu(xmm7, Address(rax, 16)); 588 subsd(xmm3, xmm5); 589 mulpd(xmm7, xmm0); 590 subpd(xmm2, xmm1); 591 movdqu(xmm1, Address(rax, 48)); 592 mulpd(xmm1, xmm0); 593 movdqu(xmm4, Address(rax, 96)); 594 mulpd(xmm4, xmm0); 595 addsd(xmm2, xmm3); 596 movdqu(xmm3, xmm0); 597 mulpd(xmm0, xmm0); 598 addpd(xmm7, Address(rax, 0)); 599 addpd(xmm1, Address(rax, 32)); 600 mulpd(xmm1, xmm0); 601 addpd(xmm4, Address(rax, 80)); 602 addpd(xmm7, xmm1); 603 movdqu(xmm1, Address(rax, 112)); 604 mulpd(xmm1, xmm0); 605 mulpd(xmm0, xmm0); 606 addpd(xmm4, xmm1); 607 movdqu(xmm1, Address(rax, 64)); 608 mulpd(xmm1, xmm0); 609 addpd(xmm7, xmm1); 610 movdqu(xmm1, xmm3); 611 mulpd(xmm3, xmm0); 612 mulsd(xmm0, xmm0); 613 mulpd(xmm1, Address(rax, 144)); 614 mulpd(xmm4, xmm3); 615 movdqu(xmm3, xmm1); 616 addpd(xmm7, xmm4); 617 movdqu(xmm4, xmm1); 618 mulsd(xmm0, xmm7); 619 unpckhpd(xmm7, xmm7); 620 addsd(xmm0, xmm7); 621 unpckhpd(xmm1, xmm1); 622 addsd(xmm3, xmm1); 623 subsd(xmm4, xmm3); 624 addsd(xmm1, xmm4); 625 movdqu(xmm4, xmm2); 626 movq(xmm7, Address(rax, 144)); 627 unpckhpd(xmm2, xmm2); 628 addsd(xmm7, Address(rax, 152)); 629 mulsd(xmm7, xmm2); 630 addsd(xmm7, Address(rax, 136)); 631 addsd(xmm7, xmm1); 632 addsd(xmm0, xmm7); 633 movq(xmm7, ExternalAddress(ONE)); //0x00000000UL, 0x3ff00000UL 634 mulsd(xmm4, xmm6); 635 movq(xmm2, Address(rax, 168)); 636 andpd(xmm2, xmm6); 637 mulsd(xmm5, xmm2); 638 mulsd(xmm6, Address(rax, 160)); 639 subsd(xmm7, xmm5); 640 subsd(xmm2, Address(rax, 128)); 641 subsd(xmm7, xmm4); 642 mulsd(xmm7, xmm6); 643 movdqu(xmm4, xmm3); 644 subsd(xmm3, xmm2); 645 addsd(xmm2, xmm3); 646 subsd(xmm4, xmm2); 647 addsd(xmm0, xmm4); 648 subsd(xmm0, xmm7); 649 addsd(xmm0, xmm3); 650 jmp(B1_4); 651 652 bind(L_2TAG_PACKET_0_0_1); 653 jcc(Assembler::greater, L_2TAG_PACKET_1_0_1); 654 pextrw(eax, xmm0, 3); 655 movl(edx, eax); 656 andl(eax, 32752); 657 jcc(Assembler::equal, L_2TAG_PACKET_2_0_1); 658 andl(edx, 32767); 659 cmpl(edx, 15904); 660 jcc(Assembler::below, L_2TAG_PACKET_3_0_1); 661 movdqu(xmm2, xmm0); 662 movdqu(xmm3, xmm0); 663 movq(xmm1, ExternalAddress(Q_11)); //0xb8fe4d77UL, 0x3f82609aUL 664 mulsd(xmm2, xmm0); 665 mulsd(xmm3, xmm2); 666 mulsd(xmm1, xmm2); 667 addsd(xmm1, ExternalAddress(Q_9)); //0xbf847a43UL, 0x3f9664a0UL 668 mulsd(xmm1, xmm2); 669 addsd(xmm1, ExternalAddress(Q_7)); //0x52c4c8abUL, 0x3faba1baUL 670 mulsd(xmm1, xmm2); 671 addsd(xmm1, ExternalAddress(Q_5)); //0x11092746UL, 0x3fc11111UL 672 mulsd(xmm1, xmm2); 673 addsd(xmm1, ExternalAddress(Q_3)); //0x55555612UL, 0x3fd55555UL 674 mulsd(xmm1, xmm3); 675 addsd(xmm0, xmm1); 676 jmp(B1_4); 677 678 bind(L_2TAG_PACKET_3_0_1); 679 movq(xmm3, ExternalAddress(TWO_POW_55)); //0x00000000UL, 0x43600000UL 680 mulsd(xmm3, xmm0); 681 addsd(xmm0, xmm3); 682 mulsd(xmm0, ExternalAddress(TWO_POW_M55)); //0x00000000UL, 0x3c800000UL 683 jmp(B1_4); 684 685 bind(L_2TAG_PACKET_2_0_1); 686 movdqu(xmm1, xmm0); 687 mulsd(xmm1, xmm1); 688 jmp(B1_4); 689 690 bind(L_2TAG_PACKET_1_0_1); 691 pextrw(eax, xmm0, 3); 692 andl(eax, 32752); 693 cmpl(eax, 32752); 694 jcc(Assembler::equal, L_2TAG_PACKET_4_0_1); 695 pextrw(ecx, xmm0, 3); 696 andl(ecx, 32752); 697 subl(ecx, 16224); 698 shrl(ecx, 7); 699 andl(ecx, 65532); 700 lea(r11, ExternalAddress(PI_INV_TABLE)); 701 addq(rcx, r11); 702 movdq(rax, xmm0); 703 movl(r10, Address(rcx, 20)); 704 movl(r8, Address(rcx, 24)); 705 movl(edx, eax); 706 shrq(rax, 21); 707 orl(eax, INT_MIN); 708 shrl(eax, 11); 709 movl(r9, r10); 710 imulq(r10, rdx); 711 imulq(r9, rax); 712 imulq(r8, rax); 713 movl(rsi, Address(rcx, 16)); 714 movl(rdi, Address(rcx, 12)); 715 movl(r11, r10); 716 shrq(r10, 32); 717 addq(r9, r10); 718 addq(r11, r8); 719 movl(r8, r11); 720 shrq(r11, 32); 721 addq(r9, r11); 722 movl(r10, rsi); 723 imulq(rsi, rdx); 724 imulq(r10, rax); 725 movl(r11, rdi); 726 imulq(rdi, rdx); 727 movl(rbx, rsi); 728 shrq(rsi, 32); 729 addq(r9, rbx); 730 movl(rbx, r9); 731 shrq(r9, 32); 732 addq(r10, rsi); 733 addq(r10, r9); 734 shlq(rbx, 32); 735 orq(r8, rbx); 736 imulq(r11, rax); 737 movl(r9, Address(rcx, 8)); 738 movl(rsi, Address(rcx, 4)); 739 movl(rbx, rdi); 740 shrq(rdi, 32); 741 addq(r10, rbx); 742 movl(rbx, r10); 743 shrq(r10, 32); 744 addq(r11, rdi); 745 addq(r11, r10); 746 movq(rdi, r9); 747 imulq(r9, rdx); 748 imulq(rdi, rax); 749 movl(r10, r9); 750 shrq(r9, 32); 751 addq(r11, r10); 752 movl(r10, r11); 753 shrq(r11, 32); 754 addq(rdi, r9); 755 addq(rdi, r11); 756 movq(r9, rsi); 757 imulq(rsi, rdx); 758 imulq(r9, rax); 759 shlq(r10, 32); 760 orq(r10, rbx); 761 movl(eax, Address(rcx, 0)); 762 movl(r11, rsi); 763 shrq(rsi, 32); 764 addq(rdi, r11); 765 movl(r11, rdi); 766 shrq(rdi, 32); 767 addq(r9, rsi); 768 addq(r9, rdi); 769 imulq(rdx, rax); 770 pextrw(rbx, xmm0, 3); 771 lea(rdi, ExternalAddress(PI_INV_TABLE)); 772 subq(rcx, rdi); 773 addl(ecx, ecx); 774 addl(ecx, ecx); 775 addl(ecx, ecx); 776 addl(ecx, 19); 777 movl(rsi, 32768); 778 andl(rsi, rbx); 779 shrl(rbx, 4); 780 andl(rbx, 2047); 781 subl(rbx, 1023); 782 subl(ecx, rbx); 783 addq(r9, rdx); 784 movl(edx, ecx); 785 addl(edx, 32); 786 cmpl(ecx, 0); 787 jcc(Assembler::less, L_2TAG_PACKET_5_0_1); 788 negl(ecx); 789 addl(ecx, 29); 790 shll(r9); 791 movl(rdi, r9); 792 andl(r9, 1073741823); 793 testl(r9, 536870912); 794 jcc(Assembler::notEqual, L_2TAG_PACKET_6_0_1); 795 shrl(r9); 796 movl(rbx, 0); 797 shlq(r9, 32); 798 orq(r9, r11); 799 800 bind(L_2TAG_PACKET_7_0_1); 801 802 bind(L_2TAG_PACKET_8_0_1); 803 cmpq(r9, 0); 804 jcc(Assembler::equal, L_2TAG_PACKET_9_0_1); 805 806 bind(L_2TAG_PACKET_10_0_1); 807 bsrq(r11, r9); 808 movl(ecx, 29); 809 subl(ecx, r11); 810 jcc(Assembler::lessEqual, L_2TAG_PACKET_11_0_1); 811 shlq(r9); 812 movq(rax, r10); 813 shlq(r10); 814 addl(edx, ecx); 815 negl(ecx); 816 addl(ecx, 64); 817 shrq(rax); 818 shrq(r8); 819 orq(r9, rax); 820 orq(r10, r8); 821 822 bind(L_2TAG_PACKET_12_0_1); 823 cvtsi2sdq(xmm0, r9); 824 shrq(r10, 1); 825 cvtsi2sdq(xmm3, r10); 826 xorpd(xmm4, xmm4); 827 shll(edx, 4); 828 negl(edx); 829 addl(edx, 16368); 830 orl(edx, rsi); 831 xorl(edx, rbx); 832 pinsrw(xmm4, edx, 3); 833 movq(xmm2, ExternalAddress(PI_4)); //0x00000000UL, 0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL 834 movq(xmm7, ExternalAddress(8 + PI_4)); //0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL 835 xorpd(xmm5, xmm5); 836 subl(edx, 1008); 837 pinsrw(xmm5, edx, 3); 838 mulsd(xmm0, xmm4); 839 shll(rsi, 16); 840 sarl(rsi, 31); 841 mulsd(xmm3, xmm5); 842 movdqu(xmm1, xmm0); 843 mulsd(xmm0, xmm2); 844 shrl(rdi, 30); 845 addsd(xmm1, xmm3); 846 mulsd(xmm3, xmm2); 847 addl(rdi, rsi); 848 xorl(rdi, rsi); 849 mulsd(xmm7, xmm1); 850 movl(eax, rdi); 851 addsd(xmm7, xmm3); 852 movdqu(xmm2, xmm0); 853 addsd(xmm0, xmm7); 854 subsd(xmm2, xmm0); 855 addsd(xmm7, xmm2); 856 movdqu(xmm1, ExternalAddress(PI32INV)); //0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL 857 if (VM_Version::supports_sse3()) { 858 movddup(xmm0, xmm0); 859 } 860 else { 861 movlhps(xmm0, xmm0); 862 } 863 movdqu(xmm4, ExternalAddress(sign_mask)); //0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL 864 andpd(xmm4, xmm0); 865 mulpd(xmm1, xmm0); 866 if (VM_Version::supports_sse3()) { 867 movddup(xmm7, xmm7); 868 } 869 else { 870 movlhps(xmm7, xmm7); 871 } 872 movdqu(xmm5, ExternalAddress(ONEHALF)); //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL 873 movdqu(xmm6, ExternalAddress(MUL16)); //0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL 874 por(xmm5, xmm4); 875 addpd(xmm1, xmm5); 876 movdqu(xmm5, xmm1); 877 unpckhpd(xmm5, xmm5); 878 cvttsd2sil(edx, xmm5); 879 cvttpd2dq(xmm1, xmm1); 880 cvtdq2pd(xmm1, xmm1); 881 mulpd(xmm1, xmm6); 882 movdqu(xmm3, ExternalAddress(P_1)); //0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL 883 movq(xmm5, ExternalAddress(QQ_2)); //0x676733afUL, 0x3d32e7b9UL 884 shll(eax, 4); 885 addl(edx, 469248); 886 movdqu(xmm4, ExternalAddress(P_2)); //0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL 887 mulpd(xmm3, xmm1); 888 addl(edx, eax); 889 andl(edx, 31); 890 mulsd(xmm5, xmm1); 891 movl(ecx, edx); 892 mulpd(xmm4, xmm1); 893 shll(ecx, 1); 894 subpd(xmm0, xmm3); 895 mulpd(xmm1, ExternalAddress(P_3)); //0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL 896 addl(edx, ecx); 897 shll(ecx, 2); 898 addl(edx, ecx); 899 addsd(xmm5, xmm0); 900 movdqu(xmm2, xmm0); 901 subpd(xmm0, xmm4); 902 movq(xmm6, ExternalAddress(ONE)); //0x00000000UL, 0x3ff00000UL 903 shll(edx, 4); 904 lea(rax, ExternalAddress(Ctable)); 905 andpd(xmm5, ExternalAddress(MASK_35)); //0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL 906 movdqu(xmm3, xmm0); 907 addq(rax, rdx); 908 subpd(xmm2, xmm0); 909 unpckhpd(xmm0, xmm0); 910 divsd(xmm6, xmm5); 911 subpd(xmm2, xmm4); 912 subsd(xmm3, xmm5); 913 subpd(xmm2, xmm1); 914 movdqu(xmm1, Address(rax, 48)); 915 addpd(xmm2, xmm7); 916 movdqu(xmm7, Address(rax, 16)); 917 mulpd(xmm7, xmm0); 918 movdqu(xmm4, Address(rax, 96)); 919 mulpd(xmm1, xmm0); 920 mulpd(xmm4, xmm0); 921 addsd(xmm2, xmm3); 922 movdqu(xmm3, xmm0); 923 mulpd(xmm0, xmm0); 924 addpd(xmm7, Address(rax, 0)); 925 addpd(xmm1, Address(rax, 32)); 926 mulpd(xmm1, xmm0); 927 addpd(xmm4, Address(rax, 80)); 928 addpd(xmm7, xmm1); 929 movdqu(xmm1, Address(rax, 112)); 930 mulpd(xmm1, xmm0); 931 mulpd(xmm0, xmm0); 932 addpd(xmm4, xmm1); 933 movdqu(xmm1, Address(rax, 64)); 934 mulpd(xmm1, xmm0); 935 addpd(xmm7, xmm1); 936 movdqu(xmm1, xmm3); 937 mulpd(xmm3, xmm0); 938 mulsd(xmm0, xmm0); 939 mulpd(xmm1, Address(rax, 144)); 940 mulpd(xmm4, xmm3); 941 movdqu(xmm3, xmm1); 942 addpd(xmm7, xmm4); 943 movdqu(xmm4, xmm1); 944 mulsd(xmm0, xmm7); 945 unpckhpd(xmm7, xmm7); 946 addsd(xmm0, xmm7); 947 unpckhpd(xmm1, xmm1); 948 addsd(xmm3, xmm1); 949 subsd(xmm4, xmm3); 950 addsd(xmm1, xmm4); 951 movdqu(xmm4, xmm2); 952 movq(xmm7, Address(rax, 144)); 953 unpckhpd(xmm2, xmm2); 954 addsd(xmm7, Address(rax, 152)); 955 mulsd(xmm7, xmm2); 956 addsd(xmm7, Address(rax, 136)); 957 addsd(xmm7, xmm1); 958 addsd(xmm0, xmm7); 959 movq(xmm7, ExternalAddress(ONE)); //0x00000000UL, 0x3ff00000UL 960 mulsd(xmm4, xmm6); 961 movq(xmm2, Address(rax, 168)); 962 andpd(xmm2, xmm6); 963 mulsd(xmm5, xmm2); 964 mulsd(xmm6, Address(rax, 160)); 965 subsd(xmm7, xmm5); 966 subsd(xmm2, Address(rax, 128)); 967 subsd(xmm7, xmm4); 968 mulsd(xmm7, xmm6); 969 movdqu(xmm4, xmm3); 970 subsd(xmm3, xmm2); 971 addsd(xmm2, xmm3); 972 subsd(xmm4, xmm2); 973 addsd(xmm0, xmm4); 974 subsd(xmm0, xmm7); 975 addsd(xmm0, xmm3); 976 jmp(B1_4); 977 978 bind(L_2TAG_PACKET_9_0_1); 979 addl(edx, 64); 980 movq(r9, r10); 981 movq(r10, r8); 982 movl(r8, 0); 983 cmpq(r9, 0); 984 jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_1); 985 addl(edx, 64); 986 movq(r9, r10); 987 movq(r10, r8); 988 cmpq(r9, 0); 989 jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_1); 990 jmp(L_2TAG_PACKET_12_0_1); 991 992 bind(L_2TAG_PACKET_11_0_1); 993 jcc(Assembler::equal, L_2TAG_PACKET_12_0_1); 994 negl(ecx); 995 shrq(r10); 996 movq(rax, r9); 997 shrq(r9); 998 subl(edx, ecx); 999 negl(ecx); 1000 addl(ecx, 64); 1001 shlq(rax); 1002 orq(r10, rax); 1003 jmp(L_2TAG_PACKET_12_0_1); 1004 1005 bind(L_2TAG_PACKET_5_0_1); 1006 notl(ecx); 1007 shlq(r9, 32); 1008 orq(r9, r11); 1009 shlq(r9); 1010 movq(rdi, r9); 1011 testl(r9, INT_MIN); 1012 jcc(Assembler::notEqual, L_2TAG_PACKET_13_0_1); 1013 shrl(r9); 1014 movl(rbx, 0); 1015 shrq(rdi, 2); 1016 jmp(L_2TAG_PACKET_8_0_1); 1017 1018 bind(L_2TAG_PACKET_6_0_1); 1019 shrl(r9); 1020 movl(rbx, 1073741824); 1021 shrl(rbx); 1022 shlq(r9, 32); 1023 orq(r9, r11); 1024 shlq(rbx, 32); 1025 addl(rdi, 1073741824); 1026 movl(rcx, 0); 1027 movl(r11, 0); 1028 subq(rcx, r8); 1029 sbbq(r11, r10); 1030 sbbq(rbx, r9); 1031 movq(r8, rcx); 1032 movq(r10, r11); 1033 movq(r9, rbx); 1034 movl(rbx, 32768); 1035 jmp(L_2TAG_PACKET_7_0_1); 1036 1037 bind(L_2TAG_PACKET_13_0_1); 1038 shrl(r9); 1039 mov64(rbx, 0x100000000); 1040 shrq(rbx); 1041 movl(rcx, 0); 1042 movl(r11, 0); 1043 subq(rcx, r8); 1044 sbbq(r11, r10); 1045 sbbq(rbx, r9); 1046 movq(r8, rcx); 1047 movq(r10, r11); 1048 movq(r9, rbx); 1049 movl(rbx, 32768); 1050 shrq(rdi, 2); 1051 addl(rdi, 1073741824); 1052 jmp(L_2TAG_PACKET_8_0_1); 1053 1054 bind(L_2TAG_PACKET_4_0_1); 1055 movq(xmm0, Address(rsp, 8)); 1056 mulsd(xmm0, ExternalAddress(NEG_ZERO)); //0x00000000UL, 0x80000000UL 1057 movq(Address(rsp, 0), xmm0); 1058 1059 bind(L_2TAG_PACKET_14_0_1); 1060 1061 bind(B1_4); 1062 addq(rsp, 16); 1063 1064 } 1065 #else 1066 // The 32 bit code is at most SSE2 compliant 1067 ALIGNED_(16) jushort _TP[] = 1068 { 1069 0x4cd6, 0xaf6c, 0xc710, 0xc662, 0xbffd, 0x0000, 0x4b06, 0xb0ac, 0xd3b2, 0xcc2c, 1070 0x3ff9, 0x0000, 0x00e3, 0xc850, 0xaa28, 0x9533, 0xbff3, 0x0000, 0x2ff0, 0x466d, 1071 0x1a3b, 0xb266, 0x3fe5, 0x0000 1072 }; 1073 1074 ALIGNED_(16) jushort _TQ[] = 1075 { 1076 0x399c, 0x8391, 0x154c, 0x94ca, 0xbfff, 0x0000, 0xb6a3, 0xc36a, 0x44e2, 0x8a2c, 1077 0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce, 1078 0x7d76, 0x9bff, 0x3ff3, 0x0000 1079 }; 1080 1081 ALIGNED_(16) jushort _GP[] = 1082 { 1083 0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b, 1084 0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819, 1085 0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000, 1086 0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d, 1087 0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e, 1088 0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000, 1089 0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205, 1090 0xbfd8, 0x0000 1091 }; 1092 1093 void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) { 1094 Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12; 1095 Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23; 1096 Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34; 1097 Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_44, B1_45, B1_46; 1098 1099 assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp); 1100 1101 address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr(); 1102 address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr(); 1103 address Pi4x3 = StubRoutines::x86::_Pi4x3_addr(); 1104 address Pi4x4 = StubRoutines::x86::_Pi4x4_addr(); 1105 address ones = StubRoutines::x86::_ones_addr(); 1106 address TP = (address)_TP; 1107 address TQ = (address)_TQ; 1108 address GP = (address)_GP; 1109 1110 bind(B1_1); 1111 push(ebp); 1112 movl(ebp, esp); 1113 andl(esp, -64); 1114 push(esi); 1115 push(edi); 1116 push(ebx); 1117 subl(esp, 52); 1118 movl(eax, Address(ebp, 16)); 1119 movl(ebx, Address(ebp, 20)); 1120 movl(Address(esp, 40), eax); 1121 1122 bind(B1_2); 1123 fnstcw(Address(esp, 38)); 1124 1125 bind(B1_3); 1126 movl(edx, Address(ebp, 12)); 1127 movl(eax, edx); 1128 andl(eax, 2147483647); 1129 shrl(edx, 31); 1130 movl(Address(esp, 44), edx); 1131 cmpl(eax, 1104150528); 1132 jcc(Assembler::aboveEqual, B1_11); 1133 1134 bind(B1_4); 1135 movsd(xmm1, Address(ebp, 8)); 1136 movzwl(ecx, Address(esp, 38)); 1137 movl(edx, ecx); 1138 andl(edx, 768); 1139 andps(xmm1, ExternalAddress(L_2il0floatpacket_0)); //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL 1140 cmpl(edx, 768); 1141 movsd(xmm0, ExternalAddress(Pi4Inv)); ////0x6dc9c883UL, 0x3ff45f30UL 1142 mulsd(xmm0, xmm1); 1143 movsd(Address(ebp, 8), xmm1); 1144 movsd(Address(esp, 0), xmm0); 1145 jcc(Assembler::equal, B1_39); 1146 1147 bind(B1_5); 1148 orl(ecx, -64768); 1149 movw(Address(esp, 36), ecx); 1150 1151 bind(B1_6); 1152 fldcw(Address(esp, 36)); 1153 1154 bind(B1_7); 1155 movsd(xmm1, Address(ebp, 8)); 1156 movl(edi, 1); 1157 1158 bind(B1_8); 1159 movl(Address(esp, 12), esi); 1160 movl(esi, Address(esp, 4)); 1161 movl(edx, esi); 1162 movl(Address(esp, 24), edi); 1163 movl(edi, esi); 1164 shrl(edi, 20); 1165 andl(edx, 1048575); 1166 movl(ecx, edi); 1167 orl(edx, 1048576); 1168 negl(ecx); 1169 addl(edi, 13); 1170 movl(Address(esp, 8), ebx); 1171 addl(ecx, 19); 1172 movl(ebx, edx); 1173 movl(Address(esp, 28), ecx); 1174 shrl(ebx); 1175 movl(ecx, edi); 1176 shll(edx); 1177 movl(ecx, Address(esp, 28)); 1178 movl(edi, Address(esp, 0)); 1179 shrl(edi); 1180 orl(edx, edi); 1181 cmpl(esi, 1094713344); 1182 movsd(Address(esp, 16), xmm1); 1183 fld_d(Address(esp, 16)); 1184 cmov32(Assembler::below, edx, ebx); 1185 movl(edi, Address(esp, 24)); 1186 movl(esi, Address(esp, 12)); 1187 lea(ebx, Address(edx, 1)); 1188 andl(ebx, -2); 1189 movl(Address(esp, 16), ebx); 1190 cmpl(eax, 1094713344); 1191 fild_s(Address(esp, 16)); 1192 movl(ebx, Address(esp, 8)); 1193 jcc(Assembler::aboveEqual, B1_10); 1194 1195 bind(B1_9); 1196 fld_d(ExternalAddress(Pi4x3)); //0x54443000UL, 0xbfe921fbUL 1197 fmul(1); 1198 faddp(2); 1199 fld_d(ExternalAddress(8 + Pi4x3)); //0x3b39a000UL, 0x3d373dcbUL 1200 fmul(1); 1201 faddp(2); 1202 fld_d(ExternalAddress(16 + Pi4x3)); //0xe0e68948UL, 0xba845c06UL 1203 fmulp(1); 1204 faddp(1); 1205 jmp(B1_17); 1206 1207 bind(B1_10); 1208 fld_d(ExternalAddress(Pi4x4)); //0x54400000UL, 0xbfe921fbUL 1209 fmul(1); 1210 faddp(2); 1211 fld_d(ExternalAddress(8 + Pi4x4)); //0x1a600000UL, 0xbdc0b461UL 1212 fmul(1); 1213 faddp(2); 1214 fld_d(ExternalAddress(16 + Pi4x4)); //0x2e000000UL, 0xbb93198aUL 1215 fmul(1); 1216 faddp(2); 1217 fld_d(ExternalAddress(24 + Pi4x4)); //0x252049c1UL, 0xb96b839aUL 1218 fmulp(1); 1219 faddp(1); 1220 jmp(B1_17); 1221 1222 bind(B1_11); 1223 movzwl(edx, Address(esp, 38)); 1224 movl(eax, edx); 1225 andl(eax, 768); 1226 cmpl(eax, 768); 1227 jcc(Assembler::equal, B1_40); 1228 1229 bind(B1_12); 1230 orl(edx, -64768); 1231 movw(Address(esp, 36), edx); 1232 1233 bind(B1_13); 1234 fldcw(Address(esp, 36)); 1235 1236 bind(B1_14); 1237 movl(edi, 1); 1238 1239 bind(B1_15); 1240 movsd(xmm0, Address(ebp, 8)); 1241 addl(esp, -32); 1242 andps(xmm0, ExternalAddress(L_2il0floatpacket_0)); //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL 1243 lea(eax, Address(esp, 32)); 1244 movsd(Address(eax, 16), xmm0); 1245 fld_d(Address(eax, 16)); 1246 fstp_x(Address(esp, 0)); 1247 movl(Address(esp, 12), 0); 1248 movl(Address(esp, 16), eax); 1249 call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l()))); 1250 1251 bind(B1_43); 1252 movl(edx, eax); 1253 addl(esp, 32); 1254 1255 bind(B1_16); 1256 fld_d(Address(esp, 0)); 1257 fld_d(Address(esp, 8)); 1258 faddp(1); 1259 1260 bind(B1_17); 1261 movl(eax, ebx); 1262 andl(eax, 3); 1263 cmpl(eax, 3); 1264 jcc(Assembler::notEqual, B1_24); 1265 1266 bind(B1_18); 1267 fld_d(ExternalAddress(ones)); 1268 incl(edx); 1269 fdiv(1); 1270 testb(edx, 2); 1271 fstp_x(Address(esp, 24)); 1272 fld_s(0); 1273 fmul(1); 1274 fld_s(0); 1275 fmul(1); 1276 fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a 1277 fmul(2); 1278 fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa 1279 faddp(1); 1280 fmul(2); 1281 fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3 1282 faddp(1); 1283 fmul(2); 1284 fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d 1285 fmul(3); 1286 fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6 1287 faddp(1); 1288 fmul(3); 1289 fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44 1290 faddp(1); 1291 fmul(3); 1292 fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15 1293 faddp(1); 1294 fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7 1295 faddp(2); 1296 fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b 1297 fmul(3); 1298 fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae 1299 fmul(4); 1300 fld_x(ExternalAddress(108 + GP)); //0x0871, 0x1a2f, 0x64 1301 faddp(2); 1302 fxch(1); 1303 fmul(4); 1304 fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8 1305 faddp(2); 1306 fxch(1); 1307 fmul(4); 1308 fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67 1309 faddp(2); 1310 fxch(1); 1311 fmul(4); 1312 fld_x(ExternalAddress(72 + GP)); //0x8c96, 0x8e0b, 0xeb 1313 faddp(2); 1314 fxch(1); 1315 fmul(4); 1316 fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e 1317 faddp(2); 1318 fxch(1); 1319 fmul(4); 1320 fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79 1321 faddp(2); 1322 fxch(1); 1323 fmul(4); 1324 fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc 1325 faddp(2); 1326 fxch(1); 1327 fmul(4); 1328 fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55 1329 faddp(2); 1330 fxch(1); 1331 fmulp(4); 1332 fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60 1333 faddp(1); 1334 fmul(4); 1335 fmul(5); 1336 fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa 1337 faddp(4); 1338 fxch(3); 1339 fmul(5); 1340 faddp(3); 1341 jcc(Assembler::equal, B1_20); 1342 1343 bind(B1_19); 1344 fld_x(Address(esp, 24)); 1345 fxch(1); 1346 fdivrp(2); 1347 fxch(1); 1348 fmulp(3); 1349 movl(eax, Address(esp, 44)); 1350 xorl(eax, 1); 1351 fxch(2); 1352 fmul(3); 1353 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1354 fmula(2); 1355 fmula(3); 1356 fxch(3); 1357 faddp(2); 1358 fxch(1); 1359 fstp_d(Address(esp, 16)); 1360 fmul(1); 1361 fxch(1); 1362 fmulp(2); 1363 movsd(xmm0, Address(esp, 16)); 1364 faddp(1); 1365 fstp_d(Address(esp, 16)); 1366 movsd(xmm1, Address(esp, 16)); 1367 jmp(B1_21); 1368 1369 bind(B1_20); 1370 fdivrp(1); 1371 fmulp(2); 1372 fxch(1); 1373 fmul(2); 1374 movl(eax, Address(esp, 44)); 1375 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1376 fmula(1); 1377 fmula(3); 1378 fxch(3); 1379 faddp(1); 1380 fstp_d(Address(esp, 16)); 1381 fmul(1); 1382 fld_x(Address(esp, 24)); 1383 fmulp(2); 1384 movsd(xmm0, Address(esp, 16)); 1385 faddp(1); 1386 fstp_d(Address(esp, 16)); 1387 movsd(xmm1, Address(esp, 16)); 1388 1389 bind(B1_21); 1390 testl(edi, edi); 1391 jcc(Assembler::equal, B1_23); 1392 1393 bind(B1_22); 1394 fldcw(Address(esp, 38)); 1395 1396 bind(B1_23); 1397 movl(eax, Address(esp, 40)); 1398 movsd(Address(eax, 0), xmm0); 1399 movsd(Address(eax, 8), xmm1); 1400 addl(esp, 52); 1401 pop(ebx); 1402 pop(edi); 1403 pop(esi); 1404 movl(esp, ebp); 1405 pop(ebp); 1406 ret(0); 1407 1408 bind(B1_24); 1409 testb(ebx, 2); 1410 jcc(Assembler::equal, B1_31); 1411 1412 bind(B1_25); 1413 incl(edx); 1414 fld_s(0); 1415 fmul(1); 1416 testb(edx, 2); 1417 jcc(Assembler::equal, B1_27); 1418 1419 bind(B1_26); 1420 fld_d(ExternalAddress(ones)); 1421 fdiv(2); 1422 fld_s(1); 1423 fmul(2); 1424 fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b 1425 fmul(1); 1426 fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae 1427 fmul(2); 1428 fld_x(ExternalAddress(108 + GP)); //0x67c9, 0xbed3, 0xbf 1429 movl(eax, Address(esp, 44)); 1430 faddp(2); 1431 fxch(1); 1432 fmul(2); 1433 xorl(eax, 1); 1434 fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8 1435 faddp(2); 1436 fxch(1); 1437 fmul(2); 1438 fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67 1439 faddp(2); 1440 fxch(1); 1441 fmul(2); 1442 fld_x(ExternalAddress(72 + GP)); //0xf3ca, 0x8c96, 0x8e 1443 faddp(2); 1444 fxch(1); 1445 fmul(2); 1446 fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e 1447 faddp(2); 1448 fxch(1); 1449 fmul(2); 1450 fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79 1451 faddp(2); 1452 fxch(1); 1453 fmul(2); 1454 fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc 1455 faddp(2); 1456 fxch(1); 1457 fmul(2); 1458 fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55 1459 faddp(2); 1460 fxch(1); 1461 fmulp(2); 1462 fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60 1463 faddp(1); 1464 fmulp(3); 1465 fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa 1466 faddp(1); 1467 fmul(3); 1468 fxch(2); 1469 fmulp(3); 1470 fxch(1); 1471 faddp(2); 1472 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1473 fmula(2); 1474 fmulp(1); 1475 faddp(1); 1476 fstp_d(Address(esp, 16)); 1477 movsd(xmm0, Address(esp, 16)); 1478 jmp(B1_28); 1479 1480 bind(B1_27); 1481 fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a 1482 fmul(1); 1483 fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa 1484 movl(eax, Address(esp, 44)); 1485 faddp(1); 1486 fmul(1); 1487 fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d 1488 fmul(2); 1489 fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6 1490 faddp(1); 1491 fmul(2); 1492 fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44 1493 faddp(1); 1494 fmul(2); 1495 fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15 1496 faddp(1); 1497 fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3 1498 faddp(2); 1499 fxch(1); 1500 fmul(2); 1501 fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7 1502 faddp(1); 1503 fdivrp(1); 1504 fmulp(1); 1505 fmul(1); 1506 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1507 fmula(1); 1508 fmulp(2); 1509 faddp(1); 1510 fstp_d(Address(esp, 16)); 1511 movsd(xmm0, Address(esp, 16)); 1512 1513 bind(B1_28); 1514 testl(edi, edi); 1515 jcc(Assembler::equal, B1_30); 1516 1517 bind(B1_29); 1518 fldcw(Address(esp, 38)); 1519 1520 bind(B1_30); 1521 movl(eax, Address(esp, 40)); 1522 movsd(Address(eax, 0), xmm0); 1523 addl(esp, 52); 1524 pop(ebx); 1525 pop(edi); 1526 pop(esi); 1527 movl(esp, ebp); 1528 pop(ebp); 1529 ret(0); 1530 1531 bind(B1_31); 1532 testb(ebx, 1); 1533 jcc(Assembler::equal, B1_38); 1534 1535 bind(B1_32); 1536 incl(edx); 1537 fld_s(0); 1538 fmul(1); 1539 testb(edx, 2); 1540 jcc(Assembler::equal, B1_34); 1541 1542 bind(B1_33); 1543 fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a 1544 fmul(1); 1545 fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa 1546 movl(eax, Address(esp, 44)); 1547 faddp(1); 1548 fmul(1); 1549 xorl(eax, 1); 1550 fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d 1551 fmul(2); 1552 fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6 1553 faddp(1); 1554 fmul(2); 1555 fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44 1556 faddp(1); 1557 fmul(2); 1558 fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15 1559 faddp(1); 1560 fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3 1561 faddp(2); 1562 fxch(1); 1563 fmul(2); 1564 fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7 1565 faddp(1); 1566 fdivrp(1); 1567 fmulp(1); 1568 fmul(1); 1569 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1570 fmula(1); 1571 fmulp(2); 1572 faddp(1); 1573 fstp_d(Address(esp, 16)); 1574 movsd(xmm0, Address(esp, 16)); 1575 jmp(B1_35); 1576 1577 bind(B1_34); 1578 fld_d(ExternalAddress(ones)); 1579 fdiv(2); 1580 fld_s(1); 1581 fmul(2); 1582 fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b 1583 fmul(1); 1584 fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae 1585 fmul(2); 1586 fld_x(ExternalAddress(108 + GP)); //0x67c9, 0xbed3, 0xbf 1587 movl(eax, Address(esp, 44)); 1588 faddp(2); 1589 fxch(1); 1590 fmul(2); 1591 fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8 1592 faddp(2); 1593 fxch(1); 1594 fmul(2); 1595 fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67 1596 faddp(2); 1597 fxch(1); 1598 fmul(2); 1599 fld_x(ExternalAddress(72 + GP)); //0xf3ca, 0x8c96, 0x8e 1600 faddp(2); 1601 fxch(1); 1602 fmul(2); 1603 fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e 1604 faddp(2); 1605 fxch(1); 1606 fmul(2); 1607 fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79 1608 faddp(2); 1609 fxch(1); 1610 fmul(2); 1611 fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc 1612 faddp(2); 1613 fxch(1); 1614 fmul(2); 1615 fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55 1616 faddp(2); 1617 fxch(1); 1618 fmulp(2); 1619 fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60 1620 faddp(1); 1621 fmulp(3); 1622 fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa 1623 faddp(1); 1624 fmul(3); 1625 fxch(2); 1626 fmulp(3); 1627 fxch(1); 1628 faddp(2); 1629 fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8)); 1630 fmula(2); 1631 fmulp(1); 1632 faddp(1); 1633 fstp_d(Address(esp, 16)); 1634 movsd(xmm0, Address(esp, 16)); 1635 1636 bind(B1_35); 1637 testl(edi, edi); 1638 jcc(Assembler::equal, B1_37); 1639 1640 bind(B1_36); 1641 fldcw(Address(esp, 38)); 1642 1643 bind(B1_37); 1644 movl(eax, Address(esp, 40)); 1645 movsd(Address(eax, 8), xmm0); 1646 addl(esp, 52); 1647 pop(ebx); 1648 pop(edi); 1649 pop(esi); 1650 mov(esp, ebp); 1651 pop(ebp); 1652 ret(0); 1653 1654 bind(B1_38); 1655 fstp_d(0); 1656 addl(esp, 52); 1657 pop(ebx); 1658 pop(edi); 1659 pop(esi); 1660 mov(esp, ebp); 1661 pop(ebp); 1662 ret(0); 1663 1664 bind(B1_39); 1665 xorl(edi, edi); 1666 jmp(B1_8); 1667 1668 bind(B1_40); 1669 xorl(edi, edi); 1670 jmp(B1_15); 1671 } 1672 1673 ALIGNED_(16) juint _static_const_table_tan[] = 1674 { 1675 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL, 1676 0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1677 0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL, 1678 0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1679 0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL, 1680 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL, 1681 0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1682 0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 1683 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL, 1684 0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL, 1685 0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL, 1686 0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL, 1687 0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL, 1688 0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL, 1689 0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL, 1690 0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL, 1691 0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL, 1692 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL, 1693 0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL, 1694 0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL, 1695 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL, 1696 0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL, 1697 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL, 1698 0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL, 1699 0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL, 1700 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL, 1701 0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL, 1702 0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 1703 0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL, 1704 0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL, 1705 0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 1706 0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL, 1707 0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 1708 0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL, 1709 0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1710 0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL, 1711 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL, 1712 0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL, 1713 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL, 1714 0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL, 1715 0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL, 1716 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL, 1717 0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL, 1718 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1719 0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL, 1720 0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL, 1721 0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 1722 0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL, 1723 0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 1724 0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 1725 0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL, 1726 0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 1727 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL, 1728 0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL, 1729 0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL, 1730 0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL, 1731 0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL, 1732 0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL, 1733 0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL, 1734 0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL, 1735 0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL, 1736 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL, 1737 0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL, 1738 0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL, 1739 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL, 1740 0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL, 1741 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL, 1742 0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL, 1743 0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL, 1744 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL, 1745 0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL, 1746 0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 1747 0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL, 1748 0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL, 1749 0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 1750 0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL, 1751 0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 1752 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 1753 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1754 0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL, 1755 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL, 1756 0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL, 1757 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL, 1758 0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL, 1759 0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL, 1760 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL, 1761 0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL, 1762 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 1763 0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 1764 0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL, 1765 0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 1766 0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL, 1767 0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 1768 0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 1769 0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL, 1770 0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 1771 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL, 1772 0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL, 1773 0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL, 1774 0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL, 1775 0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL, 1776 0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL, 1777 0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL, 1778 0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL, 1779 0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL, 1780 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL, 1781 0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL, 1782 0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL, 1783 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL, 1784 0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL, 1785 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL, 1786 0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL, 1787 0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL, 1788 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL, 1789 0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL, 1790 0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 1791 0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL, 1792 0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL, 1793 0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 1794 0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL, 1795 0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 1796 0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL, 1797 0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 1798 0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL, 1799 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL, 1800 0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL, 1801 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL, 1802 0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL, 1803 0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL, 1804 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL, 1805 0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL, 1806 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 1807 0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL, 1808 0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL, 1809 0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 1810 0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL, 1811 0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 1812 0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 1813 0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL, 1814 0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 1815 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL, 1816 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL, 1817 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1818 0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL, 1819 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL, 1820 0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL, 1821 0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL, 1822 0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1823 0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL, 1824 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL, 1825 0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL, 1826 0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL, 1827 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL, 1828 0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL, 1829 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL, 1830 0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL, 1831 0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL, 1832 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL, 1833 0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL, 1834 0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 1835 0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL, 1836 0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL, 1837 0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 1838 0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL, 1839 0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 1840 0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL, 1841 0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 1842 0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL, 1843 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL, 1844 0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL, 1845 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL, 1846 0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL, 1847 0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL, 1848 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL, 1849 0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL, 1850 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 1851 0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 1852 0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL, 1853 0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 1854 0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL, 1855 0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 1856 0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 1857 0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL, 1858 0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 1859 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL, 1860 0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL, 1861 0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL, 1862 0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL, 1863 0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL, 1864 0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL, 1865 0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL, 1866 0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL, 1867 0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL, 1868 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL, 1869 0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL, 1870 0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL, 1871 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL, 1872 0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL, 1873 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL, 1874 0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL, 1875 0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL, 1876 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL, 1877 0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL, 1878 0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 1879 0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL, 1880 0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL, 1881 0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 1882 0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL, 1883 0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 1884 0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL, 1885 0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 1886 0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL, 1887 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL, 1888 0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL, 1889 0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL, 1890 0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL, 1891 0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL, 1892 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL, 1893 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL, 1894 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1895 0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 1896 0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL, 1897 0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 1898 0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL, 1899 0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 1900 0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL, 1901 0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL, 1902 0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 1903 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL, 1904 0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL, 1905 0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL, 1906 0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL, 1907 0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL, 1908 0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL, 1909 0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL, 1910 0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL, 1911 0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL, 1912 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL, 1913 0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL, 1914 0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL, 1915 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL, 1916 0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL, 1917 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL, 1918 0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL, 1919 0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL, 1920 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL, 1921 0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL, 1922 0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 1923 0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL, 1924 0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL, 1925 0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 1926 0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL, 1927 0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 1928 0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL, 1929 0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1930 0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL, 1931 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL, 1932 0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL, 1933 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL, 1934 0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL, 1935 0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL, 1936 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL, 1937 0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL, 1938 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 1939 0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL, 1940 0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL, 1941 0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 1942 0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL, 1943 0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 1944 0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 1945 0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL, 1946 0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 1947 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL, 1948 0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL, 1949 0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL, 1950 0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL, 1951 0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL, 1952 0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL, 1953 0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL, 1954 0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL, 1955 0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL, 1956 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL, 1957 0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL, 1958 0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL, 1959 0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL, 1960 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL, 1961 0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL, 1962 0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 1963 0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL, 1964 0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL, 1965 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL, 1966 0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL, 1967 0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL, 1968 0x40300000UL, 0x00000000UL, 0x3ff00000UL 1969 }; 1970 1971 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) { 1972 1973 Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2; 1974 Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2; 1975 Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2; 1976 Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start; 1977 1978 assert_different_registers(tmp, eax, ecx, edx); 1979 1980 address static_const_table_tan = (address)_static_const_table_tan; 1981 1982 bind(start); 1983 subl(rsp, 120); 1984 movl(Address(rsp, 56), tmp); 1985 lea(tmp, ExternalAddress(static_const_table_tan)); 1986 movsd(xmm0, Address(rsp, 128)); 1987 pextrw(eax, xmm0, 3); 1988 andl(eax, 32767); 1989 subl(eax, 14368); 1990 cmpl(eax, 2216); 1991 jcc(Assembler::above, L_2TAG_PACKET_0_0_2); 1992 movdqu(xmm5, Address(tmp, 5840)); 1993 movdqu(xmm6, Address(tmp, 5856)); 1994 unpcklpd(xmm0, xmm0); 1995 movdqu(xmm4, Address(tmp, 5712)); 1996 andpd(xmm4, xmm0); 1997 movdqu(xmm1, Address(tmp, 5632)); 1998 mulpd(xmm1, xmm0); 1999 por(xmm5, xmm4); 2000 addpd(xmm1, xmm5); 2001 movdqu(xmm7, xmm1); 2002 unpckhpd(xmm7, xmm7); 2003 cvttsd2sil(edx, xmm7); 2004 cvttpd2dq(xmm1, xmm1); 2005 cvtdq2pd(xmm1, xmm1); 2006 mulpd(xmm1, xmm6); 2007 movdqu(xmm3, Address(tmp, 5664)); 2008 movsd(xmm5, Address(tmp, 5728)); 2009 addl(edx, 469248); 2010 movdqu(xmm4, Address(tmp, 5680)); 2011 mulpd(xmm3, xmm1); 2012 andl(edx, 31); 2013 mulsd(xmm5, xmm1); 2014 movl(ecx, edx); 2015 mulpd(xmm4, xmm1); 2016 shll(ecx, 1); 2017 subpd(xmm0, xmm3); 2018 mulpd(xmm1, Address(tmp, 5696)); 2019 addl(edx, ecx); 2020 shll(ecx, 2); 2021 addl(edx, ecx); 2022 addsd(xmm5, xmm0); 2023 movdqu(xmm2, xmm0); 2024 subpd(xmm0, xmm4); 2025 movsd(xmm6, Address(tmp, 5744)); 2026 shll(edx, 4); 2027 lea(eax, Address(tmp, 0)); 2028 andpd(xmm5, Address(tmp, 5776)); 2029 movdqu(xmm3, xmm0); 2030 addl(eax, edx); 2031 subpd(xmm2, xmm0); 2032 unpckhpd(xmm0, xmm0); 2033 divsd(xmm6, xmm5); 2034 subpd(xmm2, xmm4); 2035 movdqu(xmm7, Address(eax, 16)); 2036 subsd(xmm3, xmm5); 2037 mulpd(xmm7, xmm0); 2038 subpd(xmm2, xmm1); 2039 movdqu(xmm1, Address(eax, 48)); 2040 mulpd(xmm1, xmm0); 2041 movdqu(xmm4, Address(eax, 96)); 2042 mulpd(xmm4, xmm0); 2043 addsd(xmm2, xmm3); 2044 movdqu(xmm3, xmm0); 2045 mulpd(xmm0, xmm0); 2046 addpd(xmm7, Address(eax, 0)); 2047 addpd(xmm1, Address(eax, 32)); 2048 mulpd(xmm1, xmm0); 2049 addpd(xmm4, Address(eax, 80)); 2050 addpd(xmm7, xmm1); 2051 movdqu(xmm1, Address(eax, 112)); 2052 mulpd(xmm1, xmm0); 2053 mulpd(xmm0, xmm0); 2054 addpd(xmm4, xmm1); 2055 movdqu(xmm1, Address(eax, 64)); 2056 mulpd(xmm1, xmm0); 2057 addpd(xmm7, xmm1); 2058 movdqu(xmm1, xmm3); 2059 mulpd(xmm3, xmm0); 2060 mulsd(xmm0, xmm0); 2061 mulpd(xmm1, Address(eax, 144)); 2062 mulpd(xmm4, xmm3); 2063 movdqu(xmm3, xmm1); 2064 addpd(xmm7, xmm4); 2065 movdqu(xmm4, xmm1); 2066 mulsd(xmm0, xmm7); 2067 unpckhpd(xmm7, xmm7); 2068 addsd(xmm0, xmm7); 2069 unpckhpd(xmm1, xmm1); 2070 addsd(xmm3, xmm1); 2071 subsd(xmm4, xmm3); 2072 addsd(xmm1, xmm4); 2073 movdqu(xmm4, xmm2); 2074 movsd(xmm7, Address(eax, 144)); 2075 unpckhpd(xmm2, xmm2); 2076 addsd(xmm7, Address(eax, 152)); 2077 mulsd(xmm7, xmm2); 2078 addsd(xmm7, Address(eax, 136)); 2079 addsd(xmm7, xmm1); 2080 addsd(xmm0, xmm7); 2081 movsd(xmm7, Address(tmp, 5744)); 2082 mulsd(xmm4, xmm6); 2083 movsd(xmm2, Address(eax, 168)); 2084 andpd(xmm2, xmm6); 2085 mulsd(xmm5, xmm2); 2086 mulsd(xmm6, Address(eax, 160)); 2087 subsd(xmm7, xmm5); 2088 subsd(xmm2, Address(eax, 128)); 2089 subsd(xmm7, xmm4); 2090 mulsd(xmm7, xmm6); 2091 movdqu(xmm4, xmm3); 2092 subsd(xmm3, xmm2); 2093 addsd(xmm2, xmm3); 2094 subsd(xmm4, xmm2); 2095 addsd(xmm0, xmm4); 2096 subsd(xmm0, xmm7); 2097 addsd(xmm0, xmm3); 2098 movsd(Address(rsp, 0), xmm0); 2099 fld_d(Address(rsp, 0)); 2100 jmp(L_2TAG_PACKET_1_0_2); 2101 2102 bind(L_2TAG_PACKET_0_0_2); 2103 jcc(Assembler::greater, L_2TAG_PACKET_2_0_2); 2104 shrl(eax, 4); 2105 cmpl(eax, 268434558); 2106 jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2); 2107 movdqu(xmm3, xmm0); 2108 mulsd(xmm3, Address(tmp, 5808)); 2109 2110 bind(L_2TAG_PACKET_3_0_2); 2111 movsd(xmm3, Address(tmp, 5792)); 2112 mulsd(xmm3, xmm0); 2113 addsd(xmm3, xmm0); 2114 mulsd(xmm3, Address(tmp, 5808)); 2115 movsd(Address(rsp, 0), xmm3); 2116 fld_d(Address(rsp, 0)); 2117 jmp(L_2TAG_PACKET_1_0_2); 2118 2119 bind(L_2TAG_PACKET_2_0_2); 2120 movq(xmm7, Address(tmp, 5712)); 2121 andpd(xmm7, xmm0); 2122 xorpd(xmm7, xmm0); 2123 ucomisd(xmm7, Address(tmp, 5760)); 2124 jcc(Assembler::equal, L_2TAG_PACKET_4_0_2); 2125 subl(rsp, 32); 2126 movsd(Address(rsp, 0), xmm0); 2127 lea(eax, Address(rsp, 40)); 2128 movl(Address(rsp, 8), eax); 2129 movl(eax, 2); 2130 movl(Address(rsp, 12), eax); 2131 call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_tan_cot_huge()))); 2132 addl(rsp, 32); 2133 fld_d(Address(rsp, 8)); 2134 jmp(L_2TAG_PACKET_1_0_2); 2135 2136 bind(L_2TAG_PACKET_4_0_2); 2137 movq(Address(rsp, 0), xmm0); 2138 fld_d(Address(rsp, 0)); 2139 fsub_d(Address(rsp, 0)); 2140 2141 bind(L_2TAG_PACKET_1_0_2); 2142 movl(tmp, Address(rsp, 56)); 2143 } 2144 #endif