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 - LOG10() 41 // --------------------- 42 // 43 // Let x=2^k * mx, mx in [1,2) 44 // 45 // Get B~1/mx based on the output of rcpss instruction (B0) 46 // B = int((B0*LH*2^7+0.5))/2^7 47 // LH is a short approximation for log10(e) 48 // 49 // Reduced argument: r=B*mx-LH (computed accurately in high and low parts) 50 // 51 // Result: k*log10(2) - log(B) + p(r) 52 // p(r) is a degree 7 polynomial 53 // -log(B) read from data table (high, low parts) 54 // Result is formed from high and low parts 55 // 56 // Special cases: 57 // log10(0) = -INF with divide-by-zero exception raised 58 // log10(1) = +0 59 // log10(x) = NaN with invalid exception raised if x < -0, including -INF 60 // log10(+INF) = +INF 61 // 62 /******************************************************************************/ 63 64 #ifdef _LP64 65 // The 64 bit code is at most SSE2 compliant 66 ALIGNED_(16) juint _HIGHSIGMASK_log10[] = 67 { 68 0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xffffe000UL 69 }; 70 71 ALIGNED_(16) juint _LOG10_E[] = 72 { 73 0x00000000UL, 0x3fdbc000UL, 0xbf2e4108UL, 0x3f5a7a6cUL 74 }; 75 76 ALIGNED_(16) juint _L_tbl_log10[] = 77 { 78 0x509f7800UL, 0x3fd34413UL, 0x1f12b358UL, 0x3d1fef31UL, 0x80333400UL, 79 0x3fd32418UL, 0xc671d9d0UL, 0xbcf542bfUL, 0x51195000UL, 0x3fd30442UL, 80 0x78a4b0c3UL, 0x3d18216aUL, 0x6fc79400UL, 0x3fd2e490UL, 0x80fa389dUL, 81 0xbc902869UL, 0x89d04000UL, 0x3fd2c502UL, 0x75c2f564UL, 0x3d040754UL, 82 0x4ddd1c00UL, 0x3fd2a598UL, 0xd219b2c3UL, 0xbcfa1d84UL, 0x6baa7c00UL, 83 0x3fd28651UL, 0xfd9abec1UL, 0x3d1be6d3UL, 0x94028800UL, 0x3fd2672dUL, 84 0xe289a455UL, 0xbd1ede5eUL, 0x78b86400UL, 0x3fd2482cUL, 0x6734d179UL, 85 0x3d1fe79bUL, 0xcca3c800UL, 0x3fd2294dUL, 0x981a40b8UL, 0xbced34eaUL, 86 0x439c5000UL, 0x3fd20a91UL, 0xcc392737UL, 0xbd1a9cc3UL, 0x92752c00UL, 87 0x3fd1ebf6UL, 0x03c9afe7UL, 0x3d1e98f8UL, 0x6ef8dc00UL, 0x3fd1cd7dUL, 88 0x71dae7f4UL, 0x3d08a86cUL, 0x8fe4dc00UL, 0x3fd1af25UL, 0xee9185a1UL, 89 0xbcff3412UL, 0xace59400UL, 0x3fd190eeUL, 0xc2cab353UL, 0x3cf17ed9UL, 90 0x7e925000UL, 0x3fd172d8UL, 0x6952c1b2UL, 0x3cf1521cUL, 0xbe694400UL, 91 0x3fd154e2UL, 0xcacb79caUL, 0xbd0bdc78UL, 0x26cbac00UL, 0x3fd1370dUL, 92 0xf71f4de1UL, 0xbd01f8beUL, 0x72fa0800UL, 0x3fd11957UL, 0x55bf910bUL, 93 0x3c946e2bUL, 0x5f106000UL, 0x3fd0fbc1UL, 0x39e639c1UL, 0x3d14a84bUL, 94 0xa802a800UL, 0x3fd0de4aUL, 0xd3f31d5dUL, 0xbd178385UL, 0x0b992000UL, 95 0x3fd0c0f3UL, 0x3843106fUL, 0xbd1f602fUL, 0x486ce800UL, 0x3fd0a3baUL, 96 0x8819497cUL, 0x3cef987aUL, 0x1de49400UL, 0x3fd086a0UL, 0x1caa0467UL, 97 0x3d0faec7UL, 0x4c30cc00UL, 0x3fd069a4UL, 0xa4424372UL, 0xbd1618fcUL, 98 0x94490000UL, 0x3fd04cc6UL, 0x946517d2UL, 0xbd18384bUL, 0xb7e84000UL, 99 0x3fd03006UL, 0xe0109c37UL, 0xbd19a6acUL, 0x798a0c00UL, 0x3fd01364UL, 100 0x5121e864UL, 0xbd164cf7UL, 0x38ce8000UL, 0x3fcfedbfUL, 0x46214d1aUL, 101 0xbcbbc402UL, 0xc8e62000UL, 0x3fcfb4efUL, 0xdab93203UL, 0x3d1e0176UL, 102 0x2cb02800UL, 0x3fcf7c5aUL, 0x2a2ea8e4UL, 0xbcfec86aUL, 0xeeeaa000UL, 103 0x3fcf43fdUL, 0xc18e49a4UL, 0x3cf110a8UL, 0x9bb6e800UL, 0x3fcf0bdaUL, 104 0x923cc9c0UL, 0xbd15ce99UL, 0xc093f000UL, 0x3fced3efUL, 0x4d4b51e9UL, 105 0x3d1a04c7UL, 0xec58f800UL, 0x3fce9c3cUL, 0x163cad59UL, 0x3cac8260UL, 106 0x9a907000UL, 0x3fce2d7dUL, 0x3fa93646UL, 0x3ce4a1c0UL, 0x37311000UL, 107 0x3fcdbf99UL, 0x32abd1fdUL, 0x3d07ea9dUL, 0x6744b800UL, 0x3fcd528cUL, 108 0x4dcbdfd4UL, 0xbd1b08e2UL, 0xe36de800UL, 0x3fcce653UL, 0x0b7b7f7fUL, 109 0xbd1b8f03UL, 0x77506800UL, 0x3fcc7aecUL, 0xa821c9fbUL, 0x3d13c163UL, 110 0x00ff8800UL, 0x3fcc1053UL, 0x536bca76UL, 0xbd074ee5UL, 0x70719800UL, 111 0x3fcba684UL, 0xd7da9b6bUL, 0xbd1fbf16UL, 0xc6f8d800UL, 0x3fcb3d7dUL, 112 0xe2220bb3UL, 0x3d1a295dUL, 0x16c15800UL, 0x3fcad53cUL, 0xe724911eUL, 113 0xbcf55822UL, 0x82533800UL, 0x3fca6dbcUL, 0x6d982371UL, 0x3cac567cUL, 114 0x3c19e800UL, 0x3fca06fcUL, 0x84d17d80UL, 0x3d1da204UL, 0x85ef8000UL, 115 0x3fc9a0f8UL, 0x54466a6aUL, 0xbd002204UL, 0xb0ac2000UL, 0x3fc93baeUL, 116 0xd601fd65UL, 0x3d18840cUL, 0x1bb9b000UL, 0x3fc8d71cUL, 0x7bf58766UL, 117 0xbd14f897UL, 0x34aae800UL, 0x3fc8733eUL, 0x3af6ac24UL, 0xbd0f5c45UL, 118 0x76d68000UL, 0x3fc81012UL, 0x4303e1a1UL, 0xbd1f9a80UL, 0x6af57800UL, 119 0x3fc7ad96UL, 0x43fbcb46UL, 0x3cf4c33eUL, 0xa6c51000UL, 0x3fc74bc7UL, 120 0x70f0eac5UL, 0xbd192e3bUL, 0xccab9800UL, 0x3fc6eaa3UL, 0xc0093dfeUL, 121 0xbd0faf15UL, 0x8b60b800UL, 0x3fc68a28UL, 0xde78d5fdUL, 0xbc9ea4eeUL, 122 0x9d987000UL, 0x3fc62a53UL, 0x962bea6eUL, 0xbd194084UL, 0xc9b0e800UL, 123 0x3fc5cb22UL, 0x888dd999UL, 0x3d1fe201UL, 0xe1634800UL, 0x3fc56c93UL, 124 0x16ada7adUL, 0x3d1b1188UL, 0xc176c000UL, 0x3fc50ea4UL, 0x4159b5b5UL, 125 0xbcf09c08UL, 0x51766000UL, 0x3fc4b153UL, 0x84393d23UL, 0xbcf6a89cUL, 126 0x83695000UL, 0x3fc4549dUL, 0x9f0b8bbbUL, 0x3d1c4b8cUL, 0x538d5800UL, 127 0x3fc3f881UL, 0xf49df747UL, 0x3cf89b99UL, 0xc8138000UL, 0x3fc39cfcUL, 128 0xd503b834UL, 0xbd13b99fUL, 0xf0df0800UL, 0x3fc3420dUL, 0xf011b386UL, 129 0xbd05d8beUL, 0xe7466800UL, 0x3fc2e7b2UL, 0xf39c7bc2UL, 0xbd1bb94eUL, 130 0xcdd62800UL, 0x3fc28de9UL, 0x05e6d69bUL, 0xbd10ed05UL, 0xd015d800UL, 131 0x3fc234b0UL, 0xe29b6c9dUL, 0xbd1ff967UL, 0x224ea800UL, 0x3fc1dc06UL, 132 0x727711fcUL, 0xbcffb30dUL, 0x01540000UL, 0x3fc183e8UL, 0x39786c5aUL, 133 0x3cc23f57UL, 0xb24d9800UL, 0x3fc12c54UL, 0xc905a342UL, 0x3d003a1dUL, 134 0x82835800UL, 0x3fc0d54aUL, 0x9b9920c0UL, 0x3d03b25aUL, 0xc72ac000UL, 135 0x3fc07ec7UL, 0x46f26a24UL, 0x3cf0fa41UL, 0xdd35d800UL, 0x3fc028caUL, 136 0x41d9d6dcUL, 0x3d034a65UL, 0x52474000UL, 0x3fbfa6a4UL, 0x44f66449UL, 137 0x3d19cad3UL, 0x2da3d000UL, 0x3fbefcb8UL, 0x67832999UL, 0x3d18400fUL, 138 0x32a10000UL, 0x3fbe53ceUL, 0x9c0e3b1aUL, 0xbcff62fdUL, 0x556b7000UL, 139 0x3fbdabe3UL, 0x02976913UL, 0xbcf8243bUL, 0x97e88000UL, 0x3fbd04f4UL, 140 0xec793797UL, 0x3d1c0578UL, 0x09647000UL, 0x3fbc5effUL, 0x05fc0565UL, 141 0xbd1d799eUL, 0xc6426000UL, 0x3fbbb9ffUL, 0x4625f5edUL, 0x3d1f5723UL, 142 0xf7afd000UL, 0x3fbb15f3UL, 0xdd5aae61UL, 0xbd1a7e1eUL, 0xd358b000UL, 143 0x3fba72d8UL, 0x3314e4d3UL, 0x3d17bc91UL, 0x9b1f5000UL, 0x3fb9d0abUL, 144 0x9a4d514bUL, 0x3cf18c9bUL, 0x9cd4e000UL, 0x3fb92f69UL, 0x7e4496abUL, 145 0x3cf1f96dUL, 0x31f4f000UL, 0x3fb88f10UL, 0xf56479e7UL, 0x3d165818UL, 146 0xbf628000UL, 0x3fb7ef9cUL, 0x26bf486dUL, 0xbd1113a6UL, 0xb526b000UL, 147 0x3fb7510cUL, 0x1a1c3384UL, 0x3ca9898dUL, 0x8e31e000UL, 0x3fb6b35dUL, 148 0xb3875361UL, 0xbd0661acUL, 0xd01de000UL, 0x3fb6168cUL, 0x2a7cacfaUL, 149 0xbd1bdf10UL, 0x0af23000UL, 0x3fb57a98UL, 0xff868816UL, 0x3cf046d0UL, 150 0xd8ea0000UL, 0x3fb4df7cUL, 0x1515fbe7UL, 0xbd1fd529UL, 0xde3b2000UL, 151 0x3fb44538UL, 0x6e59a132UL, 0x3d1faeeeUL, 0xc8df9000UL, 0x3fb3abc9UL, 152 0xf1322361UL, 0xbd198807UL, 0x505f1000UL, 0x3fb3132dUL, 0x0888e6abUL, 153 0x3d1e5380UL, 0x359bd000UL, 0x3fb27b61UL, 0xdfbcbb22UL, 0xbcfe2724UL, 154 0x429ee000UL, 0x3fb1e463UL, 0x6eb4c58cUL, 0xbcfe4dd6UL, 0x4a673000UL, 155 0x3fb14e31UL, 0x4ce1ac9bUL, 0x3d1ba691UL, 0x28b96000UL, 0x3fb0b8c9UL, 156 0x8c7813b8UL, 0xbd0b3872UL, 0xc1f08000UL, 0x3fb02428UL, 0xc2bc8c2cUL, 157 0x3cb5ea6bUL, 0x05a1a000UL, 0x3faf209cUL, 0x72e8f18eUL, 0xbce8df84UL, 158 0xc0b5e000UL, 0x3fadfa6dUL, 0x9fdef436UL, 0x3d087364UL, 0xaf416000UL, 159 0x3facd5c2UL, 0x1068c3a9UL, 0x3d0827e7UL, 0xdb356000UL, 0x3fabb296UL, 160 0x120a34d3UL, 0x3d101a9fUL, 0x5dfea000UL, 0x3faa90e6UL, 0xdaded264UL, 161 0xbd14c392UL, 0x6034c000UL, 0x3fa970adUL, 0x1c9d06a9UL, 0xbd1b705eUL, 162 0x194c6000UL, 0x3fa851e8UL, 0x83996ad9UL, 0xbd0117bcUL, 0xcf4ac000UL, 163 0x3fa73492UL, 0xb1a94a62UL, 0xbca5ea42UL, 0xd67b4000UL, 0x3fa618a9UL, 164 0x75aed8caUL, 0xbd07119bUL, 0x9126c000UL, 0x3fa4fe29UL, 0x5291d533UL, 165 0x3d12658fUL, 0x6f4d4000UL, 0x3fa3e50eUL, 0xcd2c5cd9UL, 0x3d1d5c70UL, 166 0xee608000UL, 0x3fa2cd54UL, 0xd1008489UL, 0x3d1a4802UL, 0x9900e000UL, 167 0x3fa1b6f9UL, 0x54fb5598UL, 0xbd16593fUL, 0x06bb6000UL, 0x3fa0a1f9UL, 168 0x64ef57b4UL, 0xbd17636bUL, 0xb7940000UL, 0x3f9f1c9fUL, 0xee6a4737UL, 169 0x3cb5d479UL, 0x91aa0000UL, 0x3f9cf7f5UL, 0x3a16373cUL, 0x3d087114UL, 170 0x156b8000UL, 0x3f9ad5edUL, 0x836c554aUL, 0x3c6900b0UL, 0xd4764000UL, 171 0x3f98b67fUL, 0xed12f17bUL, 0xbcffc974UL, 0x77dec000UL, 0x3f9699a7UL, 172 0x232ce7eaUL, 0x3d1e35bbUL, 0xbfbf4000UL, 0x3f947f5dUL, 0xd84ffa6eUL, 173 0x3d0e0a49UL, 0x82c7c000UL, 0x3f92679cUL, 0x8d170e90UL, 0xbd14d9f2UL, 174 0xadd20000UL, 0x3f90525dUL, 0x86d9f88eUL, 0x3cdeb986UL, 0x86f10000UL, 175 0x3f8c7f36UL, 0xb9e0a517UL, 0x3ce29faaUL, 0xb75c8000UL, 0x3f885e9eUL, 176 0x542568cbUL, 0xbd1f7bdbUL, 0x46b30000UL, 0x3f8442e8UL, 0xb954e7d9UL, 177 0x3d1e5287UL, 0xb7e60000UL, 0x3f802c07UL, 0x22da0b17UL, 0xbd19fb27UL, 178 0x6c8b0000UL, 0x3f7833e3UL, 0x821271efUL, 0xbd190f96UL, 0x29910000UL, 179 0x3f701936UL, 0xbc3491a5UL, 0xbd1bcf45UL, 0x354a0000UL, 0x3f600fe3UL, 180 0xc0ff520aUL, 0xbd19d71cUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 181 0x00000000UL 182 }; 183 184 ALIGNED_(16) juint _log2_log10[] = 185 { 186 0x509f7800UL, 0x3f934413UL, 0x1f12b358UL, 0x3cdfef31UL 187 }; 188 189 ALIGNED_(16) juint _coeff_log10[] = 190 { 191 0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL, 0xc0089309UL, 0x385593b1UL, 192 0xc025c917UL, 0xdc963467UL, 0x3ffc6a02UL, 0x7f9d3aa1UL, 0x4016ab9fUL, 193 0xdc77b115UL, 0xbff27af2UL 194 }; 195 196 // Registers: 197 // input: xmm0 198 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7 199 // rax, rdx, rcx, tmp - r11 200 201 // Code generated by Intel C compiler for LIBM library 202 203 void MacroAssembler::fast_log10(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r11) { 204 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; 205 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; 206 Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, B1_2, B1_3, B1_4, B1_5, start; 207 208 assert_different_registers(r11, eax, ecx, edx); 209 210 address HIGHSIGMASK = (address)_HIGHSIGMASK_log10; 211 address LOG10_E = (address)_LOG10_E; 212 address L_tbl = (address)_L_tbl_log10; 213 address log2 = (address)_log2_log10; 214 address coeff = (address)_coeff_log10; 215 216 bind(start); 217 subq(rsp, 24); 218 movsd(Address(rsp, 0), xmm0); 219 220 bind(B1_2); 221 xorpd(xmm2, xmm2); 222 movl(eax, 16368); 223 pinsrw(xmm2, eax, 3); 224 movl(ecx, 1054736384); 225 movdl(xmm7, ecx); 226 xorpd(xmm3, xmm3); 227 movl(edx, 30704); 228 pinsrw(xmm3, edx, 3); 229 movdqu(xmm1, xmm0); 230 movl(edx, 32768); 231 movdl(xmm4, edx); 232 movdqu(xmm5, ExternalAddress(HIGHSIGMASK)); //0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xffffe000UL 233 pextrw(eax, xmm0, 3); 234 por(xmm0, xmm2); 235 movl(ecx, 16352); 236 psrlq(xmm0, 27); 237 movdqu(xmm2, ExternalAddress(LOG10_E)); //0x00000000UL, 0x3fdbc000UL, 0xbf2e4108UL, 0x3f5a7a6cUL 238 psrld(xmm0, 2); 239 rcpps(xmm0, xmm0); 240 psllq(xmm1, 12); 241 pshufd(xmm6, xmm5, 78); 242 psrlq(xmm1, 12); 243 subl(eax, 16); 244 cmpl(eax, 32736); 245 jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2); 246 247 bind(L_2TAG_PACKET_1_0_2); 248 mulss(xmm0, xmm7); 249 por(xmm1, xmm3); 250 lea(r11, ExternalAddress(L_tbl)); 251 andpd(xmm5, xmm1); 252 paddd(xmm0, xmm4); 253 subsd(xmm1, xmm5); 254 movdl(edx, xmm0); 255 psllq(xmm0, 29); 256 andpd(xmm0, xmm6); 257 andl(eax, 32752); 258 subl(eax, ecx); 259 cvtsi2sdl(xmm7, eax); 260 mulpd(xmm5, xmm0); 261 mulsd(xmm1, xmm0); 262 movq(xmm6, ExternalAddress(log2)); //0x509f7800UL, 0x3f934413UL, 0x1f12b358UL, 0x3cdfef31UL 263 movdqu(xmm3, ExternalAddress(coeff)); //0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL, 0xc0089309UL 264 subsd(xmm5, xmm2); 265 andl(edx, 16711680); 266 shrl(edx, 12); 267 movdqu(xmm0, Address(r11, rdx, Address::times_1, -1504)); 268 movdqu(xmm4, ExternalAddress(16 + coeff)); //0x385593b1UL, 0xc025c917UL, 0xdc963467UL, 0x3ffc6a02UL 269 addsd(xmm1, xmm5); 270 movdqu(xmm2, ExternalAddress(32 + coeff)); //0x7f9d3aa1UL, 0x4016ab9fUL, 0xdc77b115UL, 0xbff27af2UL 271 mulsd(xmm6, xmm7); 272 pshufd(xmm5, xmm1, 68); 273 mulsd(xmm7, ExternalAddress(8 + log2)); //0x1f12b358UL, 0x3cdfef31UL 274 mulsd(xmm3, xmm1); 275 addsd(xmm0, xmm6); 276 mulpd(xmm4, xmm5); 277 movq(xmm6, ExternalAddress(8 + LOG10_E)); //0xbf2e4108UL, 0x3f5a7a6cUL 278 mulpd(xmm5, xmm5); 279 addpd(xmm4, xmm2); 280 mulpd(xmm3, xmm5); 281 pshufd(xmm2, xmm0, 228); 282 addsd(xmm0, xmm1); 283 mulsd(xmm4, xmm1); 284 subsd(xmm2, xmm0); 285 mulsd(xmm6, xmm1); 286 addsd(xmm1, xmm2); 287 pshufd(xmm2, xmm0, 238); 288 mulsd(xmm5, xmm5); 289 addsd(xmm7, xmm2); 290 addsd(xmm1, xmm6); 291 addpd(xmm4, xmm3); 292 addsd(xmm1, xmm7); 293 mulpd(xmm4, xmm5); 294 addsd(xmm1, xmm4); 295 pshufd(xmm5, xmm4, 238); 296 addsd(xmm1, xmm5); 297 addsd(xmm0, xmm1); 298 jmp(B1_5); 299 300 bind(L_2TAG_PACKET_0_0_2); 301 movq(xmm0, Address(rsp, 0)); 302 movq(xmm1, Address(rsp, 0)); 303 addl(eax, 16); 304 cmpl(eax, 32768); 305 jcc(Assembler::aboveEqual, L_2TAG_PACKET_2_0_2); 306 cmpl(eax, 16); 307 jcc(Assembler::below, L_2TAG_PACKET_3_0_2); 308 309 bind(L_2TAG_PACKET_4_0_2); 310 addsd(xmm0, xmm0); 311 jmp(B1_5); 312 313 bind(L_2TAG_PACKET_5_0_2); 314 jcc(Assembler::above, L_2TAG_PACKET_4_0_2); 315 cmpl(edx, 0); 316 jcc(Assembler::above, L_2TAG_PACKET_4_0_2); 317 jmp(L_2TAG_PACKET_6_0_2); 318 319 bind(L_2TAG_PACKET_3_0_2); 320 xorpd(xmm1, xmm1); 321 addsd(xmm1, xmm0); 322 movdl(edx, xmm1); 323 psrlq(xmm1, 32); 324 movdl(ecx, xmm1); 325 orl(edx, ecx); 326 cmpl(edx, 0); 327 jcc(Assembler::equal, L_2TAG_PACKET_7_0_2); 328 xorpd(xmm1, xmm1); 329 movl(eax, 18416); 330 pinsrw(xmm1, eax, 3); 331 mulsd(xmm0, xmm1); 332 xorpd(xmm2, xmm2); 333 movl(eax, 16368); 334 pinsrw(xmm2, eax, 3); 335 movdqu(xmm1, xmm0); 336 pextrw(eax, xmm0, 3); 337 por(xmm0, xmm2); 338 movl(ecx, 18416); 339 psrlq(xmm0, 27); 340 movdqu(xmm2, ExternalAddress(LOG10_E)); //0x00000000UL, 0x3fdbc000UL, 0xbf2e4108UL, 0x3f5a7a6cUL 341 psrld(xmm0, 2); 342 rcpps(xmm0, xmm0); 343 psllq(xmm1, 12); 344 pshufd(xmm6, xmm5, 78); 345 psrlq(xmm1, 12); 346 jmp(L_2TAG_PACKET_1_0_2); 347 348 bind(L_2TAG_PACKET_2_0_2); 349 movdl(edx, xmm1); 350 psrlq(xmm1, 32); 351 movdl(ecx, xmm1); 352 addl(ecx, ecx); 353 cmpl(ecx, -2097152); 354 jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2); 355 orl(edx, ecx); 356 cmpl(edx, 0); 357 jcc(Assembler::equal, L_2TAG_PACKET_7_0_2); 358 359 bind(L_2TAG_PACKET_6_0_2); 360 xorpd(xmm1, xmm1); 361 xorpd(xmm0, xmm0); 362 movl(eax, 32752); 363 pinsrw(xmm1, eax, 3); 364 mulsd(xmm0, xmm1); 365 movl(Address(rsp, 16), 9); 366 jmp(L_2TAG_PACKET_8_0_2); 367 368 bind(L_2TAG_PACKET_7_0_2); 369 xorpd(xmm1, xmm1); 370 xorpd(xmm0, xmm0); 371 movl(eax, 49136); 372 pinsrw(xmm0, eax, 3); 373 divsd(xmm0, xmm1); 374 movl(Address(rsp, 16), 8); 375 376 bind(L_2TAG_PACKET_8_0_2); 377 movq(Address(rsp, 8), xmm0); 378 379 bind(B1_3); 380 movq(xmm0, Address(rsp, 8)); 381 382 bind(L_2TAG_PACKET_9_0_2); 383 384 bind(B1_5); 385 addq(rsp, 24); 386 387 } 388 #else 389 // The 32 bit code is at most SSE2 compliant 390 ALIGNED_(16) juint _static_const_table_log10[] = 391 { 392 0x509f7800UL, 0x3fd34413UL, 0x1f12b358UL, 0x3d1fef31UL, 0x80333400UL, 393 0x3fd32418UL, 0xc671d9d0UL, 0xbcf542bfUL, 0x51195000UL, 0x3fd30442UL, 394 0x78a4b0c3UL, 0x3d18216aUL, 0x6fc79400UL, 0x3fd2e490UL, 0x80fa389dUL, 395 0xbc902869UL, 0x89d04000UL, 0x3fd2c502UL, 0x75c2f564UL, 0x3d040754UL, 396 0x4ddd1c00UL, 0x3fd2a598UL, 0xd219b2c3UL, 0xbcfa1d84UL, 0x6baa7c00UL, 397 0x3fd28651UL, 0xfd9abec1UL, 0x3d1be6d3UL, 0x94028800UL, 0x3fd2672dUL, 398 0xe289a455UL, 0xbd1ede5eUL, 0x78b86400UL, 0x3fd2482cUL, 0x6734d179UL, 399 0x3d1fe79bUL, 0xcca3c800UL, 0x3fd2294dUL, 0x981a40b8UL, 0xbced34eaUL, 400 0x439c5000UL, 0x3fd20a91UL, 0xcc392737UL, 0xbd1a9cc3UL, 0x92752c00UL, 401 0x3fd1ebf6UL, 0x03c9afe7UL, 0x3d1e98f8UL, 0x6ef8dc00UL, 0x3fd1cd7dUL, 402 0x71dae7f4UL, 0x3d08a86cUL, 0x8fe4dc00UL, 0x3fd1af25UL, 0xee9185a1UL, 403 0xbcff3412UL, 0xace59400UL, 0x3fd190eeUL, 0xc2cab353UL, 0x3cf17ed9UL, 404 0x7e925000UL, 0x3fd172d8UL, 0x6952c1b2UL, 0x3cf1521cUL, 0xbe694400UL, 405 0x3fd154e2UL, 0xcacb79caUL, 0xbd0bdc78UL, 0x26cbac00UL, 0x3fd1370dUL, 406 0xf71f4de1UL, 0xbd01f8beUL, 0x72fa0800UL, 0x3fd11957UL, 0x55bf910bUL, 407 0x3c946e2bUL, 0x5f106000UL, 0x3fd0fbc1UL, 0x39e639c1UL, 0x3d14a84bUL, 408 0xa802a800UL, 0x3fd0de4aUL, 0xd3f31d5dUL, 0xbd178385UL, 0x0b992000UL, 409 0x3fd0c0f3UL, 0x3843106fUL, 0xbd1f602fUL, 0x486ce800UL, 0x3fd0a3baUL, 410 0x8819497cUL, 0x3cef987aUL, 0x1de49400UL, 0x3fd086a0UL, 0x1caa0467UL, 411 0x3d0faec7UL, 0x4c30cc00UL, 0x3fd069a4UL, 0xa4424372UL, 0xbd1618fcUL, 412 0x94490000UL, 0x3fd04cc6UL, 0x946517d2UL, 0xbd18384bUL, 0xb7e84000UL, 413 0x3fd03006UL, 0xe0109c37UL, 0xbd19a6acUL, 0x798a0c00UL, 0x3fd01364UL, 414 0x5121e864UL, 0xbd164cf7UL, 0x38ce8000UL, 0x3fcfedbfUL, 0x46214d1aUL, 415 0xbcbbc402UL, 0xc8e62000UL, 0x3fcfb4efUL, 0xdab93203UL, 0x3d1e0176UL, 416 0x2cb02800UL, 0x3fcf7c5aUL, 0x2a2ea8e4UL, 0xbcfec86aUL, 0xeeeaa000UL, 417 0x3fcf43fdUL, 0xc18e49a4UL, 0x3cf110a8UL, 0x9bb6e800UL, 0x3fcf0bdaUL, 418 0x923cc9c0UL, 0xbd15ce99UL, 0xc093f000UL, 0x3fced3efUL, 0x4d4b51e9UL, 419 0x3d1a04c7UL, 0xec58f800UL, 0x3fce9c3cUL, 0x163cad59UL, 0x3cac8260UL, 420 0x9a907000UL, 0x3fce2d7dUL, 0x3fa93646UL, 0x3ce4a1c0UL, 0x37311000UL, 421 0x3fcdbf99UL, 0x32abd1fdUL, 0x3d07ea9dUL, 0x6744b800UL, 0x3fcd528cUL, 422 0x4dcbdfd4UL, 0xbd1b08e2UL, 0xe36de800UL, 0x3fcce653UL, 0x0b7b7f7fUL, 423 0xbd1b8f03UL, 0x77506800UL, 0x3fcc7aecUL, 0xa821c9fbUL, 0x3d13c163UL, 424 0x00ff8800UL, 0x3fcc1053UL, 0x536bca76UL, 0xbd074ee5UL, 0x70719800UL, 425 0x3fcba684UL, 0xd7da9b6bUL, 0xbd1fbf16UL, 0xc6f8d800UL, 0x3fcb3d7dUL, 426 0xe2220bb3UL, 0x3d1a295dUL, 0x16c15800UL, 0x3fcad53cUL, 0xe724911eUL, 427 0xbcf55822UL, 0x82533800UL, 0x3fca6dbcUL, 0x6d982371UL, 0x3cac567cUL, 428 0x3c19e800UL, 0x3fca06fcUL, 0x84d17d80UL, 0x3d1da204UL, 0x85ef8000UL, 429 0x3fc9a0f8UL, 0x54466a6aUL, 0xbd002204UL, 0xb0ac2000UL, 0x3fc93baeUL, 430 0xd601fd65UL, 0x3d18840cUL, 0x1bb9b000UL, 0x3fc8d71cUL, 0x7bf58766UL, 431 0xbd14f897UL, 0x34aae800UL, 0x3fc8733eUL, 0x3af6ac24UL, 0xbd0f5c45UL, 432 0x76d68000UL, 0x3fc81012UL, 0x4303e1a1UL, 0xbd1f9a80UL, 0x6af57800UL, 433 0x3fc7ad96UL, 0x43fbcb46UL, 0x3cf4c33eUL, 0xa6c51000UL, 0x3fc74bc7UL, 434 0x70f0eac5UL, 0xbd192e3bUL, 0xccab9800UL, 0x3fc6eaa3UL, 0xc0093dfeUL, 435 0xbd0faf15UL, 0x8b60b800UL, 0x3fc68a28UL, 0xde78d5fdUL, 0xbc9ea4eeUL, 436 0x9d987000UL, 0x3fc62a53UL, 0x962bea6eUL, 0xbd194084UL, 0xc9b0e800UL, 437 0x3fc5cb22UL, 0x888dd999UL, 0x3d1fe201UL, 0xe1634800UL, 0x3fc56c93UL, 438 0x16ada7adUL, 0x3d1b1188UL, 0xc176c000UL, 0x3fc50ea4UL, 0x4159b5b5UL, 439 0xbcf09c08UL, 0x51766000UL, 0x3fc4b153UL, 0x84393d23UL, 0xbcf6a89cUL, 440 0x83695000UL, 0x3fc4549dUL, 0x9f0b8bbbUL, 0x3d1c4b8cUL, 0x538d5800UL, 441 0x3fc3f881UL, 0xf49df747UL, 0x3cf89b99UL, 0xc8138000UL, 0x3fc39cfcUL, 442 0xd503b834UL, 0xbd13b99fUL, 0xf0df0800UL, 0x3fc3420dUL, 0xf011b386UL, 443 0xbd05d8beUL, 0xe7466800UL, 0x3fc2e7b2UL, 0xf39c7bc2UL, 0xbd1bb94eUL, 444 0xcdd62800UL, 0x3fc28de9UL, 0x05e6d69bUL, 0xbd10ed05UL, 0xd015d800UL, 445 0x3fc234b0UL, 0xe29b6c9dUL, 0xbd1ff967UL, 0x224ea800UL, 0x3fc1dc06UL, 446 0x727711fcUL, 0xbcffb30dUL, 0x01540000UL, 0x3fc183e8UL, 0x39786c5aUL, 447 0x3cc23f57UL, 0xb24d9800UL, 0x3fc12c54UL, 0xc905a342UL, 0x3d003a1dUL, 448 0x82835800UL, 0x3fc0d54aUL, 0x9b9920c0UL, 0x3d03b25aUL, 0xc72ac000UL, 449 0x3fc07ec7UL, 0x46f26a24UL, 0x3cf0fa41UL, 0xdd35d800UL, 0x3fc028caUL, 450 0x41d9d6dcUL, 0x3d034a65UL, 0x52474000UL, 0x3fbfa6a4UL, 0x44f66449UL, 451 0x3d19cad3UL, 0x2da3d000UL, 0x3fbefcb8UL, 0x67832999UL, 0x3d18400fUL, 452 0x32a10000UL, 0x3fbe53ceUL, 0x9c0e3b1aUL, 0xbcff62fdUL, 0x556b7000UL, 453 0x3fbdabe3UL, 0x02976913UL, 0xbcf8243bUL, 0x97e88000UL, 0x3fbd04f4UL, 454 0xec793797UL, 0x3d1c0578UL, 0x09647000UL, 0x3fbc5effUL, 0x05fc0565UL, 455 0xbd1d799eUL, 0xc6426000UL, 0x3fbbb9ffUL, 0x4625f5edUL, 0x3d1f5723UL, 456 0xf7afd000UL, 0x3fbb15f3UL, 0xdd5aae61UL, 0xbd1a7e1eUL, 0xd358b000UL, 457 0x3fba72d8UL, 0x3314e4d3UL, 0x3d17bc91UL, 0x9b1f5000UL, 0x3fb9d0abUL, 458 0x9a4d514bUL, 0x3cf18c9bUL, 0x9cd4e000UL, 0x3fb92f69UL, 0x7e4496abUL, 459 0x3cf1f96dUL, 0x31f4f000UL, 0x3fb88f10UL, 0xf56479e7UL, 0x3d165818UL, 460 0xbf628000UL, 0x3fb7ef9cUL, 0x26bf486dUL, 0xbd1113a6UL, 0xb526b000UL, 461 0x3fb7510cUL, 0x1a1c3384UL, 0x3ca9898dUL, 0x8e31e000UL, 0x3fb6b35dUL, 462 0xb3875361UL, 0xbd0661acUL, 0xd01de000UL, 0x3fb6168cUL, 0x2a7cacfaUL, 463 0xbd1bdf10UL, 0x0af23000UL, 0x3fb57a98UL, 0xff868816UL, 0x3cf046d0UL, 464 0xd8ea0000UL, 0x3fb4df7cUL, 0x1515fbe7UL, 0xbd1fd529UL, 0xde3b2000UL, 465 0x3fb44538UL, 0x6e59a132UL, 0x3d1faeeeUL, 0xc8df9000UL, 0x3fb3abc9UL, 466 0xf1322361UL, 0xbd198807UL, 0x505f1000UL, 0x3fb3132dUL, 0x0888e6abUL, 467 0x3d1e5380UL, 0x359bd000UL, 0x3fb27b61UL, 0xdfbcbb22UL, 0xbcfe2724UL, 468 0x429ee000UL, 0x3fb1e463UL, 0x6eb4c58cUL, 0xbcfe4dd6UL, 0x4a673000UL, 469 0x3fb14e31UL, 0x4ce1ac9bUL, 0x3d1ba691UL, 0x28b96000UL, 0x3fb0b8c9UL, 470 0x8c7813b8UL, 0xbd0b3872UL, 0xc1f08000UL, 0x3fb02428UL, 0xc2bc8c2cUL, 471 0x3cb5ea6bUL, 0x05a1a000UL, 0x3faf209cUL, 0x72e8f18eUL, 0xbce8df84UL, 472 0xc0b5e000UL, 0x3fadfa6dUL, 0x9fdef436UL, 0x3d087364UL, 0xaf416000UL, 473 0x3facd5c2UL, 0x1068c3a9UL, 0x3d0827e7UL, 0xdb356000UL, 0x3fabb296UL, 474 0x120a34d3UL, 0x3d101a9fUL, 0x5dfea000UL, 0x3faa90e6UL, 0xdaded264UL, 475 0xbd14c392UL, 0x6034c000UL, 0x3fa970adUL, 0x1c9d06a9UL, 0xbd1b705eUL, 476 0x194c6000UL, 0x3fa851e8UL, 0x83996ad9UL, 0xbd0117bcUL, 0xcf4ac000UL, 477 0x3fa73492UL, 0xb1a94a62UL, 0xbca5ea42UL, 0xd67b4000UL, 0x3fa618a9UL, 478 0x75aed8caUL, 0xbd07119bUL, 0x9126c000UL, 0x3fa4fe29UL, 0x5291d533UL, 479 0x3d12658fUL, 0x6f4d4000UL, 0x3fa3e50eUL, 0xcd2c5cd9UL, 0x3d1d5c70UL, 480 0xee608000UL, 0x3fa2cd54UL, 0xd1008489UL, 0x3d1a4802UL, 0x9900e000UL, 481 0x3fa1b6f9UL, 0x54fb5598UL, 0xbd16593fUL, 0x06bb6000UL, 0x3fa0a1f9UL, 482 0x64ef57b4UL, 0xbd17636bUL, 0xb7940000UL, 0x3f9f1c9fUL, 0xee6a4737UL, 483 0x3cb5d479UL, 0x91aa0000UL, 0x3f9cf7f5UL, 0x3a16373cUL, 0x3d087114UL, 484 0x156b8000UL, 0x3f9ad5edUL, 0x836c554aUL, 0x3c6900b0UL, 0xd4764000UL, 485 0x3f98b67fUL, 0xed12f17bUL, 0xbcffc974UL, 0x77dec000UL, 0x3f9699a7UL, 486 0x232ce7eaUL, 0x3d1e35bbUL, 0xbfbf4000UL, 0x3f947f5dUL, 0xd84ffa6eUL, 487 0x3d0e0a49UL, 0x82c7c000UL, 0x3f92679cUL, 0x8d170e90UL, 0xbd14d9f2UL, 488 0xadd20000UL, 0x3f90525dUL, 0x86d9f88eUL, 0x3cdeb986UL, 0x86f10000UL, 489 0x3f8c7f36UL, 0xb9e0a517UL, 0x3ce29faaUL, 0xb75c8000UL, 0x3f885e9eUL, 490 0x542568cbUL, 0xbd1f7bdbUL, 0x46b30000UL, 0x3f8442e8UL, 0xb954e7d9UL, 491 0x3d1e5287UL, 0xb7e60000UL, 0x3f802c07UL, 0x22da0b17UL, 0xbd19fb27UL, 492 0x6c8b0000UL, 0x3f7833e3UL, 0x821271efUL, 0xbd190f96UL, 0x29910000UL, 493 0x3f701936UL, 0xbc3491a5UL, 0xbd1bcf45UL, 0x354a0000UL, 0x3f600fe3UL, 494 0xc0ff520aUL, 0xbd19d71cUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 495 0x00000000UL, 0x509f7800UL, 0x3f934413UL, 0x1f12b358UL, 0x3cdfef31UL, 496 0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL, 0xc0089309UL, 0x385593b1UL, 497 0xc025c917UL, 0xdc963467UL, 0x3ffc6a02UL, 0x7f9d3aa1UL, 0x4016ab9fUL, 498 0xdc77b115UL, 0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL, 499 0xffffe000UL, 0x00000000UL, 0x3fdbc000UL, 0xbf2e4108UL, 0x3f5a7a6cUL 500 }; 501 //registers, 502 // input: xmm0 503 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7 504 // rax, rdx, rcx, rbx (tmp) 505 506 void MacroAssembler::fast_log10(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) { 507 508 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; 509 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; 510 Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, start; 511 512 assert_different_registers(tmp, eax, ecx, edx); 513 514 address static_const_table_log10 = (address)_static_const_table_log10; 515 516 bind(start); 517 subl(rsp, 104); 518 movl(Address(rsp, 40), tmp); 519 lea(tmp, ExternalAddress(static_const_table_log10)); 520 xorpd(xmm2, xmm2); 521 movl(eax, 16368); 522 pinsrw(xmm2, eax, 3); 523 movl(ecx, 1054736384); 524 movdl(xmm7, ecx); 525 xorpd(xmm3, xmm3); 526 movl(edx, 30704); 527 pinsrw(xmm3, edx, 3); 528 movsd(xmm0, Address(rsp, 112)); 529 movdqu(xmm1, xmm0); 530 movl(edx, 32768); 531 movdl(xmm4, edx); 532 movdqu(xmm5, Address(tmp, 2128)); //0x3ffc6a02UL, 0x7f9d3aa1UL, 0x4016ab9fUL, 0xdc77b115UL 533 pextrw(eax, xmm0, 3); 534 por(xmm0, xmm2); 535 movl(ecx, 16352); 536 psllq(xmm0, 5); 537 movsd(xmm2, Address(tmp, 2144)); //0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL 538 psrlq(xmm0, 34); 539 rcpss(xmm0, xmm0); 540 psllq(xmm1, 12); 541 pshufd(xmm6, xmm5, 78); 542 psrlq(xmm1, 12); 543 subl(eax, 16); 544 cmpl(eax, 32736); 545 jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2); 546 547 bind(L_2TAG_PACKET_1_0_2); 548 mulss(xmm0, xmm7); 549 por(xmm1, xmm3); 550 andpd(xmm5, xmm1); 551 paddd(xmm0, xmm4); 552 subsd(xmm1, xmm5); 553 movdl(edx, xmm0); 554 psllq(xmm0, 29); 555 andpd(xmm0, xmm6); 556 andl(eax, 32752); 557 subl(eax, ecx); 558 cvtsi2sdl(xmm7, eax); 559 mulpd(xmm5, xmm0); 560 mulsd(xmm1, xmm0); 561 movsd(xmm6, Address(tmp, 2064)); //0xbd19d71cUL, 0x00000000UL, 0x00000000UL, 0x00000000UL 562 movdqu(xmm3, Address(tmp, 2080)); //0x00000000UL, 0x509f7800UL, 0x3f934413UL, 0x1f12b358UL 563 subsd(xmm5, xmm2); 564 andl(edx, 16711680); 565 shrl(edx, 12); 566 movdqu(xmm0, Address(tmp, edx, Address::times_1, -1504)); 567 movdqu(xmm4, Address(tmp, 2096)); //0x3cdfef31UL, 0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL 568 addsd(xmm1, xmm5); 569 movdqu(xmm2, Address(tmp, 2112)); //0xc0089309UL, 0x385593b1UL, 0xc025c917UL, 0xdc963467UL 570 mulsd(xmm6, xmm7); 571 pshufd(xmm5, xmm1, 68); 572 mulsd(xmm7, Address(tmp, 2072)); //0x00000000UL, 0x00000000UL, 0x00000000UL, 0x509f7800UL 573 mulsd(xmm3, xmm1); 574 addsd(xmm0, xmm6); 575 mulpd(xmm4, xmm5); 576 movsd(xmm6, Address(tmp, 2152)); //0xffffffffUL, 0x00000000UL, 0xffffe000UL, 0x00000000UL 577 mulpd(xmm5, xmm5); 578 addpd(xmm4, xmm2); 579 mulpd(xmm3, xmm5); 580 pshufd(xmm2, xmm0, 228); 581 addsd(xmm0, xmm1); 582 mulsd(xmm4, xmm1); 583 subsd(xmm2, xmm0); 584 mulsd(xmm6, xmm1); 585 addsd(xmm1, xmm2); 586 pshufd(xmm2, xmm0, 238); 587 mulsd(xmm5, xmm5); 588 addsd(xmm7, xmm2); 589 addsd(xmm1, xmm6); 590 addpd(xmm4, xmm3); 591 addsd(xmm1, xmm7); 592 mulpd(xmm4, xmm5); 593 addsd(xmm1, xmm4); 594 pshufd(xmm5, xmm4, 238); 595 addsd(xmm1, xmm5); 596 addsd(xmm0, xmm1); 597 jmp(L_2TAG_PACKET_2_0_2); 598 599 bind(L_2TAG_PACKET_0_0_2); 600 movsd(xmm0, Address(rsp, 112)); //0xbcfa1d84UL, 0x6baa7c00UL, 0x3fd28651UL, 0xfd9abec1UL 601 movdqu(xmm1, xmm0); 602 addl(eax, 16); 603 cmpl(eax, 32768); 604 jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2); 605 cmpl(eax, 16); 606 jcc(Assembler::below, L_2TAG_PACKET_4_0_2); 607 608 bind(L_2TAG_PACKET_5_0_2); 609 addsd(xmm0, xmm0); 610 jmp(L_2TAG_PACKET_2_0_2); 611 612 bind(L_2TAG_PACKET_6_0_2); 613 jcc(Assembler::above, L_2TAG_PACKET_5_0_2); 614 cmpl(edx, 0); 615 jcc(Assembler::above, L_2TAG_PACKET_5_0_2); 616 jmp(L_2TAG_PACKET_7_0_2); 617 618 bind(L_2TAG_PACKET_3_0_2); 619 movdl(edx, xmm1); 620 psrlq(xmm1, 32); 621 movdl(ecx, xmm1); 622 addl(ecx, ecx); 623 cmpl(ecx, -2097152); 624 jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2); 625 orl(edx, ecx); 626 cmpl(edx, 0); 627 jcc(Assembler::equal, L_2TAG_PACKET_8_0_2); 628 629 bind(L_2TAG_PACKET_7_0_2); 630 xorpd(xmm1, xmm1); 631 xorpd(xmm0, xmm0); 632 movl(eax, 32752); 633 pinsrw(xmm1, eax, 3); 634 movl(edx, 9); 635 mulsd(xmm0, xmm1); 636 637 bind(L_2TAG_PACKET_9_0_2); 638 movsd(Address(rsp, 0), xmm0); 639 movsd(xmm0, Address(rsp, 112)); //0xbcfa1d84UL, 0x6baa7c00UL, 0x3fd28651UL, 0xfd9abec1UL 640 fld_d(Address(rsp, 0)); 641 jmp(L_2TAG_PACKET_10_0_2); 642 643 bind(L_2TAG_PACKET_8_0_2); 644 xorpd(xmm1, xmm1); 645 xorpd(xmm0, xmm0); 646 movl(eax, 49136); 647 pinsrw(xmm0, eax, 3); 648 divsd(xmm0, xmm1); 649 movl(edx, 8); 650 jmp(L_2TAG_PACKET_9_0_2); 651 652 bind(L_2TAG_PACKET_4_0_2); 653 movdl(edx, xmm1); 654 psrlq(xmm1, 32); 655 movdl(ecx, xmm1); 656 orl(edx, ecx); 657 cmpl(edx, 0); 658 jcc(Assembler::equal, L_2TAG_PACKET_8_0_2); 659 xorpd(xmm1, xmm1); 660 movl(eax, 18416); 661 pinsrw(xmm1, eax, 3); 662 mulsd(xmm0, xmm1); 663 xorpd(xmm2, xmm2); 664 movl(eax, 16368); 665 pinsrw(xmm2, eax, 3); 666 movdqu(xmm1, xmm0); 667 pextrw(eax, xmm0, 3); 668 por(xmm0, xmm2); 669 movl(ecx, 18416); 670 psllq(xmm0, 5); 671 movsd(xmm2, Address(tmp, 2144)); //0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL 672 psrlq(xmm0, 34); 673 rcpss(xmm0, xmm0); 674 psllq(xmm1, 12); 675 pshufd(xmm6, xmm5, 78); 676 psrlq(xmm1, 12); 677 jmp(L_2TAG_PACKET_1_0_2); 678 679 bind(L_2TAG_PACKET_2_0_2); 680 movsd(Address(rsp, 24), xmm0); 681 fld_d(Address(rsp, 24)); 682 683 bind(L_2TAG_PACKET_10_0_2); 684 movl(tmp, Address(rsp, 40)); 685 686 } 687 #endif