/*
* Copyright ( c ) 2013 , 2021 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*
*/
#include "precompiled.hpp"
#include "runtime/deoptimization.hpp"
#include "runtime/frame.inline.hpp"
#include "runtime/javaThread.hpp"
#include "runtime/stubRoutines.hpp"
#include "utilities/globalDefinitions.hpp"
#include "crc32c.h"
// Implementation of the platform-specific part of StubRoutines - for
// a description of how to extend it, see the stubRoutines.hpp file.
address StubRoutines::x86::_verify_mxcsr_entry = NULL;
address StubRoutines::x86::_upper_word_mask_addr = NULL;
address StubRoutines::x86::_shuffle_byte_flip_mask_addr = NULL;
address StubRoutines::x86::_k256_adr = NULL;
address StubRoutines::x86::_vector_short_to_byte_mask = NULL;
address StubRoutines::x86::_vector_int_to_byte_mask = NULL;
address StubRoutines::x86::_vector_int_to_short_mask = NULL;
address StubRoutines::x86::_vector_all_bits_set = NULL;
address StubRoutines::x86::_vector_byte_shuffle_mask = NULL;
address StubRoutines::x86::_vector_int_mask_cmp_bits = NULL;
address StubRoutines::x86::_vector_short_shuffle_mask = NULL;
address StubRoutines::x86::_vector_int_shuffle_mask = NULL;
address StubRoutines::x86::_vector_long_shuffle_mask = NULL;
address StubRoutines::x86::_vector_float_sign_mask = NULL;
address StubRoutines::x86::_vector_float_sign_flip = NULL;
address StubRoutines::x86::_vector_double_sign_mask = NULL;
address StubRoutines::x86::_vector_double_sign_flip = NULL;
address StubRoutines::x86::_vector_byte_perm_mask = NULL;
address StubRoutines::x86::_vector_long_sign_mask = NULL;
address StubRoutines::x86::_vector_iota_indices = NULL;
address StubRoutines::x86::_vector_reverse_bit_lut = NULL;
address StubRoutines::x86::_vector_reverse_byte_perm_mask_long = NULL;
address StubRoutines::x86::_vector_reverse_byte_perm_mask_int = NULL;
address StubRoutines::x86::_vector_reverse_byte_perm_mask_short = NULL;
address StubRoutines::x86::_vector_popcount_lut = NULL;
address StubRoutines::x86::_vector_count_leading_zeros_lut = NULL;
address StubRoutines::x86::_vector_32_bit_mask = NULL;
address StubRoutines::x86::_vector_64_bit_mask = NULL;
#ifdef _LP64
address StubRoutines::x86::_k256_W_adr = NULL;
address StubRoutines::x86::_k512_W_addr = NULL;
address StubRoutines::x86::_pshuffle_byte_flip_mask_addr_sha512 = NULL;
// Base64 masks
address StubRoutines::x86::_encoding_table_base64 = NULL;
address StubRoutines::x86::_shuffle_base64 = NULL;
address StubRoutines::x86::_avx2_shuffle_base64 = NULL;
address StubRoutines::x86::_avx2_input_mask_base64 = NULL;
address StubRoutines::x86::_avx2_lut_base64 = NULL;
address StubRoutines::x86::_lookup_lo_base64 = NULL;
address StubRoutines::x86::_lookup_hi_base64 = NULL;
address StubRoutines::x86::_lookup_lo_base64url = NULL;
address StubRoutines::x86::_lookup_hi_base64url = NULL;
address StubRoutines::x86::_pack_vec_base64 = NULL;
address StubRoutines::x86::_join_0_1_base64 = NULL;
address StubRoutines::x86::_join_1_2_base64 = NULL;
address StubRoutines::x86::_join_2_3_base64 = NULL;
address StubRoutines::x86::_decoding_table_base64 = NULL;
#endif
address StubRoutines::x86::_pshuffle_byte_flip_mask_addr = NULL;
uint64_t StubRoutines::x86::_crc_by128_masks[] =
{
/* The fields in this structure are arranged so that they can be
* picked up two at a time with 128 - bit loads .
*
* Because of flipped bit order for this CRC polynomials
* the constant for X * * N is left - shifted by 1 . This is because
* a 64 x 64 polynomial multiply produces a 127 - bit result
* but the highest term is always aligned to bit 0 in the container .
* Pre - shifting by one fixes this , at the cost of potentially making
* the 32 - bit constant no longer fit in a 32 - bit container ( thus the
* use of uint64_t , though this is also the size used by the carry -
* less multiply instruction .
*
* In addition , the flipped bit order and highest - term - at - least - bit
* multiply changes the constants used . The 96 - bit result will be
* aligned to the high - term end of the target 128 - bit container ,
* not the low - term end ; that is , instead of a 512 - bit or 576 - bit fold ,
* instead it is a 480 ( = 512 - 32 ) or 544 ( = 512 + 64 - 32 ) bit fold .
*
* This cause additional problems in the 128 - to - 64 - bit reduction ; see the
* code for details . By storing a mask in the otherwise unused half of
* a 128 - bit constant , bits can be cleared before multiplication without
* storing and reloading . Note that staying on a 128 - bit datapath means
* that some data is uselessly stored and some unused data is intersected
* with an irrelevant constant .
*/
((uint64_t) 0 xffffffffUL), /* low of K_M_64 */
((uint64_t) 0 xb1e6b092U << 1 ), /* high of K_M_64 */
((uint64_t) 0 xba8ccbe8U << 1 ), /* low of K_160_96 */
((uint64_t) 0 x6655004fU << 1 ), /* high of K_160_96 */
((uint64_t) 0 xaa2215eaU << 1 ), /* low of K_544_480 */
((uint64_t) 0 xe3720acbU << 1 ) /* high of K_544_480 */
};
/**
* crc_table [ ] from jdk / src / share / native / java / util / zip / zlib - 1 . 2 . 5 / crc32 . h
*/
juint StubRoutines::x86::_crc_table[] =
{
0 x00000000UL, 0 x77073096UL, 0 xee0e612cUL, 0 x990951baUL, 0 x076dc419UL,
0 x706af48fUL, 0 xe963a535UL, 0 x9e6495a3UL, 0 x0edb8832UL, 0 x79dcb8a4UL,
0 xe0d5e91eUL, 0 x97d2d988UL, 0 x09b64c2bUL, 0 x7eb17cbdUL, 0 xe7b82d07UL,
0 x90bf1d91UL, 0 x1db71064UL, 0 x6ab020f2UL, 0 xf3b97148UL, 0 x84be41deUL,
0 x1adad47dUL, 0 x6ddde4ebUL, 0 xf4d4b551UL, 0 x83d385c7UL, 0 x136c9856UL,
0 x646ba8c0UL, 0 xfd62f97aUL, 0 x8a65c9ecUL, 0 x14015c4fUL, 0 x63066cd9UL,
0 xfa0f3d63UL, 0 x8d080df5UL, 0 x3b6e20c8UL, 0 x4c69105eUL, 0 xd56041e4UL,
0 xa2677172UL, 0 x3c03e4d1UL, 0 x4b04d447UL, 0 xd20d85fdUL, 0 xa50ab56bUL,
0 x35b5a8faUL, 0 x42b2986cUL, 0 xdbbbc9d6UL, 0 xacbcf940UL, 0 x32d86ce3UL,
0 x45df5c75UL, 0 xdcd60dcfUL, 0 xabd13d59UL, 0 x26d930acUL, 0 x51de003aUL,
0 xc8d75180UL, 0 xbfd06116UL, 0 x21b4f4b5UL, 0 x56b3c423UL, 0 xcfba9599UL,
0 xb8bda50fUL, 0 x2802b89eUL, 0 x5f058808UL, 0 xc60cd9b2UL, 0 xb10be924UL,
0 x2f6f7c87UL, 0 x58684c11UL, 0 xc1611dabUL, 0 xb6662d3dUL, 0 x76dc4190UL,
0 x01db7106UL, 0 x98d220bcUL, 0 xefd5102aUL, 0 x71b18589UL, 0 x06b6b51fUL,
0 x9fbfe4a5UL, 0 xe8b8d433UL, 0 x7807c9a2UL, 0 x0f00f934UL, 0 x9609a88eUL,
0 xe10e9818UL, 0 x7f6a0dbbUL, 0 x086d3d2dUL, 0 x91646c97UL, 0 xe6635c01UL,
0 x6b6b51f4UL, 0 x1c6c6162UL, 0 x856530d8UL, 0 xf262004eUL, 0 x6c0695edUL,
0 x1b01a57bUL, 0 x8208f4c1UL, 0 xf50fc457UL, 0 x65b0d9c6UL, 0 x12b7e950UL,
0 x8bbeb8eaUL, 0 xfcb9887cUL, 0 x62dd1ddfUL, 0 x15da2d49UL, 0 x8cd37cf3UL,
0 xfbd44c65UL, 0 x4db26158UL, 0 x3ab551ceUL, 0 xa3bc0074UL, 0 xd4bb30e2UL,
0 x4adfa541UL, 0 x3dd895d7UL, 0 xa4d1c46dUL, 0 xd3d6f4fbUL, 0 x4369e96aUL,
0 x346ed9fcUL, 0 xad678846UL, 0 xda60b8d0UL, 0 x44042d73UL, 0 x33031de5UL,
0 xaa0a4c5fUL, 0 xdd0d7cc9UL, 0 x5005713cUL, 0 x270241aaUL, 0 xbe0b1010UL,
0 xc90c2086UL, 0 x5768b525UL, 0 x206f85b3UL, 0 xb966d409UL, 0 xce61e49fUL,
0 x5edef90eUL, 0 x29d9c998UL, 0 xb0d09822UL, 0 xc7d7a8b4UL, 0 x59b33d17UL,
0 x2eb40d81UL, 0 xb7bd5c3bUL, 0 xc0ba6cadUL, 0 xedb88320UL, 0 x9abfb3b6UL,
0 x03b6e20cUL, 0 x74b1d29aUL, 0 xead54739UL, 0 x9dd277afUL, 0 x04db2615UL,
0 x73dc1683UL, 0 xe3630b12UL, 0 x94643b84UL, 0 x0d6d6a3eUL, 0 x7a6a5aa8UL,
0 xe40ecf0bUL, 0 x9309ff9dUL, 0 x0a00ae27UL, 0 x7d079eb1UL, 0 xf00f9344UL,
0 x8708a3d2UL, 0 x1e01f268UL, 0 x6906c2feUL, 0 xf762575dUL, 0 x806567cbUL,
0 x196c3671UL, 0 x6e6b06e7UL, 0 xfed41b76UL, 0 x89d32be0UL, 0 x10da7a5aUL,
0 x67dd4accUL, 0 xf9b9df6fUL, 0 x8ebeeff9UL, 0 x17b7be43UL, 0 x60b08ed5UL,
0 xd6d6a3e8UL, 0 xa1d1937eUL, 0 x38d8c2c4UL, 0 x4fdff252UL, 0 xd1bb67f1UL,
0 xa6bc5767UL, 0 x3fb506ddUL, 0 x48b2364bUL, 0 xd80d2bdaUL, 0 xaf0a1b4cUL,
0 x36034af6UL, 0 x41047a60UL, 0 xdf60efc3UL, 0 xa867df55UL, 0 x316e8eefUL,
0 x4669be79UL, 0 xcb61b38cUL, 0 xbc66831aUL, 0 x256fd2a0UL, 0 x5268e236UL,
0 xcc0c7795UL, 0 xbb0b4703UL, 0 x220216b9UL, 0 x5505262fUL, 0 xc5ba3bbeUL,
0 xb2bd0b28UL, 0 x2bb45a92UL, 0 x5cb36a04UL, 0 xc2d7ffa7UL, 0 xb5d0cf31UL,
0 x2cd99e8bUL, 0 x5bdeae1dUL, 0 x9b64c2b0UL, 0 xec63f226UL, 0 x756aa39cUL,
0 x026d930aUL, 0 x9c0906a9UL, 0 xeb0e363fUL, 0 x72076785UL, 0 x05005713UL,
0 x95bf4a82UL, 0 xe2b87a14UL, 0 x7bb12baeUL, 0 x0cb61b38UL, 0 x92d28e9bUL,
0 xe5d5be0dUL, 0 x7cdcefb7UL, 0 x0bdbdf21UL, 0 x86d3d2d4UL, 0 xf1d4e242UL,
0 x68ddb3f8UL, 0 x1fda836eUL, 0 x81be16cdUL, 0 xf6b9265bUL, 0 x6fb077e1UL,
0 x18b74777UL, 0 x88085ae6UL, 0 xff0f6a70UL, 0 x66063bcaUL, 0 x11010b5cUL,
0 x8f659effUL, 0 xf862ae69UL, 0 x616bffd3UL, 0 x166ccf45UL, 0 xa00ae278UL,
0 xd70dd2eeUL, 0 x4e048354UL, 0 x3903b3c2UL, 0 xa7672661UL, 0 xd06016f7UL,
0 x4969474dUL, 0 x3e6e77dbUL, 0 xaed16a4aUL, 0 xd9d65adcUL, 0 x40df0b66UL,
0 x37d83bf0UL, 0 xa9bcae53UL, 0 xdebb9ec5UL, 0 x47b2cf7fUL, 0 x30b5ffe9UL,
0 xbdbdf21cUL, 0 xcabac28aUL, 0 x53b39330UL, 0 x24b4a3a6UL, 0 xbad03605UL,
0 xcdd70693UL, 0 x54de5729UL, 0 x23d967bfUL, 0 xb3667a2eUL, 0 xc4614ab8UL,
0 x5d681b02UL, 0 x2a6f2b94UL, 0 xb40bbe37UL, 0 xc30c8ea1UL, 0 x5a05df1bUL,
0 x2d02ef8dUL
};
#ifdef _LP64
juint StubRoutines::x86::_crc_table_avx512[] =
{
0 xe95c1271UL, 0 x00000000UL, 0 xce3371cbUL, 0 x00000000UL,
0 xccaa009eUL, 0 x00000000UL, 0 x751997d0UL, 0 x00000001UL,
0 x4a7fe880UL, 0 x00000001UL, 0 xe88ef372UL, 0 x00000001UL,
0 xccaa009eUL, 0 x00000000UL, 0 x63cd6124UL, 0 x00000001UL,
0 xf7011640UL, 0 x00000001UL, 0 xdb710640UL, 0 x00000001UL,
0 xd7cfc6acUL, 0 x00000001UL, 0 xea89367eUL, 0 x00000001UL,
0 x8cb44e58UL, 0 x00000001UL, 0 xdf068dc2UL, 0 x00000000UL,
0 xae0b5394UL, 0 x00000000UL, 0 xc7569e54UL, 0 x00000001UL,
0 xc6e41596UL, 0 x00000001UL, 0 x54442bd4UL, 0 x00000001UL,
0 x74359406UL, 0 x00000001UL, 0 x3db1ecdcUL, 0 x00000000UL,
0 x5a546366UL, 0 x00000001UL, 0 xf1da05aaUL, 0 x00000000UL,
0 xccaa009eUL, 0 x00000000UL, 0 x751997d0UL, 0 x00000001UL,
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL
};
juint StubRoutines::x86::_crc32c_table_avx512[] =
{
0 xb9e02b86UL, 0 x00000000UL, 0 xdcb17aa4UL, 0 x00000000UL,
0 x493c7d27UL, 0 x00000000UL, 0 xc1068c50UL, 0 x0000000eUL,
0 x06e38d70UL, 0 x00000002UL, 0 x6992cea2UL, 0 x00000000UL,
0 x493c7d27UL, 0 x00000000UL, 0 xdd45aab8UL, 0 x00000000UL,
0 xdea713f0UL, 0 x00000000UL, 0 x05ec76f0UL, 0 x00000001UL,
0 x47db8317UL, 0 x00000000UL, 0 x2ad91c30UL, 0 x00000000UL,
0 x0715ce53UL, 0 x00000000UL, 0 xc49f4f67UL, 0 x00000000UL,
0 x39d3b296UL, 0 x00000000UL, 0 x083a6eecUL, 0 x00000000UL,
0 x9e4addf8UL, 0 x00000000UL, 0 x740eef02UL, 0 x00000000UL,
0 xddc0152bUL, 0 x00000000UL, 0 x1c291d04UL, 0 x00000000UL,
0 xba4fc28eUL, 0 x00000000UL, 0 x3da6d0cbUL, 0 x00000000UL,
0 x493c7d27UL, 0 x00000000UL, 0 xc1068c50UL, 0 x0000000eUL,
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL
};
juint StubRoutines::x86::_crc_by128_masks_avx512[] =
{
0 xffffffffUL, 0 xffffffffUL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 xffffffffUL, 0 xffffffffUL, 0 xffffffffUL,
0 x80808080UL, 0 x80808080UL, 0 x80808080UL, 0 x80808080UL
};
juint StubRoutines::x86::_shuf_table_crc32_avx512[] =
{
0 x83828100UL, 0 x87868584UL, 0 x8b8a8988UL, 0 x8f8e8d8cUL,
0 x03020100UL, 0 x07060504UL, 0 x0b0a0908UL, 0 x000e0d0cUL
};
#endif // _LP64
#define D 32
#define P 0 x82F63B78 // Reflection of Castagnoli (0x11EDC6F41)
#define TILL_CYCLE 31
uint32_t _crc32c_pow_2k_table[TILL_CYCLE]; // because _crc32c_pow_2k_table[TILL_CYCLE == 31] == _crc32c_pow_2k_table[0]
// A. Kadatch and B. Jenkins / Everything we know about CRC but afraid to forget September 3, 2010 8
// Listing 1: Multiplication of normalized polynomials
// "a" and "b" occupy D least significant bits.
uint32_t crc32c_multiply(uint32_t a, uint32_t b) {
uint32_t product = 0 ;
uint32_t b_pow_x_table[D + 1 ]; // b_pow_x_table[k] = (b * x**k) mod P
b_pow_x_table[0 ] = b;
for (int k = 0 ; k < D; ++k) {
// If "a" has non-zero coefficient at x**k,/ add ((b * x**k) mod P) to the result.
if ((a & (((uint32_t)1 ) << (D - 1 - k))) != 0 ) product ^= b_pow_x_table[k];
// Compute b_pow_x_table[k+1] = (b ** x**(k+1)) mod P.
if (b_pow_x_table[k] & 1 ) {
// If degree of (b_pow_x_table[k] * x) is D, then
// degree of (b_pow_x_table[k] * x - P) is less than D.
b_pow_x_table[k + 1 ] = (b_pow_x_table[k] >> 1 ) ^ P;
}
else {
b_pow_x_table[k + 1 ] = b_pow_x_table[k] >> 1 ;
}
}
return product;
}
#undef D
#undef P
// A. Kadatch and B. Jenkins / Everything we know about CRC but afraid to forget September 3, 2010 9
void crc32c_init_pow_2k(void ) {
// _crc32c_pow_2k_table(0) =
// x^(2^k) mod P(x) = x mod P(x) = x
// Since we are operating on a reflected values
// x = 10b, reflect(x) = 0x40000000
_crc32c_pow_2k_table[0 ] = 0 x40000000;
for (int k = 1 ; k < TILL_CYCLE; k++) {
// _crc32c_pow_2k_table(k+1) = _crc32c_pow_2k_table(k-1)^2 mod P(x)
uint32_t tmp = _crc32c_pow_2k_table[k - 1 ];
_crc32c_pow_2k_table[k] = crc32c_multiply(tmp, tmp);
}
}
// x^N mod P(x)
uint32_t crc32c_f_pow_n(uint32_t n) {
// result = 1 (polynomial)
uint32_t one, result = 0 x80000000, i = 0 ;
while (one = (n & 1 ), (n == 1 || n - one > 0 )) {
if (one) {
result = crc32c_multiply(result, _crc32c_pow_2k_table[i]);
}
n >>= 1 ;
i++;
}
return result;
}
juint *StubRoutines::x86::_crc32c_table;
void StubRoutines::x86::generate_CRC32C_table(bool is_pclmulqdq_table_supported) {
static juint pow_n[CRC32C_NUM_PRECOMPUTED_CONSTANTS];
crc32c_init_pow_2k();
pow_n[0 ] = crc32c_f_pow_n(CRC32C_HIGH * 8 ); // 8N * 8 = 64N
pow_n[1 ] = crc32c_f_pow_n(CRC32C_HIGH * 8 * 2 ); // 128N
pow_n[2 ] = crc32c_f_pow_n(CRC32C_MIDDLE * 8 );
pow_n[3 ] = crc32c_f_pow_n(CRC32C_MIDDLE * 8 * 2 );
pow_n[4 ] = crc32c_f_pow_n(CRC32C_LOW * 8 );
pow_n[CRC32C_NUM_PRECOMPUTED_CONSTANTS - 1 ] =
crc32c_f_pow_n(CRC32C_LOW * 8 * 2 );
if (is_pclmulqdq_table_supported) {
_crc32c_table = pow_n;
} else {
static julong pclmulqdq_table[CRC32C_NUM_PRECOMPUTED_CONSTANTS * 256 ];
for (int j = 0 ; j < CRC32C_NUM_PRECOMPUTED_CONSTANTS; j++) {
static juint X_CONST = pow_n[j];
for (int64_t i = 0 ; i < 256 ; i++) { // to force 64 bit wide computations
// S. Gueron / Information Processing Letters 112 (2012) 184
// Algorithm 3: Generating a carry-less multiplication lookup table.
// Input: A 32-bit constant, X_CONST.
// Output: A table of 256 entries, each one is a 64-bit quadword,
// that can be used for computing "byte" * X_CONST, for a given byte.
pclmulqdq_table[j * 256 + i] =
((i & 1 ) * X_CONST) ^ ((i & 2 ) * X_CONST) ^ ((i & 4 ) * X_CONST) ^
((i & 8 ) * X_CONST) ^ ((i & 16 ) * X_CONST) ^ ((i & 32 ) * X_CONST) ^
((i & 64 ) * X_CONST) ^ ((i & 128 ) * X_CONST);
}
}
_crc32c_table = (juint*)pclmulqdq_table;
}
}
ATTRIBUTE_ALIGNED(64 ) juint StubRoutines::x86::_k256[] =
{
0 x428a2f98UL, 0 x71374491UL, 0 xb5c0fbcfUL, 0 xe9b5dba5UL,
0 x3956c25bUL, 0 x59f111f1UL, 0 x923f82a4UL, 0 xab1c5ed5UL,
0 xd807aa98UL, 0 x12835b01UL, 0 x243185beUL, 0 x550c7dc3UL,
0 x72be5d74UL, 0 x80deb1feUL, 0 x9bdc06a7UL, 0 xc19bf174UL,
0 xe49b69c1UL, 0 xefbe4786UL, 0 x0fc19dc6UL, 0 x240ca1ccUL,
0 x2de92c6fUL, 0 x4a7484aaUL, 0 x5cb0a9dcUL, 0 x76f988daUL,
0 x983e5152UL, 0 xa831c66dUL, 0 xb00327c8UL, 0 xbf597fc7UL,
0 xc6e00bf3UL, 0 xd5a79147UL, 0 x06ca6351UL, 0 x14292967UL,
0 x27b70a85UL, 0 x2e1b2138UL, 0 x4d2c6dfcUL, 0 x53380d13UL,
0 x650a7354UL, 0 x766a0abbUL, 0 x81c2c92eUL, 0 x92722c85UL,
0 xa2bfe8a1UL, 0 xa81a664bUL, 0 xc24b8b70UL, 0 xc76c51a3UL,
0 xd192e819UL, 0 xd6990624UL, 0 xf40e3585UL, 0 x106aa070UL,
0 x19a4c116UL, 0 x1e376c08UL, 0 x2748774cUL, 0 x34b0bcb5UL,
0 x391c0cb3UL, 0 x4ed8aa4aUL, 0 x5b9cca4fUL, 0 x682e6ff3UL,
0 x748f82eeUL, 0 x78a5636fUL, 0 x84c87814UL, 0 x8cc70208UL,
0 x90befffaUL, 0 xa4506cebUL, 0 xbef9a3f7UL, 0 xc67178f2UL
};
#ifdef _LP64
// used in MacroAssembler::sha256_AVX2
// dynamically built from _k256
ATTRIBUTE_ALIGNED(64 ) juint StubRoutines::x86::_k256_W[2 *sizeof (StubRoutines::x86::_k256)];
// used in MacroAssembler::sha512_AVX2
ATTRIBUTE_ALIGNED(64 ) julong StubRoutines::x86::_k512_W[] =
{
0 x428a2f98d728ae22ULL, 0 x7137449123ef65cdULL,
0 xb5c0fbcfec4d3b2fULL, 0 xe9b5dba58189dbbcULL,
0 x3956c25bf348b538ULL, 0 x59f111f1b605d019ULL,
0 x923f82a4af194f9bULL, 0 xab1c5ed5da6d8118ULL,
0 xd807aa98a3030242ULL, 0 x12835b0145706fbeULL,
0 x243185be4ee4b28cULL, 0 x550c7dc3d5ffb4e2ULL,
0 x72be5d74f27b896fULL, 0 x80deb1fe3b1696b1ULL,
0 x9bdc06a725c71235ULL, 0 xc19bf174cf692694ULL,
0 xe49b69c19ef14ad2ULL, 0 xefbe4786384f25e3ULL,
0 x0fc19dc68b8cd5b5ULL, 0 x240ca1cc77ac9c65ULL,
0 x2de92c6f592b0275ULL, 0 x4a7484aa6ea6e483ULL,
0 x5cb0a9dcbd41fbd4ULL, 0 x76f988da831153b5ULL,
0 x983e5152ee66dfabULL, 0 xa831c66d2db43210ULL,
0 xb00327c898fb213fULL, 0 xbf597fc7beef0ee4ULL,
0 xc6e00bf33da88fc2ULL, 0 xd5a79147930aa725ULL,
0 x06ca6351e003826fULL, 0 x142929670a0e6e70ULL,
0 x27b70a8546d22ffcULL, 0 x2e1b21385c26c926ULL,
0 x4d2c6dfc5ac42aedULL, 0 x53380d139d95b3dfULL,
0 x650a73548baf63deULL, 0 x766a0abb3c77b2a8ULL,
0 x81c2c92e47edaee6ULL, 0 x92722c851482353bULL,
0 xa2bfe8a14cf10364ULL, 0 xa81a664bbc423001ULL,
0 xc24b8b70d0f89791ULL, 0 xc76c51a30654be30ULL,
0 xd192e819d6ef5218ULL, 0 xd69906245565a910ULL,
0 xf40e35855771202aULL, 0 x106aa07032bbd1b8ULL,
0 x19a4c116b8d2d0c8ULL, 0 x1e376c085141ab53ULL,
0 x2748774cdf8eeb99ULL, 0 x34b0bcb5e19b48a8ULL,
0 x391c0cb3c5c95a63ULL, 0 x4ed8aa4ae3418acbULL,
0 x5b9cca4f7763e373ULL, 0 x682e6ff3d6b2b8a3ULL,
0 x748f82ee5defb2fcULL, 0 x78a5636f43172f60ULL,
0 x84c87814a1f0ab72ULL, 0 x8cc702081a6439ecULL,
0 x90befffa23631e28ULL, 0 xa4506cebde82bde9ULL,
0 xbef9a3f7b2c67915ULL, 0 xc67178f2e372532bULL,
0 xca273eceea26619cULL, 0 xd186b8c721c0c207ULL,
0 xeada7dd6cde0eb1eULL, 0 xf57d4f7fee6ed178ULL,
0 x06f067aa72176fbaULL, 0 x0a637dc5a2c898a6ULL,
0 x113f9804bef90daeULL, 0 x1b710b35131c471bULL,
0 x28db77f523047d84ULL, 0 x32caab7b40c72493ULL,
0 x3c9ebe0a15c9bebcULL, 0 x431d67c49c100d4cULL,
0 x4cc5d4becb3e42b6ULL, 0 x597f299cfc657e2aULL,
0 x5fcb6fab3ad6faecULL, 0 x6c44198c4a475817ULL,
};
#endif
Messung V0.5 in Prozent C=87 H=96 G=91
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-11)
¤
*© Formatika GbR, Deutschland