8339738: RISC-V: Vectorize crc32 intrinsic
Reviewed-by: fyang, luhenry
This commit is contained in:
parent
1d070a3238
commit
08a2f841ec
@ -1454,6 +1454,103 @@ void MacroAssembler::update_word_crc32(Register crc, Register v, Register tmp1,
|
||||
xorr(crc, crc, tmp2);
|
||||
}
|
||||
|
||||
|
||||
// This improvement (vectorization) is based on java.base/share/native/libzip/zlib/zcrc32.c.
|
||||
// To make it, following steps are taken:
|
||||
// 1. in zcrc32.c, modify N to 16 and related code,
|
||||
// 2. re-generate the tables needed, we use tables of (N == 16, W == 4)
|
||||
// 3. finally vectorize the code (original implementation in zcrc32.c is just scalar code).
|
||||
// New tables for vector version is after table3.
|
||||
void MacroAssembler::vector_update_crc32(Register crc, Register buf, Register len,
|
||||
Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
|
||||
Register table0, Register table3) {
|
||||
assert_different_registers(t1, crc, buf, len, tmp1, tmp2, tmp3, tmp4, tmp5, table0, table3);
|
||||
const int N = 16, W = 4;
|
||||
const int64_t single_table_size = 256;
|
||||
const Register blks = tmp2;
|
||||
const Register tmpTable = tmp3, tableN16 = tmp4;
|
||||
const VectorRegister vcrc = v4, vword = v8, vtmp = v12;
|
||||
Label VectorLoop;
|
||||
Label LastBlock;
|
||||
|
||||
add(tableN16, table3, 1*single_table_size*sizeof(juint), tmp1);
|
||||
mv(tmp5, 0xff);
|
||||
|
||||
if (MaxVectorSize == 16) {
|
||||
vsetivli(zr, N, Assembler::e32, Assembler::m4, Assembler::ma, Assembler::ta);
|
||||
} else if (MaxVectorSize == 32) {
|
||||
vsetivli(zr, N, Assembler::e32, Assembler::m2, Assembler::ma, Assembler::ta);
|
||||
} else {
|
||||
assert(MaxVectorSize > 32, "sanity");
|
||||
vsetivli(zr, N, Assembler::e32, Assembler::m1, Assembler::ma, Assembler::ta);
|
||||
}
|
||||
|
||||
vmv_v_x(vcrc, zr);
|
||||
vmv_s_x(vcrc, crc);
|
||||
|
||||
// multiple of 64
|
||||
srli(blks, len, 6);
|
||||
slli(t1, blks, 6);
|
||||
sub(len, len, t1);
|
||||
sub(blks, blks, 1);
|
||||
blez(blks, LastBlock);
|
||||
|
||||
bind(VectorLoop);
|
||||
{
|
||||
mv(tmpTable, tableN16);
|
||||
|
||||
vle32_v(vword, buf);
|
||||
vxor_vv(vword, vword, vcrc);
|
||||
|
||||
addi(buf, buf, N*4);
|
||||
|
||||
vand_vx(vtmp, vword, tmp5);
|
||||
vsll_vi(vtmp, vtmp, 2);
|
||||
vluxei32_v(vcrc, tmpTable, vtmp);
|
||||
|
||||
mv(tmp1, 1);
|
||||
for (int k = 1; k < W; k++) {
|
||||
addi(tmpTable, tmpTable, single_table_size*4);
|
||||
|
||||
slli(t1, tmp1, 3);
|
||||
vsrl_vx(vtmp, vword, t1);
|
||||
|
||||
vand_vx(vtmp, vtmp, tmp5);
|
||||
vsll_vi(vtmp, vtmp, 2);
|
||||
vluxei32_v(vtmp, tmpTable, vtmp);
|
||||
|
||||
vxor_vv(vcrc, vcrc, vtmp);
|
||||
|
||||
addi(tmp1, tmp1, 1);
|
||||
}
|
||||
|
||||
sub(blks, blks, 1);
|
||||
bgtz(blks, VectorLoop);
|
||||
}
|
||||
|
||||
bind(LastBlock);
|
||||
{
|
||||
vle32_v(vtmp, buf);
|
||||
vxor_vv(vcrc, vcrc, vtmp);
|
||||
mv(crc, zr);
|
||||
for (int i = 0; i < N; i++) {
|
||||
vmv_x_s(tmp2, vcrc);
|
||||
// in vmv_x_s, the value is sign-extended to SEW bits, but we need zero-extended here.
|
||||
zext_w(tmp2, tmp2);
|
||||
vslidedown_vi(vcrc, vcrc, 1);
|
||||
xorr(crc, crc, tmp2);
|
||||
for (int j = 0; j < W; j++) {
|
||||
andr(t1, crc, tmp5);
|
||||
shadd(t1, t1, table0, tmp1, 2);
|
||||
lwu(t1, Address(t1, 0));
|
||||
srli(tmp2, crc, 8);
|
||||
xorr(crc, tmp2, t1);
|
||||
}
|
||||
}
|
||||
addi(buf, buf, N*4);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param crc register containing existing CRC (32-bit)
|
||||
* @param buf register pointing to input byte buffer (byte*)
|
||||
@ -1465,21 +1562,28 @@ void MacroAssembler::kernel_crc32(Register crc, Register buf, Register len,
|
||||
Register table0, Register table1, Register table2, Register table3,
|
||||
Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5, Register tmp6) {
|
||||
assert_different_registers(crc, buf, len, table0, table1, table2, table3, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6);
|
||||
Label L_by16_loop, L_unroll_loop, L_unroll_loop_entry, L_by4, L_by4_loop, L_by1, L_by1_loop, L_exit;
|
||||
Label L_by16_loop, L_vector_entry, L_unroll_loop, L_unroll_loop_entry, L_by4, L_by4_loop, L_by1, L_by1_loop, L_exit;
|
||||
|
||||
const int64_t single_table_size = 256;
|
||||
const int64_t unroll = 16;
|
||||
const int64_t unroll_words = unroll*wordSize;
|
||||
mv(tmp5, right_32_bits);
|
||||
subw(len, len, unroll_words);
|
||||
andn(crc, tmp5, crc);
|
||||
|
||||
const ExternalAddress table_addr = StubRoutines::crc_table_addr();
|
||||
la(table0, table_addr);
|
||||
add(table1, table0, 1*256*sizeof(juint), tmp1);
|
||||
add(table2, table0, 2*256*sizeof(juint), tmp1);
|
||||
add(table3, table2, 1*256*sizeof(juint), tmp1);
|
||||
add(table1, table0, 1*single_table_size*sizeof(juint), tmp1);
|
||||
add(table2, table0, 2*single_table_size*sizeof(juint), tmp1);
|
||||
add(table3, table2, 1*single_table_size*sizeof(juint), tmp1);
|
||||
|
||||
if (UseRVV) {
|
||||
const int64_t tmp_limit = MaxVectorSize >= 32 ? unroll_words*3 : unroll_words*5;
|
||||
mv(tmp1, tmp_limit);
|
||||
bge(len, tmp1, L_vector_entry);
|
||||
}
|
||||
subw(len, len, unroll_words);
|
||||
bge(len, zr, L_unroll_loop_entry);
|
||||
|
||||
addiw(len, len, unroll_words-4);
|
||||
bge(len, zr, L_by4_loop);
|
||||
addiw(len, len, 4);
|
||||
@ -1539,6 +1643,19 @@ void MacroAssembler::kernel_crc32(Register crc, Register buf, Register len,
|
||||
andi(tmp2, tmp2, right_8_bits);
|
||||
update_byte_crc32(crc, tmp2, table0);
|
||||
|
||||
// put vector code here, otherwise "offset is too large" error occurs.
|
||||
if (UseRVV) {
|
||||
j(L_exit); // only need to jump exit when UseRVV == true, it's a jump from end of block `L_by1_loop`.
|
||||
|
||||
bind(L_vector_entry);
|
||||
vector_update_crc32(crc, buf, len, tmp1, tmp2, tmp3, tmp4, tmp6, table0, table3);
|
||||
|
||||
addiw(len, len, -4);
|
||||
bge(len, zr, L_by4_loop);
|
||||
addiw(len, len, 4);
|
||||
bgt(len, zr, L_by1_loop);
|
||||
}
|
||||
|
||||
bind(L_exit);
|
||||
andn(crc, tmp5, crc);
|
||||
}
|
||||
|
@ -1319,6 +1319,9 @@ public:
|
||||
Register table0, Register table1, Register table2, Register table3,
|
||||
bool upper);
|
||||
void update_byte_crc32(Register crc, Register val, Register table);
|
||||
void vector_update_crc32(Register crc, Register buf, Register len,
|
||||
Register tmp1, Register tmp2, Register tmp3, Register tmp4, Register tmp5,
|
||||
Register table0, Register table3);
|
||||
|
||||
#ifdef COMPILER2
|
||||
void mul_add(Register out, Register in, Register offset,
|
||||
|
@ -276,4 +276,219 @@ ATTRIBUTE_ALIGNED(4096) juint StubRoutines::riscv::_crc_table[] =
|
||||
0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
|
||||
0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
|
||||
0xde0506f1UL,
|
||||
|
||||
// Tables for vector version
|
||||
// This improvement (vectorization) is based on java.base/share/native/libzip/zlib/zcrc32.c.
|
||||
// To make it, following steps are taken:
|
||||
// 1. in zcrc32.c, modify N to 16 and related code,
|
||||
// 2. re-generate the tables needed, we use tables of (N == 16, W == 4)
|
||||
// 3. finally vectorize the code (original implementation in zcrc32.c is just scalar code).
|
||||
0x00000000, 0x8f352d95, 0xc51b5d6b, 0x4a2e70fe, 0x5147bc97,
|
||||
0xde729102, 0x945ce1fc, 0x1b69cc69, 0xa28f792e, 0x2dba54bb,
|
||||
0x67942445, 0xe8a109d0, 0xf3c8c5b9, 0x7cfde82c, 0x36d398d2,
|
||||
0xb9e6b547, 0x9e6ff41d, 0x115ad988, 0x5b74a976, 0xd44184e3,
|
||||
0xcf28488a, 0x401d651f, 0x0a3315e1, 0x85063874, 0x3ce08d33,
|
||||
0xb3d5a0a6, 0xf9fbd058, 0x76cefdcd, 0x6da731a4, 0xe2921c31,
|
||||
0xa8bc6ccf, 0x2789415a, 0xe7aeee7b, 0x689bc3ee, 0x22b5b310,
|
||||
0xad809e85, 0xb6e952ec, 0x39dc7f79, 0x73f20f87, 0xfcc72212,
|
||||
0x45219755, 0xca14bac0, 0x803aca3e, 0x0f0fe7ab, 0x14662bc2,
|
||||
0x9b530657, 0xd17d76a9, 0x5e485b3c, 0x79c11a66, 0xf6f437f3,
|
||||
0xbcda470d, 0x33ef6a98, 0x2886a6f1, 0xa7b38b64, 0xed9dfb9a,
|
||||
0x62a8d60f, 0xdb4e6348, 0x547b4edd, 0x1e553e23, 0x916013b6,
|
||||
0x8a09dfdf, 0x053cf24a, 0x4f1282b4, 0xc027af21, 0x142cdab7,
|
||||
0x9b19f722, 0xd13787dc, 0x5e02aa49, 0x456b6620, 0xca5e4bb5,
|
||||
0x80703b4b, 0x0f4516de, 0xb6a3a399, 0x39968e0c, 0x73b8fef2,
|
||||
0xfc8dd367, 0xe7e41f0e, 0x68d1329b, 0x22ff4265, 0xadca6ff0,
|
||||
0x8a432eaa, 0x0576033f, 0x4f5873c1, 0xc06d5e54, 0xdb04923d,
|
||||
0x5431bfa8, 0x1e1fcf56, 0x912ae2c3, 0x28cc5784, 0xa7f97a11,
|
||||
0xedd70aef, 0x62e2277a, 0x798beb13, 0xf6bec686, 0xbc90b678,
|
||||
0x33a59bed, 0xf38234cc, 0x7cb71959, 0x369969a7, 0xb9ac4432,
|
||||
0xa2c5885b, 0x2df0a5ce, 0x67ded530, 0xe8ebf8a5, 0x510d4de2,
|
||||
0xde386077, 0x94161089, 0x1b233d1c, 0x004af175, 0x8f7fdce0,
|
||||
0xc551ac1e, 0x4a64818b, 0x6dedc0d1, 0xe2d8ed44, 0xa8f69dba,
|
||||
0x27c3b02f, 0x3caa7c46, 0xb39f51d3, 0xf9b1212d, 0x76840cb8,
|
||||
0xcf62b9ff, 0x4057946a, 0x0a79e494, 0x854cc901, 0x9e250568,
|
||||
0x111028fd, 0x5b3e5803, 0xd40b7596, 0x2859b56e, 0xa76c98fb,
|
||||
0xed42e805, 0x6277c590, 0x791e09f9, 0xf62b246c, 0xbc055492,
|
||||
0x33307907, 0x8ad6cc40, 0x05e3e1d5, 0x4fcd912b, 0xc0f8bcbe,
|
||||
0xdb9170d7, 0x54a45d42, 0x1e8a2dbc, 0x91bf0029, 0xb6364173,
|
||||
0x39036ce6, 0x732d1c18, 0xfc18318d, 0xe771fde4, 0x6844d071,
|
||||
0x226aa08f, 0xad5f8d1a, 0x14b9385d, 0x9b8c15c8, 0xd1a26536,
|
||||
0x5e9748a3, 0x45fe84ca, 0xcacba95f, 0x80e5d9a1, 0x0fd0f434,
|
||||
0xcff75b15, 0x40c27680, 0x0aec067e, 0x85d92beb, 0x9eb0e782,
|
||||
0x1185ca17, 0x5babbae9, 0xd49e977c, 0x6d78223b, 0xe24d0fae,
|
||||
0xa8637f50, 0x275652c5, 0x3c3f9eac, 0xb30ab339, 0xf924c3c7,
|
||||
0x7611ee52, 0x5198af08, 0xdead829d, 0x9483f263, 0x1bb6dff6,
|
||||
0x00df139f, 0x8fea3e0a, 0xc5c44ef4, 0x4af16361, 0xf317d626,
|
||||
0x7c22fbb3, 0x360c8b4d, 0xb939a6d8, 0xa2506ab1, 0x2d654724,
|
||||
0x674b37da, 0xe87e1a4f, 0x3c756fd9, 0xb340424c, 0xf96e32b2,
|
||||
0x765b1f27, 0x6d32d34e, 0xe207fedb, 0xa8298e25, 0x271ca3b0,
|
||||
0x9efa16f7, 0x11cf3b62, 0x5be14b9c, 0xd4d46609, 0xcfbdaa60,
|
||||
0x408887f5, 0x0aa6f70b, 0x8593da9e, 0xa21a9bc4, 0x2d2fb651,
|
||||
0x6701c6af, 0xe834eb3a, 0xf35d2753, 0x7c680ac6, 0x36467a38,
|
||||
0xb97357ad, 0x0095e2ea, 0x8fa0cf7f, 0xc58ebf81, 0x4abb9214,
|
||||
0x51d25e7d, 0xdee773e8, 0x94c90316, 0x1bfc2e83, 0xdbdb81a2,
|
||||
0x54eeac37, 0x1ec0dcc9, 0x91f5f15c, 0x8a9c3d35, 0x05a910a0,
|
||||
0x4f87605e, 0xc0b24dcb, 0x7954f88c, 0xf661d519, 0xbc4fa5e7,
|
||||
0x337a8872, 0x2813441b, 0xa726698e, 0xed081970, 0x623d34e5,
|
||||
0x45b475bf, 0xca81582a, 0x80af28d4, 0x0f9a0541, 0x14f3c928,
|
||||
0x9bc6e4bd, 0xd1e89443, 0x5eddb9d6, 0xe73b0c91, 0x680e2104,
|
||||
0x222051fa, 0xad157c6f, 0xb67cb006, 0x39499d93, 0x7367ed6d,
|
||||
0xfc52c0f8,
|
||||
0x00000000, 0x50b36adc, 0xa166d5b8, 0xf1d5bf64, 0x99bcad31,
|
||||
0xc90fc7ed, 0x38da7889, 0x68691255, 0xe8085c23, 0xb8bb36ff,
|
||||
0x496e899b, 0x19dde347, 0x71b4f112, 0x21079bce, 0xd0d224aa,
|
||||
0x80614e76, 0x0b61be07, 0x5bd2d4db, 0xaa076bbf, 0xfab40163,
|
||||
0x92dd1336, 0xc26e79ea, 0x33bbc68e, 0x6308ac52, 0xe369e224,
|
||||
0xb3da88f8, 0x420f379c, 0x12bc5d40, 0x7ad54f15, 0x2a6625c9,
|
||||
0xdbb39aad, 0x8b00f071, 0x16c37c0e, 0x467016d2, 0xb7a5a9b6,
|
||||
0xe716c36a, 0x8f7fd13f, 0xdfccbbe3, 0x2e190487, 0x7eaa6e5b,
|
||||
0xfecb202d, 0xae784af1, 0x5fadf595, 0x0f1e9f49, 0x67778d1c,
|
||||
0x37c4e7c0, 0xc61158a4, 0x96a23278, 0x1da2c209, 0x4d11a8d5,
|
||||
0xbcc417b1, 0xec777d6d, 0x841e6f38, 0xd4ad05e4, 0x2578ba80,
|
||||
0x75cbd05c, 0xf5aa9e2a, 0xa519f4f6, 0x54cc4b92, 0x047f214e,
|
||||
0x6c16331b, 0x3ca559c7, 0xcd70e6a3, 0x9dc38c7f, 0x2d86f81c,
|
||||
0x7d3592c0, 0x8ce02da4, 0xdc534778, 0xb43a552d, 0xe4893ff1,
|
||||
0x155c8095, 0x45efea49, 0xc58ea43f, 0x953dcee3, 0x64e87187,
|
||||
0x345b1b5b, 0x5c32090e, 0x0c8163d2, 0xfd54dcb6, 0xade7b66a,
|
||||
0x26e7461b, 0x76542cc7, 0x878193a3, 0xd732f97f, 0xbf5beb2a,
|
||||
0xefe881f6, 0x1e3d3e92, 0x4e8e544e, 0xceef1a38, 0x9e5c70e4,
|
||||
0x6f89cf80, 0x3f3aa55c, 0x5753b709, 0x07e0ddd5, 0xf63562b1,
|
||||
0xa686086d, 0x3b458412, 0x6bf6eece, 0x9a2351aa, 0xca903b76,
|
||||
0xa2f92923, 0xf24a43ff, 0x039ffc9b, 0x532c9647, 0xd34dd831,
|
||||
0x83feb2ed, 0x722b0d89, 0x22986755, 0x4af17500, 0x1a421fdc,
|
||||
0xeb97a0b8, 0xbb24ca64, 0x30243a15, 0x609750c9, 0x9142efad,
|
||||
0xc1f18571, 0xa9989724, 0xf92bfdf8, 0x08fe429c, 0x584d2840,
|
||||
0xd82c6636, 0x889f0cea, 0x794ab38e, 0x29f9d952, 0x4190cb07,
|
||||
0x1123a1db, 0xe0f61ebf, 0xb0457463, 0x5b0df038, 0x0bbe9ae4,
|
||||
0xfa6b2580, 0xaad84f5c, 0xc2b15d09, 0x920237d5, 0x63d788b1,
|
||||
0x3364e26d, 0xb305ac1b, 0xe3b6c6c7, 0x126379a3, 0x42d0137f,
|
||||
0x2ab9012a, 0x7a0a6bf6, 0x8bdfd492, 0xdb6cbe4e, 0x506c4e3f,
|
||||
0x00df24e3, 0xf10a9b87, 0xa1b9f15b, 0xc9d0e30e, 0x996389d2,
|
||||
0x68b636b6, 0x38055c6a, 0xb864121c, 0xe8d778c0, 0x1902c7a4,
|
||||
0x49b1ad78, 0x21d8bf2d, 0x716bd5f1, 0x80be6a95, 0xd00d0049,
|
||||
0x4dce8c36, 0x1d7de6ea, 0xeca8598e, 0xbc1b3352, 0xd4722107,
|
||||
0x84c14bdb, 0x7514f4bf, 0x25a79e63, 0xa5c6d015, 0xf575bac9,
|
||||
0x04a005ad, 0x54136f71, 0x3c7a7d24, 0x6cc917f8, 0x9d1ca89c,
|
||||
0xcdafc240, 0x46af3231, 0x161c58ed, 0xe7c9e789, 0xb77a8d55,
|
||||
0xdf139f00, 0x8fa0f5dc, 0x7e754ab8, 0x2ec62064, 0xaea76e12,
|
||||
0xfe1404ce, 0x0fc1bbaa, 0x5f72d176, 0x371bc323, 0x67a8a9ff,
|
||||
0x967d169b, 0xc6ce7c47, 0x768b0824, 0x263862f8, 0xd7eddd9c,
|
||||
0x875eb740, 0xef37a515, 0xbf84cfc9, 0x4e5170ad, 0x1ee21a71,
|
||||
0x9e835407, 0xce303edb, 0x3fe581bf, 0x6f56eb63, 0x073ff936,
|
||||
0x578c93ea, 0xa6592c8e, 0xf6ea4652, 0x7deab623, 0x2d59dcff,
|
||||
0xdc8c639b, 0x8c3f0947, 0xe4561b12, 0xb4e571ce, 0x4530ceaa,
|
||||
0x1583a476, 0x95e2ea00, 0xc55180dc, 0x34843fb8, 0x64375564,
|
||||
0x0c5e4731, 0x5ced2ded, 0xad389289, 0xfd8bf855, 0x6048742a,
|
||||
0x30fb1ef6, 0xc12ea192, 0x919dcb4e, 0xf9f4d91b, 0xa947b3c7,
|
||||
0x58920ca3, 0x0821667f, 0x88402809, 0xd8f342d5, 0x2926fdb1,
|
||||
0x7995976d, 0x11fc8538, 0x414fefe4, 0xb09a5080, 0xe0293a5c,
|
||||
0x6b29ca2d, 0x3b9aa0f1, 0xca4f1f95, 0x9afc7549, 0xf295671c,
|
||||
0xa2260dc0, 0x53f3b2a4, 0x0340d878, 0x8321960e, 0xd392fcd2,
|
||||
0x224743b6, 0x72f4296a, 0x1a9d3b3f, 0x4a2e51e3, 0xbbfbee87,
|
||||
0xeb48845b,
|
||||
0x00000000, 0xb61be070, 0xb746c6a1, 0x015d26d1, 0xb5fc8b03,
|
||||
0x03e76b73, 0x02ba4da2, 0xb4a1add2, 0xb0881047, 0x0693f037,
|
||||
0x07ced6e6, 0xb1d53696, 0x05749b44, 0xb36f7b34, 0xb2325de5,
|
||||
0x0429bd95, 0xba6126cf, 0x0c7ac6bf, 0x0d27e06e, 0xbb3c001e,
|
||||
0x0f9dadcc, 0xb9864dbc, 0xb8db6b6d, 0x0ec08b1d, 0x0ae93688,
|
||||
0xbcf2d6f8, 0xbdaff029, 0x0bb41059, 0xbf15bd8b, 0x090e5dfb,
|
||||
0x08537b2a, 0xbe489b5a, 0xafb34bdf, 0x19a8abaf, 0x18f58d7e,
|
||||
0xaeee6d0e, 0x1a4fc0dc, 0xac5420ac, 0xad09067d, 0x1b12e60d,
|
||||
0x1f3b5b98, 0xa920bbe8, 0xa87d9d39, 0x1e667d49, 0xaac7d09b,
|
||||
0x1cdc30eb, 0x1d81163a, 0xab9af64a, 0x15d26d10, 0xa3c98d60,
|
||||
0xa294abb1, 0x148f4bc1, 0xa02ee613, 0x16350663, 0x176820b2,
|
||||
0xa173c0c2, 0xa55a7d57, 0x13419d27, 0x121cbbf6, 0xa4075b86,
|
||||
0x10a6f654, 0xa6bd1624, 0xa7e030f5, 0x11fbd085, 0x841791ff,
|
||||
0x320c718f, 0x3351575e, 0x854ab72e, 0x31eb1afc, 0x87f0fa8c,
|
||||
0x86addc5d, 0x30b63c2d, 0x349f81b8, 0x828461c8, 0x83d94719,
|
||||
0x35c2a769, 0x81630abb, 0x3778eacb, 0x3625cc1a, 0x803e2c6a,
|
||||
0x3e76b730, 0x886d5740, 0x89307191, 0x3f2b91e1, 0x8b8a3c33,
|
||||
0x3d91dc43, 0x3cccfa92, 0x8ad71ae2, 0x8efea777, 0x38e54707,
|
||||
0x39b861d6, 0x8fa381a6, 0x3b022c74, 0x8d19cc04, 0x8c44ead5,
|
||||
0x3a5f0aa5, 0x2ba4da20, 0x9dbf3a50, 0x9ce21c81, 0x2af9fcf1,
|
||||
0x9e585123, 0x2843b153, 0x291e9782, 0x9f0577f2, 0x9b2cca67,
|
||||
0x2d372a17, 0x2c6a0cc6, 0x9a71ecb6, 0x2ed04164, 0x98cba114,
|
||||
0x999687c5, 0x2f8d67b5, 0x91c5fcef, 0x27de1c9f, 0x26833a4e,
|
||||
0x9098da3e, 0x243977ec, 0x9222979c, 0x937fb14d, 0x2564513d,
|
||||
0x214deca8, 0x97560cd8, 0x960b2a09, 0x2010ca79, 0x94b167ab,
|
||||
0x22aa87db, 0x23f7a10a, 0x95ec417a, 0xd35e25bf, 0x6545c5cf,
|
||||
0x6418e31e, 0xd203036e, 0x66a2aebc, 0xd0b94ecc, 0xd1e4681d,
|
||||
0x67ff886d, 0x63d635f8, 0xd5cdd588, 0xd490f359, 0x628b1329,
|
||||
0xd62abefb, 0x60315e8b, 0x616c785a, 0xd777982a, 0x693f0370,
|
||||
0xdf24e300, 0xde79c5d1, 0x686225a1, 0xdcc38873, 0x6ad86803,
|
||||
0x6b854ed2, 0xdd9eaea2, 0xd9b71337, 0x6facf347, 0x6ef1d596,
|
||||
0xd8ea35e6, 0x6c4b9834, 0xda507844, 0xdb0d5e95, 0x6d16bee5,
|
||||
0x7ced6e60, 0xcaf68e10, 0xcbaba8c1, 0x7db048b1, 0xc911e563,
|
||||
0x7f0a0513, 0x7e5723c2, 0xc84cc3b2, 0xcc657e27, 0x7a7e9e57,
|
||||
0x7b23b886, 0xcd3858f6, 0x7999f524, 0xcf821554, 0xcedf3385,
|
||||
0x78c4d3f5, 0xc68c48af, 0x7097a8df, 0x71ca8e0e, 0xc7d16e7e,
|
||||
0x7370c3ac, 0xc56b23dc, 0xc436050d, 0x722de57d, 0x760458e8,
|
||||
0xc01fb898, 0xc1429e49, 0x77597e39, 0xc3f8d3eb, 0x75e3339b,
|
||||
0x74be154a, 0xc2a5f53a, 0x5749b440, 0xe1525430, 0xe00f72e1,
|
||||
0x56149291, 0xe2b53f43, 0x54aedf33, 0x55f3f9e2, 0xe3e81992,
|
||||
0xe7c1a407, 0x51da4477, 0x508762a6, 0xe69c82d6, 0x523d2f04,
|
||||
0xe426cf74, 0xe57be9a5, 0x536009d5, 0xed28928f, 0x5b3372ff,
|
||||
0x5a6e542e, 0xec75b45e, 0x58d4198c, 0xeecff9fc, 0xef92df2d,
|
||||
0x59893f5d, 0x5da082c8, 0xebbb62b8, 0xeae64469, 0x5cfda419,
|
||||
0xe85c09cb, 0x5e47e9bb, 0x5f1acf6a, 0xe9012f1a, 0xf8faff9f,
|
||||
0x4ee11fef, 0x4fbc393e, 0xf9a7d94e, 0x4d06749c, 0xfb1d94ec,
|
||||
0xfa40b23d, 0x4c5b524d, 0x4872efd8, 0xfe690fa8, 0xff342979,
|
||||
0x492fc909, 0xfd8e64db, 0x4b9584ab, 0x4ac8a27a, 0xfcd3420a,
|
||||
0x429bd950, 0xf4803920, 0xf5dd1ff1, 0x43c6ff81, 0xf7675253,
|
||||
0x417cb223, 0x402194f2, 0xf63a7482, 0xf213c917, 0x44082967,
|
||||
0x45550fb6, 0xf34eefc6, 0x47ef4214, 0xf1f4a264, 0xf0a984b5,
|
||||
0x46b264c5,
|
||||
0x00000000, 0x7dcd4d3f, 0xfb9a9a7e, 0x8657d741, 0x2c4432bd,
|
||||
0x51897f82, 0xd7dea8c3, 0xaa13e5fc, 0x5888657a, 0x25452845,
|
||||
0xa312ff04, 0xdedfb23b, 0x74cc57c7, 0x09011af8, 0x8f56cdb9,
|
||||
0xf29b8086, 0xb110caf4, 0xccdd87cb, 0x4a8a508a, 0x37471db5,
|
||||
0x9d54f849, 0xe099b576, 0x66ce6237, 0x1b032f08, 0xe998af8e,
|
||||
0x9455e2b1, 0x120235f0, 0x6fcf78cf, 0xc5dc9d33, 0xb811d00c,
|
||||
0x3e46074d, 0x438b4a72, 0xb95093a9, 0xc49dde96, 0x42ca09d7,
|
||||
0x3f0744e8, 0x9514a114, 0xe8d9ec2b, 0x6e8e3b6a, 0x13437655,
|
||||
0xe1d8f6d3, 0x9c15bbec, 0x1a426cad, 0x678f2192, 0xcd9cc46e,
|
||||
0xb0518951, 0x36065e10, 0x4bcb132f, 0x0840595d, 0x758d1462,
|
||||
0xf3dac323, 0x8e178e1c, 0x24046be0, 0x59c926df, 0xdf9ef19e,
|
||||
0xa253bca1, 0x50c83c27, 0x2d057118, 0xab52a659, 0xd69feb66,
|
||||
0x7c8c0e9a, 0x014143a5, 0x871694e4, 0xfadbd9db, 0xa9d02113,
|
||||
0xd41d6c2c, 0x524abb6d, 0x2f87f652, 0x859413ae, 0xf8595e91,
|
||||
0x7e0e89d0, 0x03c3c4ef, 0xf1584469, 0x8c950956, 0x0ac2de17,
|
||||
0x770f9328, 0xdd1c76d4, 0xa0d13beb, 0x2686ecaa, 0x5b4ba195,
|
||||
0x18c0ebe7, 0x650da6d8, 0xe35a7199, 0x9e973ca6, 0x3484d95a,
|
||||
0x49499465, 0xcf1e4324, 0xb2d30e1b, 0x40488e9d, 0x3d85c3a2,
|
||||
0xbbd214e3, 0xc61f59dc, 0x6c0cbc20, 0x11c1f11f, 0x9796265e,
|
||||
0xea5b6b61, 0x1080b2ba, 0x6d4dff85, 0xeb1a28c4, 0x96d765fb,
|
||||
0x3cc48007, 0x4109cd38, 0xc75e1a79, 0xba935746, 0x4808d7c0,
|
||||
0x35c59aff, 0xb3924dbe, 0xce5f0081, 0x644ce57d, 0x1981a842,
|
||||
0x9fd67f03, 0xe21b323c, 0xa190784e, 0xdc5d3571, 0x5a0ae230,
|
||||
0x27c7af0f, 0x8dd44af3, 0xf01907cc, 0x764ed08d, 0x0b839db2,
|
||||
0xf9181d34, 0x84d5500b, 0x0282874a, 0x7f4fca75, 0xd55c2f89,
|
||||
0xa89162b6, 0x2ec6b5f7, 0x530bf8c8, 0x88d14467, 0xf51c0958,
|
||||
0x734bde19, 0x0e869326, 0xa49576da, 0xd9583be5, 0x5f0feca4,
|
||||
0x22c2a19b, 0xd059211d, 0xad946c22, 0x2bc3bb63, 0x560ef65c,
|
||||
0xfc1d13a0, 0x81d05e9f, 0x078789de, 0x7a4ac4e1, 0x39c18e93,
|
||||
0x440cc3ac, 0xc25b14ed, 0xbf9659d2, 0x1585bc2e, 0x6848f111,
|
||||
0xee1f2650, 0x93d26b6f, 0x6149ebe9, 0x1c84a6d6, 0x9ad37197,
|
||||
0xe71e3ca8, 0x4d0dd954, 0x30c0946b, 0xb697432a, 0xcb5a0e15,
|
||||
0x3181d7ce, 0x4c4c9af1, 0xca1b4db0, 0xb7d6008f, 0x1dc5e573,
|
||||
0x6008a84c, 0xe65f7f0d, 0x9b923232, 0x6909b2b4, 0x14c4ff8b,
|
||||
0x929328ca, 0xef5e65f5, 0x454d8009, 0x3880cd36, 0xbed71a77,
|
||||
0xc31a5748, 0x80911d3a, 0xfd5c5005, 0x7b0b8744, 0x06c6ca7b,
|
||||
0xacd52f87, 0xd11862b8, 0x574fb5f9, 0x2a82f8c6, 0xd8197840,
|
||||
0xa5d4357f, 0x2383e23e, 0x5e4eaf01, 0xf45d4afd, 0x899007c2,
|
||||
0x0fc7d083, 0x720a9dbc, 0x21016574, 0x5ccc284b, 0xda9bff0a,
|
||||
0xa756b235, 0x0d4557c9, 0x70881af6, 0xf6dfcdb7, 0x8b128088,
|
||||
0x7989000e, 0x04444d31, 0x82139a70, 0xffded74f, 0x55cd32b3,
|
||||
0x28007f8c, 0xae57a8cd, 0xd39ae5f2, 0x9011af80, 0xeddce2bf,
|
||||
0x6b8b35fe, 0x164678c1, 0xbc559d3d, 0xc198d002, 0x47cf0743,
|
||||
0x3a024a7c, 0xc899cafa, 0xb55487c5, 0x33035084, 0x4ece1dbb,
|
||||
0xe4ddf847, 0x9910b578, 0x1f476239, 0x628a2f06, 0x9851f6dd,
|
||||
0xe59cbbe2, 0x63cb6ca3, 0x1e06219c, 0xb415c460, 0xc9d8895f,
|
||||
0x4f8f5e1e, 0x32421321, 0xc0d993a7, 0xbd14de98, 0x3b4309d9,
|
||||
0x468e44e6, 0xec9da11a, 0x9150ec25, 0x17073b64, 0x6aca765b,
|
||||
0x29413c29, 0x548c7116, 0xd2dba657, 0xaf16eb68, 0x05050e94,
|
||||
0x78c843ab, 0xfe9f94ea, 0x8352d9d5, 0x71c95953, 0x0c04146c,
|
||||
0x8a53c32d, 0xf79e8e12, 0x5d8d6bee, 0x204026d1, 0xa617f190,
|
||||
0xdbdabcaf
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user