Skip to content
This repository was archived by the owner on May 29, 2024. It is now read-only.

Commit 8f4e37e

Browse files
[GR-46278] Merge in jdk-17.0.8+7 (JVMCI_23.0).
PullRequest: labsjdk-ce-17/117
2 parents eaed62b + 1f2123b commit 8f4e37e

File tree

32 files changed

+970
-200
lines changed

32 files changed

+970
-200
lines changed

make/conf/version-numbers.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ DEFAULT_VERSION_CLASSFILE_MINOR=0
3939
DEFAULT_VERSION_DOCS_API_SINCE=11
4040
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="16 17"
4141
DEFAULT_JDK_SOURCE_TARGET_VERSION=17
42-
DEFAULT_PROMOTED_VERSION_PRE=ea
42+
DEFAULT_PROMOTED_VERSION_PRE=

src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2964,6 +2964,22 @@ class StubGenerator: public StubCodeGenerator {
29642964
return start;
29652965
}
29662966

2967+
// Big-endian 128-bit + 64-bit -> 128-bit addition.
2968+
// Inputs: 128-bits. in is preserved.
2969+
// The least-significant 64-bit word is in the upper dword of the vector
2970+
// inc (the 64-bit increment) is preserved. Its lower dword must be zero
2971+
// Output: result
2972+
void be_add_128_64(FloatRegister result, FloatRegister in,
2973+
FloatRegister inc, FloatRegister tmp) {
2974+
assert_different_registers(result, tmp, inc);
2975+
2976+
__ addv(result, __ T2D, in, inc); // Add inc to the least-significant dword of input
2977+
__ cmhi(tmp, __ T2D, inc, result); // Check for result overflowing
2978+
__ ins(tmp, __ D, tmp, 0, 1); // Move LSD of comparison result to MSD
2979+
__ ins(tmp, __ D, inc, 1, 0); // Move 0 to LSD of comparison result
2980+
__ subv(result, __ T2D, result, tmp); // Subtract -1 from MSD if there was an overflow
2981+
}
2982+
29672983
// CTR AES crypt.
29682984
// Arguments:
29692985
//
@@ -3073,13 +3089,16 @@ class StubGenerator: public StubCodeGenerator {
30733089
// Setup the counter
30743090
__ movi(v4, __ T4S, 0);
30753091
__ movi(v5, __ T4S, 1);
3076-
__ ins(v4, __ S, v5, 3, 3); // v4 contains { 0, 0, 0, 1 }
3092+
__ ins(v4, __ S, v5, 2, 2); // v4 contains { 0, 1 }
30773093

3078-
__ ld1(v0, __ T16B, counter); // Load the counter into v0
3079-
__ rev32(v16, __ T16B, v0);
3080-
__ addv(v16, __ T4S, v16, v4);
3081-
__ rev32(v16, __ T16B, v16);
3082-
__ st1(v16, __ T16B, counter); // Save the incremented counter back
3094+
// 128-bit big-endian increment
3095+
__ ld1(v0, __ T16B, counter);
3096+
__ rev64(v16, __ T16B, v0);
3097+
be_add_128_64(v16, v16, v4, /*tmp*/v5);
3098+
__ rev64(v16, __ T16B, v16);
3099+
__ st1(v16, __ T16B, counter);
3100+
// Previous counter value is in v0
3101+
// v4 contains { 0, 1 }
30833102

30843103
{
30853104
// We have fewer than bulk_width blocks of data left. Encrypt
@@ -3111,9 +3130,9 @@ class StubGenerator: public StubCodeGenerator {
31113130

31123131
// Increment the counter, store it back
31133132
__ orr(v0, __ T16B, v16, v16);
3114-
__ rev32(v16, __ T16B, v16);
3115-
__ addv(v16, __ T4S, v16, v4);
3116-
__ rev32(v16, __ T16B, v16);
3133+
__ rev64(v16, __ T16B, v16);
3134+
be_add_128_64(v16, v16, v4, /*tmp*/v5);
3135+
__ rev64(v16, __ T16B, v16);
31173136
__ st1(v16, __ T16B, counter); // Save the incremented counter back
31183137

31193138
__ b(inner_loop);
@@ -3161,7 +3180,7 @@ class StubGenerator: public StubCodeGenerator {
31613180
// Keys should already be loaded into the correct registers
31623181

31633182
__ ld1(v0, __ T16B, counter); // v0 contains the first counter
3164-
__ rev32(v16, __ T16B, v0); // v16 contains byte-reversed counter
3183+
__ rev64(v16, __ T16B, v0); // v16 contains byte-reversed counter
31653184

31663185
// AES/CTR loop
31673186
{
@@ -3171,11 +3190,11 @@ class StubGenerator: public StubCodeGenerator {
31713190
// Setup the counters
31723191
__ movi(v8, __ T4S, 0);
31733192
__ movi(v9, __ T4S, 1);
3174-
__ ins(v8, __ S, v9, 3, 3); // v8 contains { 0, 0, 0, 1 }
3193+
__ ins(v8, __ S, v9, 2, 2); // v8 contains { 0, 1 }
31753194

31763195
for (FloatRegister f = v0; f < v0 + bulk_width; f++) {
3177-
__ rev32(f, __ T16B, v16);
3178-
__ addv(v16, __ T4S, v16, v8);
3196+
__ rev64(f, __ T16B, v16);
3197+
be_add_128_64(v16, v16, v8, /*tmp*/v9);
31793198
}
31803199

31813200
__ ld1(v8, v9, v10, v11, __ T16B, __ post(in, 4 * 16));
@@ -3203,7 +3222,7 @@ class StubGenerator: public StubCodeGenerator {
32033222
}
32043223

32053224
// Save the counter back where it goes
3206-
__ rev32(v16, __ T16B, v16);
3225+
__ rev64(v16, __ T16B, v16);
32073226
__ st1(v16, __ T16B, counter);
32083227

32093228
__ pop(saved_regs, sp);

src/hotspot/cpu/x86/assembler_x86.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2633,6 +2633,16 @@ void Assembler::ktestd(KRegister src1, KRegister src2) {
26332633
emit_int16((unsigned char)0x99, (0xC0 | encode));
26342634
}
26352635

2636+
2637+
void Assembler::kshiftlbl(KRegister dst, KRegister src, int imm8) {
2638+
assert(VM_Version::supports_avx512dq(), "");
2639+
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false);
2640+
int encode = vex_prefix_and_encode(dst->encoding(), 0 , src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
2641+
emit_int16(0x32, (0xC0 | encode));
2642+
emit_int8(imm8);
2643+
}
2644+
2645+
26362646
void Assembler::movb(Address dst, int imm8) {
26372647
InstructionMark im(this);
26382648
prefix(dst);
@@ -3948,6 +3958,14 @@ void Assembler::evpcmpuw(KRegister kdst, XMMRegister nds, XMMRegister src, Compa
39483958
emit_int24(0x3E, (0xC0 | encode), vcc);
39493959
}
39503960

3961+
void Assembler::evpcmpuq(KRegister kdst, XMMRegister nds, XMMRegister src, ComparisonPredicate vcc, int vector_len) {
3962+
assert(VM_Version::supports_avx512vlbw(), "");
3963+
InstructionAttr attributes(vector_len, /* rex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
3964+
attributes.set_is_evex_instruction();
3965+
int encode = vex_prefix_and_encode(kdst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
3966+
emit_int24(0x1E, (0xC0 | encode), vcc);
3967+
}
3968+
39513969
void Assembler::evpcmpuw(KRegister kdst, XMMRegister nds, Address src, ComparisonPredicate vcc, int vector_len) {
39523970
assert(VM_Version::supports_avx512vlbw(), "");
39533971
InstructionMark im(this);
@@ -6574,6 +6592,19 @@ void Assembler::vpaddq(XMMRegister dst, XMMRegister nds, Address src, int vector
65746592
emit_operand(dst, src);
65756593
}
65766594

6595+
void Assembler::evpaddq(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len) {
6596+
assert(VM_Version::supports_evex(), "");
6597+
assert(vector_len == AVX_512bit || VM_Version::supports_avx512vl(), "");
6598+
InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false,/* uses_vl */ true);
6599+
attributes.set_is_evex_instruction();
6600+
attributes.set_embedded_opmask_register_specifier(mask);
6601+
if (merge) {
6602+
attributes.reset_is_clear_context();
6603+
}
6604+
int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
6605+
emit_int16((unsigned char)0xD4, (0xC0 | encode));
6606+
}
6607+
65776608
void Assembler::psubb(XMMRegister dst, XMMRegister src) {
65786609
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
65796610
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);

src/hotspot/cpu/x86/assembler_x86.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1492,6 +1492,8 @@ class Assembler : public AbstractAssembler {
14921492

14931493
void ktestql(KRegister dst, KRegister src);
14941494

1495+
void kshiftlbl(KRegister dst, KRegister src, int imm8);
1496+
14951497
void movdl(XMMRegister dst, Register src);
14961498
void movdl(Register dst, XMMRegister src);
14971499
void movdl(XMMRegister dst, Address src);
@@ -1727,6 +1729,8 @@ class Assembler : public AbstractAssembler {
17271729
void evpcmpuw(KRegister kdst, XMMRegister nds, XMMRegister src, ComparisonPredicate vcc, int vector_len);
17281730
void evpcmpuw(KRegister kdst, XMMRegister nds, Address src, ComparisonPredicate vcc, int vector_len);
17291731

1732+
void evpcmpuq(KRegister kdst, XMMRegister nds, XMMRegister src, ComparisonPredicate vcc, int vector_len);
1733+
17301734
void pcmpeqw(XMMRegister dst, XMMRegister src);
17311735
void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
17321736
void evpcmpeqw(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len);
@@ -2249,6 +2253,10 @@ class Assembler : public AbstractAssembler {
22492253
void vpaddd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
22502254
void vpaddq(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
22512255

2256+
// Leaf level assembler routines for masked operations.
2257+
void evpaddq(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len);
2258+
// void evpaddq(XMMRegister dst, KRegister mask, XMMRegister nds, Address src, bool merge, int vector_len);
2259+
22522260
// Sub packed integers
22532261
void psubb(XMMRegister dst, XMMRegister src);
22542262
void psubw(XMMRegister dst, XMMRegister src);

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -964,6 +964,8 @@ class MacroAssembler: public Assembler {
964964
void roundDec(XMMRegister key, int rnum);
965965
void lastroundDec(XMMRegister key, int rnum);
966966
void ev_load_key(XMMRegister xmmdst, Register key, int offset, XMMRegister xmm_shuf_mask);
967+
void ev_add128(XMMRegister xmmdst, XMMRegister xmmsrc1, XMMRegister xmmsrc2,
968+
int vector_len, KRegister ktmp, Register rscratch = noreg);
967969

968970
public:
969971
void aesecb_encrypt(Register source_addr, Register dest_addr, Register key, Register len);

src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,19 @@ void MacroAssembler::avx_ghash(Register input_state, Register htbl,
779779
vpxor(xmm15, xmm15, xmm15, Assembler::AVX_128bit);
780780
}
781781

782+
// Add 128-bit integers in xmmsrc1 to xmmsrc2, then place the result in xmmdst.
783+
// Clobber ktmp and rscratch.
784+
// Used by aesctr_encrypt.
785+
void MacroAssembler::ev_add128(XMMRegister xmmdst, XMMRegister xmmsrc1, XMMRegister xmmsrc2,
786+
int vector_len, KRegister ktmp, Register rscratch) {
787+
vpaddq(xmmdst, xmmsrc1, xmmsrc2, vector_len);
788+
evpcmpuq(ktmp, xmmdst, xmmsrc2, lt, vector_len); // set mask[0/1] bit if addq to dst[0/1] wraps
789+
kshiftlbl(ktmp, ktmp, 1); // mask[1] <- mask[0], mask[0] <- 0, etc
790+
791+
evpaddq(xmmdst, ktmp, xmmdst, xmm17, /*merge*/true,
792+
vector_len); // dst[1]++ if mask[1] set
793+
}
794+
782795
// AES Counter Mode using VAES instructions
783796
void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Register key, Register counter,
784797
Register len_reg, Register used, Register used_addr, Register saved_encCounter_start) {
@@ -831,19 +844,23 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
831844
//shuffle counter using lbswap_mask
832845
vpshufb(xmm8, xmm8, xmm16, Assembler::AVX_512bit);
833846

847+
// Vector value to propagate carries
848+
evmovdquq(xmm17, ExternalAddress(StubRoutines::x86::counter_mask_ones_addr()), Assembler::AVX_512bit, r15);
834849
// pre-increment and propagate counter values to zmm9-zmm15 registers.
835850
// Linc0 increments the zmm8 by 1 (initial value being 0), Linc4 increments the counters zmm9-zmm15 by 4
836851
// The counter is incremented after each block i.e. 16 bytes is processed;
837852
// each zmm register has 4 counter values as its MSB
838853
// the counters are incremented in parallel
839-
vpaddd(xmm8, xmm8, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 64), Assembler::AVX_512bit, r15);//linc0
840-
vpaddd(xmm9, xmm8, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//linc4(rip)
841-
vpaddd(xmm10, xmm9, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
842-
vpaddd(xmm11, xmm10, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
843-
vpaddd(xmm12, xmm11, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
844-
vpaddd(xmm13, xmm12, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
845-
vpaddd(xmm14, xmm13, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
846-
vpaddd(xmm15, xmm14, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15);//Linc4(rip)
854+
evmovdquq(xmm19, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 64), Assembler::AVX_512bit, r15 /*rscratch*/);//linc0
855+
ev_add128(xmm8, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
856+
evmovdquq(xmm19, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 128), Assembler::AVX_512bit, r15 /*rscratch*/);//linc4
857+
ev_add128(xmm9, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
858+
ev_add128(xmm10, xmm9, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
859+
ev_add128(xmm11, xmm10, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
860+
ev_add128(xmm12, xmm11, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
861+
ev_add128(xmm13, xmm12, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
862+
ev_add128(xmm14, xmm13, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
863+
ev_add128(xmm15, xmm14, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15);
847864

848865
// load linc32 mask in zmm register.linc32 increments counter by 32
849866
evmovdquq(xmm19, ExternalAddress(StubRoutines::x86::counter_mask_addr() + 256), Assembler::AVX_512bit, r15);//Linc32
@@ -891,21 +908,21 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
891908
// This is followed by incrementing counter values in zmm8-zmm15.
892909
// Since we will be processing 32 blocks at a time, the counter is incremented by 32.
893910
roundEnc(xmm21, 7);
894-
vpaddq(xmm8, xmm8, xmm19, Assembler::AVX_512bit);
911+
ev_add128/*!!!*/(xmm8, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
895912
roundEnc(xmm22, 7);
896-
vpaddq(xmm9, xmm9, xmm19, Assembler::AVX_512bit);
913+
ev_add128/*!!!*/(xmm9, xmm9, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
897914
roundEnc(xmm23, 7);
898-
vpaddq(xmm10, xmm10, xmm19, Assembler::AVX_512bit);
915+
ev_add128/*!!!*/(xmm10, xmm10, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
899916
roundEnc(xmm24, 7);
900-
vpaddq(xmm11, xmm11, xmm19, Assembler::AVX_512bit);
917+
ev_add128/*!!!*/(xmm11, xmm11, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
901918
roundEnc(xmm25, 7);
902-
vpaddq(xmm12, xmm12, xmm19, Assembler::AVX_512bit);
919+
ev_add128/*!!!*/(xmm12, xmm12, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
903920
roundEnc(xmm26, 7);
904-
vpaddq(xmm13, xmm13, xmm19, Assembler::AVX_512bit);
921+
ev_add128/*!!!*/(xmm13, xmm13, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
905922
roundEnc(xmm27, 7);
906-
vpaddq(xmm14, xmm14, xmm19, Assembler::AVX_512bit);
923+
ev_add128/*!!!*/(xmm14, xmm14, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
907924
roundEnc(xmm28, 7);
908-
vpaddq(xmm15, xmm15, xmm19, Assembler::AVX_512bit);
925+
ev_add128/*!!!*/(xmm15, xmm15, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
909926
roundEnc(xmm29, 7);
910927

911928
cmpl(rounds, 52);
@@ -983,8 +1000,8 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
9831000
vpshufb(xmm3, xmm11, xmm16, Assembler::AVX_512bit);
9841001
evpxorq(xmm3, xmm3, xmm20, Assembler::AVX_512bit);
9851002
// Increment counter values by 16
986-
vpaddq(xmm8, xmm8, xmm19, Assembler::AVX_512bit);
987-
vpaddq(xmm9, xmm9, xmm19, Assembler::AVX_512bit);
1003+
ev_add128/*!!!*/(xmm8, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
1004+
ev_add128/*!!!*/(xmm9, xmm9, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
9881005
// AES encode rounds
9891006
roundEnc(xmm21, 3);
9901007
roundEnc(xmm22, 3);
@@ -1051,7 +1068,7 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
10511068
vpshufb(xmm1, xmm9, xmm16, Assembler::AVX_512bit);
10521069
evpxorq(xmm1, xmm1, xmm20, Assembler::AVX_512bit);
10531070
// increment counter by 8
1054-
vpaddq(xmm8, xmm8, xmm19, Assembler::AVX_512bit);
1071+
ev_add128/*!!!*/(xmm8, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
10551072
// AES encode
10561073
roundEnc(xmm21, 1);
10571074
roundEnc(xmm22, 1);
@@ -1109,7 +1126,7 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
11091126
vpshufb(xmm0, xmm8, xmm16, Assembler::AVX_512bit);
11101127
evpxorq(xmm0, xmm0, xmm20, Assembler::AVX_512bit);
11111128
// Increment counter
1112-
vpaddq(xmm8, xmm8, xmm19, Assembler::AVX_512bit);
1129+
ev_add128/*!!!*/(xmm8, xmm8, xmm19, Assembler::AVX_512bit, /*ktmp*/k1, r15 /*rscratch*/);
11131130
vaesenc(xmm0, xmm0, xmm21, Assembler::AVX_512bit);
11141131
vaesenc(xmm0, xmm0, xmm22, Assembler::AVX_512bit);
11151132
vaesenc(xmm0, xmm0, xmm23, Assembler::AVX_512bit);
@@ -1159,7 +1176,7 @@ void MacroAssembler::aesctr_encrypt(Register src_addr, Register dest_addr, Regis
11591176
evpxorq(xmm0, xmm0, xmm20, Assembler::AVX_128bit);
11601177
vaesenc(xmm0, xmm0, xmm21, Assembler::AVX_128bit);
11611178
// Increment counter by 1
1162-
vpaddq(xmm8, xmm8, xmm19, Assembler::AVX_128bit);
1179+
ev_add128/*!!!*/(xmm8, xmm8, xmm19, Assembler::AVX_128bit, /*ktmp*/k1, r15 /*rscratch*/);
11631180
vaesenc(xmm0, xmm0, xmm22, Assembler::AVX_128bit);
11641181
vaesenc(xmm0, xmm0, xmm23, Assembler::AVX_128bit);
11651182
vaesenc(xmm0, xmm0, xmm24, Assembler::AVX_128bit);

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4424,7 +4424,19 @@ class StubGenerator: public StubCodeGenerator {
44244424
return start;
44254425
}
44264426

4427-
// Vector AES Counter implementation
4427+
// Vector AES Counter implementation
4428+
4429+
address counter_mask_ones_addr() {
4430+
__ align64();
4431+
StubCodeMark mark(this, "StubRoutines", "counter_mask_addr");
4432+
address start = __ pc();
4433+
for (int i = 0; i < 4; i ++) {
4434+
__ emit_data64(0x0000000000000000, relocInfo::none);
4435+
__ emit_data64(0x0000000000000001, relocInfo::none);
4436+
}
4437+
return start;
4438+
}
4439+
44284440
address generate_counterMode_VectorAESCrypt() {
44294441
__ align(CodeEntryAlignment);
44304442
StubCodeMark mark(this, "StubRoutines", "counterMode_AESCrypt");
@@ -7641,6 +7653,7 @@ address generate_avx_ghash_processBlocks() {
76417653
if (UseAESCTRIntrinsics) {
76427654
if (VM_Version::supports_avx512_vaes() && VM_Version::supports_avx512bw() && VM_Version::supports_avx512vl()) {
76437655
StubRoutines::x86::_counter_mask_addr = counter_mask_addr();
7656+
StubRoutines::x86::_counter_mask_ones_addr = counter_mask_ones_addr();
76447657
StubRoutines::_counterMode_AESCrypt = generate_counterMode_VectorAESCrypt();
76457658
} else {
76467659
StubRoutines::x86::_counter_shuffle_mask_addr = generate_counter_shuffle_mask();

src/hotspot/cpu/x86/stubRoutines_x86.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ address StubRoutines::x86::_avx2_shuffle_base64 = NULL;
7171
address StubRoutines::x86::_avx2_input_mask_base64 = NULL;
7272
address StubRoutines::x86::_avx2_lut_base64 = NULL;
7373
address StubRoutines::x86::_counter_mask_addr = NULL;
74+
address StubRoutines::x86::_counter_mask_ones_addr = NULL;
7475
address StubRoutines::x86::_lookup_lo_base64 = NULL;
7576
address StubRoutines::x86::_lookup_hi_base64 = NULL;
7677
address StubRoutines::x86::_lookup_lo_base64url = NULL;

src/hotspot/cpu/x86/stubRoutines_x86.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ class x86 {
184184
// byte flip mask for sha512
185185
static address _pshuffle_byte_flip_mask_addr_sha512;
186186
static address _counter_mask_addr;
187+
static address _counter_mask_ones_addr;
187188
// Masks for base64
188189
static address _encoding_table_base64;
189190
static address _shuffle_base64;
@@ -343,6 +344,7 @@ class x86 {
343344
static address base64_avx2_input_mask_addr() { return _avx2_input_mask_base64; }
344345
static address base64_avx2_lut_addr() { return _avx2_lut_base64; }
345346
static address counter_mask_addr() { return _counter_mask_addr; }
347+
static address counter_mask_ones_addr() { return _counter_mask_ones_addr; }
346348
static address base64_vbmi_lookup_lo_addr() { return _lookup_lo_base64; }
347349
static address base64_vbmi_lookup_hi_addr() { return _lookup_hi_base64; }
348350
static address base64_vbmi_lookup_lo_url_addr() { return _lookup_lo_base64url; }

0 commit comments

Comments
 (0)