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