1 /* 2 * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "runtime/deoptimization.hpp" 27 #include "runtime/frame.inline.hpp" 28 #include "runtime/javaThread.hpp" 29 #include "runtime/stubRoutines.hpp" 30 #include "utilities/globalDefinitions.hpp" 31 #include "crc32c.h" 32 33 // Implementation of the platform-specific part of StubRoutines - for 34 // a description of how to extend it, see the stubRoutines.hpp file. 35 36 address StubRoutines::x86::_verify_mxcsr_entry = NULL; 37 address StubRoutines::x86::_upper_word_mask_addr = NULL; 38 address StubRoutines::x86::_shuffle_byte_flip_mask_addr = NULL; 39 address StubRoutines::x86::_k256_adr = NULL; 40 address StubRoutines::x86::_vector_short_to_byte_mask = NULL; 41 address StubRoutines::x86::_vector_int_to_byte_mask = NULL; 42 address StubRoutines::x86::_vector_int_to_short_mask = NULL; 43 address StubRoutines::x86::_vector_all_bits_set = NULL; 44 address StubRoutines::x86::_vector_byte_shuffle_mask = NULL; 45 address StubRoutines::x86::_vector_int_mask_cmp_bits = NULL; 46 address StubRoutines::x86::_vector_short_shuffle_mask = NULL; 47 address StubRoutines::x86::_vector_int_shuffle_mask = NULL; 48 address StubRoutines::x86::_vector_long_shuffle_mask = NULL; 49 address StubRoutines::x86::_vector_float_sign_mask = NULL; 50 address StubRoutines::x86::_vector_float_sign_flip = NULL; 51 address StubRoutines::x86::_vector_double_sign_mask = NULL; 52 address StubRoutines::x86::_vector_double_sign_flip = NULL; 53 address StubRoutines::x86::_vector_byte_perm_mask = NULL; 54 address StubRoutines::x86::_vector_long_sign_mask = NULL; 55 address StubRoutines::x86::_vector_iota_indices = NULL; 56 address StubRoutines::x86::_vector_reverse_bit_lut = NULL; 57 address StubRoutines::x86::_vector_reverse_byte_perm_mask_long = NULL; 58 address StubRoutines::x86::_vector_reverse_byte_perm_mask_int = NULL; 59 address StubRoutines::x86::_vector_reverse_byte_perm_mask_short = NULL; 60 address StubRoutines::x86::_vector_popcount_lut = NULL; 61 address StubRoutines::x86::_vector_count_leading_zeros_lut = NULL; 62 address StubRoutines::x86::_vector_32_bit_mask = NULL; 63 address StubRoutines::x86::_vector_64_bit_mask = NULL; 64 #ifdef _LP64 65 address StubRoutines::x86::_k256_W_adr = NULL; 66 address StubRoutines::x86::_k512_W_addr = NULL; 67 address StubRoutines::x86::_pshuffle_byte_flip_mask_addr_sha512 = NULL; 68 // Base64 masks 69 address StubRoutines::x86::_encoding_table_base64 = NULL; 70 address StubRoutines::x86::_shuffle_base64 = NULL; 71 address StubRoutines::x86::_avx2_shuffle_base64 = NULL; 72 address StubRoutines::x86::_avx2_input_mask_base64 = NULL; 73 address StubRoutines::x86::_avx2_lut_base64 = NULL; 74 address StubRoutines::x86::_lookup_lo_base64 = NULL; 75 address StubRoutines::x86::_lookup_hi_base64 = NULL; 76 address StubRoutines::x86::_lookup_lo_base64url = NULL; 77 address StubRoutines::x86::_lookup_hi_base64url = NULL; 78 address StubRoutines::x86::_pack_vec_base64 = NULL; 79 address StubRoutines::x86::_join_0_1_base64 = NULL; 80 address StubRoutines::x86::_join_1_2_base64 = NULL; 81 address StubRoutines::x86::_join_2_3_base64 = NULL; 82 address StubRoutines::x86::_decoding_table_base64 = NULL; 83 #endif 84 address StubRoutines::x86::_pshuffle_byte_flip_mask_addr = NULL; 85 address StubRoutines::x86::_check_lock_stack = NULL; 86 87 uint64_t StubRoutines::x86::_crc_by128_masks[] = 88 { 89 /* The fields in this structure are arranged so that they can be 90 * picked up two at a time with 128-bit loads. 91 * 92 * Because of flipped bit order for this CRC polynomials 93 * the constant for X**N is left-shifted by 1. This is because 94 * a 64 x 64 polynomial multiply produces a 127-bit result 95 * but the highest term is always aligned to bit 0 in the container. 96 * Pre-shifting by one fixes this, at the cost of potentially making 97 * the 32-bit constant no longer fit in a 32-bit container (thus the 98 * use of uint64_t, though this is also the size used by the carry- 99 * less multiply instruction. 100 * 101 * In addition, the flipped bit order and highest-term-at-least-bit 102 * multiply changes the constants used. The 96-bit result will be 103 * aligned to the high-term end of the target 128-bit container, 104 * not the low-term end; that is, instead of a 512-bit or 576-bit fold, 105 * instead it is a 480 (=512-32) or 544 (=512+64-32) bit fold. 106 * 107 * This cause additional problems in the 128-to-64-bit reduction; see the 108 * code for details. By storing a mask in the otherwise unused half of 109 * a 128-bit constant, bits can be cleared before multiplication without 110 * storing and reloading. Note that staying on a 128-bit datapath means 111 * that some data is uselessly stored and some unused data is intersected 112 * with an irrelevant constant. 113 */ 114 115 ((uint64_t) 0xffffffffUL), /* low of K_M_64 */ 116 ((uint64_t) 0xb1e6b092U << 1), /* high of K_M_64 */ 117 ((uint64_t) 0xba8ccbe8U << 1), /* low of K_160_96 */ 118 ((uint64_t) 0x6655004fU << 1), /* high of K_160_96 */ 119 ((uint64_t) 0xaa2215eaU << 1), /* low of K_544_480 */ 120 ((uint64_t) 0xe3720acbU << 1) /* high of K_544_480 */ 121 }; 122 123 /** 124 * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.5/crc32.h 125 */ 126 juint StubRoutines::x86::_crc_table[] = 127 { 128 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, 129 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, 130 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, 131 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, 132 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, 133 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, 134 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, 135 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, 136 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, 137 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, 138 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, 139 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, 140 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, 141 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, 142 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, 143 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, 144 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, 145 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, 146 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, 147 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, 148 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, 149 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, 150 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, 151 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, 152 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, 153 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, 154 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, 155 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, 156 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, 157 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, 158 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, 159 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, 160 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, 161 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, 162 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, 163 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, 164 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, 165 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, 166 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, 167 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, 168 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, 169 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, 170 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, 171 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, 172 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, 173 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, 174 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, 175 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, 176 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, 177 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, 178 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, 179 0x2d02ef8dUL 180 }; 181 182 #ifdef _LP64 183 juint StubRoutines::x86::_crc_table_avx512[] = 184 { 185 0xe95c1271UL, 0x00000000UL, 0xce3371cbUL, 0x00000000UL, 186 0xccaa009eUL, 0x00000000UL, 0x751997d0UL, 0x00000001UL, 187 0x4a7fe880UL, 0x00000001UL, 0xe88ef372UL, 0x00000001UL, 188 0xccaa009eUL, 0x00000000UL, 0x63cd6124UL, 0x00000001UL, 189 0xf7011640UL, 0x00000001UL, 0xdb710640UL, 0x00000001UL, 190 0xd7cfc6acUL, 0x00000001UL, 0xea89367eUL, 0x00000001UL, 191 0x8cb44e58UL, 0x00000001UL, 0xdf068dc2UL, 0x00000000UL, 192 0xae0b5394UL, 0x00000000UL, 0xc7569e54UL, 0x00000001UL, 193 0xc6e41596UL, 0x00000001UL, 0x54442bd4UL, 0x00000001UL, 194 0x74359406UL, 0x00000001UL, 0x3db1ecdcUL, 0x00000000UL, 195 0x5a546366UL, 0x00000001UL, 0xf1da05aaUL, 0x00000000UL, 196 0xccaa009eUL, 0x00000000UL, 0x751997d0UL, 0x00000001UL, 197 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL 198 }; 199 200 juint StubRoutines::x86::_crc32c_table_avx512[] = 201 { 202 0xb9e02b86UL, 0x00000000UL, 0xdcb17aa4UL, 0x00000000UL, 203 0x493c7d27UL, 0x00000000UL, 0xc1068c50UL, 0x0000000eUL, 204 0x06e38d70UL, 0x00000002UL, 0x6992cea2UL, 0x00000000UL, 205 0x493c7d27UL, 0x00000000UL, 0xdd45aab8UL, 0x00000000UL, 206 0xdea713f0UL, 0x00000000UL, 0x05ec76f0UL, 0x00000001UL, 207 0x47db8317UL, 0x00000000UL, 0x2ad91c30UL, 0x00000000UL, 208 0x0715ce53UL, 0x00000000UL, 0xc49f4f67UL, 0x00000000UL, 209 0x39d3b296UL, 0x00000000UL, 0x083a6eecUL, 0x00000000UL, 210 0x9e4addf8UL, 0x00000000UL, 0x740eef02UL, 0x00000000UL, 211 0xddc0152bUL, 0x00000000UL, 0x1c291d04UL, 0x00000000UL, 212 0xba4fc28eUL, 0x00000000UL, 0x3da6d0cbUL, 0x00000000UL, 213 0x493c7d27UL, 0x00000000UL, 0xc1068c50UL, 0x0000000eUL, 214 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL 215 }; 216 217 juint StubRoutines::x86::_crc_by128_masks_avx512[] = 218 { 219 0xffffffffUL, 0xffffffffUL, 0x00000000UL, 0x00000000UL, 220 0x00000000UL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 221 0x80808080UL, 0x80808080UL, 0x80808080UL, 0x80808080UL 222 }; 223 224 juint StubRoutines::x86::_shuf_table_crc32_avx512[] = 225 { 226 0x83828100UL, 0x87868584UL, 0x8b8a8988UL, 0x8f8e8d8cUL, 227 0x03020100UL, 0x07060504UL, 0x0b0a0908UL, 0x000e0d0cUL 228 }; 229 #endif // _LP64 230 231 jint StubRoutines::x86::_arrays_hashcode_powers_of_31[] = 232 { 233 2111290369, 234 -2010103841, 235 350799937, 236 11316127, 237 693101697, 238 -254736545, 239 961614017, 240 31019807, 241 -2077209343, 242 -67006753, 243 1244764481, 244 -2038056289, 245 211350913, 246 -408824225, 247 -844471871, 248 -997072353, 249 1353309697, 250 -510534177, 251 1507551809, 252 -505558625, 253 -293403007, 254 129082719, 255 -1796951359, 256 -196513505, 257 -1807454463, 258 1742810335, 259 887503681, 260 28629151, 261 923521, 262 29791, 263 961, 264 31, 265 1, 266 }; 267 268 #define D 32 269 #define P 0x82F63B78 // Reflection of Castagnoli (0x11EDC6F41) 270 271 #define TILL_CYCLE 31 272 uint32_t _crc32c_pow_2k_table[TILL_CYCLE]; // because _crc32c_pow_2k_table[TILL_CYCLE == 31] == _crc32c_pow_2k_table[0] 273 274 // A. Kadatch and B. Jenkins / Everything we know about CRC but afraid to forget September 3, 2010 8 275 // Listing 1: Multiplication of normalized polynomials 276 // "a" and "b" occupy D least significant bits. 277 uint32_t crc32c_multiply(uint32_t a, uint32_t b) { 278 uint32_t product = 0; 279 uint32_t b_pow_x_table[D + 1]; // b_pow_x_table[k] = (b * x**k) mod P 280 b_pow_x_table[0] = b; 281 for (int k = 0; k < D; ++k) { 282 // If "a" has non-zero coefficient at x**k,/ add ((b * x**k) mod P) to the result. 283 if ((a & (((uint32_t)1) << (D - 1 - k))) != 0) product ^= b_pow_x_table[k]; 284 285 // Compute b_pow_x_table[k+1] = (b ** x**(k+1)) mod P. 286 if (b_pow_x_table[k] & 1) { 287 // If degree of (b_pow_x_table[k] * x) is D, then 288 // degree of (b_pow_x_table[k] * x - P) is less than D. 289 b_pow_x_table[k + 1] = (b_pow_x_table[k] >> 1) ^ P; 290 } 291 else { 292 b_pow_x_table[k + 1] = b_pow_x_table[k] >> 1; 293 } 294 } 295 return product; 296 } 297 #undef D 298 #undef P 299 300 // A. Kadatch and B. Jenkins / Everything we know about CRC but afraid to forget September 3, 2010 9 301 void crc32c_init_pow_2k(void) { 302 // _crc32c_pow_2k_table(0) = 303 // x^(2^k) mod P(x) = x mod P(x) = x 304 // Since we are operating on a reflected values 305 // x = 10b, reflect(x) = 0x40000000 306 _crc32c_pow_2k_table[0] = 0x40000000; 307 308 for (int k = 1; k < TILL_CYCLE; k++) { 309 // _crc32c_pow_2k_table(k+1) = _crc32c_pow_2k_table(k-1)^2 mod P(x) 310 uint32_t tmp = _crc32c_pow_2k_table[k - 1]; 311 _crc32c_pow_2k_table[k] = crc32c_multiply(tmp, tmp); 312 } 313 } 314 315 // x^N mod P(x) 316 uint32_t crc32c_f_pow_n(uint32_t n) { 317 // result = 1 (polynomial) 318 uint32_t one, result = 0x80000000, i = 0; 319 320 while (one = (n & 1), (n == 1 || n - one > 0)) { 321 if (one) { 322 result = crc32c_multiply(result, _crc32c_pow_2k_table[i]); 323 } 324 n >>= 1; 325 i++; 326 } 327 328 return result; 329 } 330 331 juint *StubRoutines::x86::_crc32c_table; 332 333 void StubRoutines::x86::generate_CRC32C_table(bool is_pclmulqdq_table_supported) { 334 335 static juint pow_n[CRC32C_NUM_PRECOMPUTED_CONSTANTS]; 336 337 crc32c_init_pow_2k(); 338 339 pow_n[0] = crc32c_f_pow_n(CRC32C_HIGH * 8); // 8N * 8 = 64N 340 pow_n[1] = crc32c_f_pow_n(CRC32C_HIGH * 8 * 2); // 128N 341 342 pow_n[2] = crc32c_f_pow_n(CRC32C_MIDDLE * 8); 343 pow_n[3] = crc32c_f_pow_n(CRC32C_MIDDLE * 8 * 2); 344 345 pow_n[4] = crc32c_f_pow_n(CRC32C_LOW * 8); 346 pow_n[CRC32C_NUM_PRECOMPUTED_CONSTANTS - 1] = 347 crc32c_f_pow_n(CRC32C_LOW * 8 * 2); 348 349 if (is_pclmulqdq_table_supported) { 350 _crc32c_table = pow_n; 351 } else { 352 static julong pclmulqdq_table[CRC32C_NUM_PRECOMPUTED_CONSTANTS * 256]; 353 354 for (int j = 0; j < CRC32C_NUM_PRECOMPUTED_CONSTANTS; j++) { 355 static juint X_CONST = pow_n[j]; 356 for (int64_t i = 0; i < 256; i++) { // to force 64 bit wide computations 357 // S. Gueron / Information Processing Letters 112 (2012) 184 358 // Algorithm 3: Generating a carry-less multiplication lookup table. 359 // Input: A 32-bit constant, X_CONST. 360 // Output: A table of 256 entries, each one is a 64-bit quadword, 361 // that can be used for computing "byte" * X_CONST, for a given byte. 362 pclmulqdq_table[j * 256 + i] = 363 ((i & 1) * X_CONST) ^ ((i & 2) * X_CONST) ^ ((i & 4) * X_CONST) ^ 364 ((i & 8) * X_CONST) ^ ((i & 16) * X_CONST) ^ ((i & 32) * X_CONST) ^ 365 ((i & 64) * X_CONST) ^ ((i & 128) * X_CONST); 366 } 367 } 368 _crc32c_table = (juint*)pclmulqdq_table; 369 } 370 } 371 372 ATTRIBUTE_ALIGNED(64) juint StubRoutines::x86::_k256[] = 373 { 374 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 375 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 376 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, 377 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, 378 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, 379 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 380 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 381 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, 382 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, 383 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, 384 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 385 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 386 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, 387 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, 388 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, 389 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL 390 }; 391 392 #ifdef _LP64 393 // used in MacroAssembler::sha256_AVX2 394 // dynamically built from _k256 395 ATTRIBUTE_ALIGNED(64) juint StubRoutines::x86::_k256_W[2*sizeof(StubRoutines::x86::_k256)]; 396 397 // used in MacroAssembler::sha512_AVX2 398 ATTRIBUTE_ALIGNED(64) julong StubRoutines::x86::_k512_W[] = 399 { 400 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 401 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 402 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 403 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 404 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 405 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 406 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 407 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, 408 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 409 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 410 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 411 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, 412 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 413 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, 414 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 415 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 416 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 417 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, 418 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 419 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, 420 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 421 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 422 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 423 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, 424 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 425 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 426 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 427 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 428 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 429 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, 430 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 431 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, 432 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 433 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 434 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 435 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, 436 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 437 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, 438 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 439 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL, 440 }; 441 #endif