@@ -121,16 +121,6 @@ static address counter_mask_linc32_addr() {
121121 return (address)COUNTER_MASK_LINC32;
122122}
123123
124- ATTRIBUTE_ALIGNED (64 ) uint64_t COUNTER_MASK_ONES[] = {
125- 0x0000000000000000UL , 0x0000000000000001UL ,
126- 0x0000000000000000UL , 0x0000000000000001UL ,
127- 0x0000000000000000UL , 0x0000000000000001UL ,
128- 0x0000000000000000UL , 0x0000000000000001UL ,
129- };
130- static address counter_mask_ones_addr () {
131- return (address)COUNTER_MASK_ONES;
132- }
133-
134124ATTRIBUTE_ALIGNED (64 ) static const uint64_t GHASH_POLYNOMIAL_REDUCTION[] = {
135125 0x00000001C2000000UL , 0xC200000000000000UL ,
136126 0x00000001C2000000UL , 0xC200000000000000UL ,
@@ -1633,17 +1623,6 @@ void StubGenerator::ev_load_key(XMMRegister xmmdst, Register key, int offset, Re
16331623 __ evshufi64x2 (xmmdst, xmmdst, xmmdst, 0x0 , Assembler::AVX_512bit);
16341624}
16351625
1636- // Add 128-bit integers in xmmsrc1 to xmmsrc2, then place the result in xmmdst.
1637- // Clobber ktmp and rscratch.
1638- // Used by aesctr_encrypt.
1639- void StubGenerator::ev_add128 (XMMRegister xmmdst, XMMRegister xmmsrc1, XMMRegister xmmsrc2,
1640- int vector_len, KRegister ktmp, Register rscratch) {
1641- __ vpaddq (xmmdst, xmmsrc1, xmmsrc2, vector_len);
1642- __ evpcmpuq (ktmp, xmmdst, xmmsrc2, __ lt, vector_len);
1643- __ kshiftlbl (ktmp, ktmp, 1 );
1644- __ evpaddq (xmmdst, ktmp, xmmdst, ExternalAddress (counter_mask_ones_addr ()), /* merge*/ true ,
1645- vector_len, rscratch);
1646- }
16471626
16481627// AES-ECB Encrypt Operation
16491628void StubGenerator::aesecb_encrypt (Register src_addr, Register dest_addr, Register key, Register len) {
@@ -2067,6 +2046,7 @@ void StubGenerator::aesecb_decrypt(Register src_addr, Register dest_addr, Regist
20672046}
20682047
20692048
2049+
20702050// AES Counter Mode using VAES instructions
20712051void StubGenerator::aesctr_encrypt (Register src_addr, Register dest_addr, Register key, Register counter,
20722052 Register len_reg, Register used, Register used_addr, Register saved_encCounter_start) {
@@ -2124,17 +2104,14 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
21242104 // The counter is incremented after each block i.e. 16 bytes is processed;
21252105 // each zmm register has 4 counter values as its MSB
21262106 // the counters are incremented in parallel
2127-
2128- __ evmovdquq (xmm19, ExternalAddress (counter_mask_linc0_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2129- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2130- __ evmovdquq (xmm19, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2131- ev_add128 (xmm9, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2132- ev_add128 (xmm10, xmm9, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2133- ev_add128 (xmm11, xmm10, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2134- ev_add128 (xmm12, xmm11, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2135- ev_add128 (xmm13, xmm12, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2136- ev_add128 (xmm14, xmm13, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2137- ev_add128 (xmm15, xmm14, xmm19, Assembler::AVX_512bit, /* ktmp*/ k1, r15 /* rscratch*/ );
2107+ __ vpaddd (xmm8, xmm8, ExternalAddress (counter_mask_linc0_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2108+ __ vpaddd (xmm9, xmm8, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2109+ __ vpaddd (xmm10, xmm9, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2110+ __ vpaddd (xmm11, xmm10, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2111+ __ vpaddd (xmm12, xmm11, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2112+ __ vpaddd (xmm13, xmm12, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2113+ __ vpaddd (xmm14, xmm13, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
2114+ __ vpaddd (xmm15, xmm14, ExternalAddress (counter_mask_linc4_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
21382115
21392116 // load linc32 mask in zmm register.linc32 increments counter by 32
21402117 __ evmovdquq (xmm19, ExternalAddress (counter_mask_linc32_addr ()), Assembler::AVX_512bit, r15 /* rscratch*/ );
@@ -2182,21 +2159,21 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
21822159 // This is followed by incrementing counter values in zmm8-zmm15.
21832160 // Since we will be processing 32 blocks at a time, the counter is incremented by 32.
21842161 roundEnc (xmm21, 7 );
2185- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2162+ __ vpaddq (xmm8, xmm8, xmm19, Assembler::AVX_512bit);
21862163 roundEnc (xmm22, 7 );
2187- ev_add128 (xmm9, xmm9, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2164+ __ vpaddq (xmm9, xmm9, xmm19, Assembler::AVX_512bit);
21882165 roundEnc (xmm23, 7 );
2189- ev_add128 (xmm10, xmm10, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2166+ __ vpaddq (xmm10, xmm10, xmm19, Assembler::AVX_512bit);
21902167 roundEnc (xmm24, 7 );
2191- ev_add128 (xmm11, xmm11, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2168+ __ vpaddq (xmm11, xmm11, xmm19, Assembler::AVX_512bit);
21922169 roundEnc (xmm25, 7 );
2193- ev_add128 (xmm12, xmm12, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2170+ __ vpaddq (xmm12, xmm12, xmm19, Assembler::AVX_512bit);
21942171 roundEnc (xmm26, 7 );
2195- ev_add128 (xmm13, xmm13, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2172+ __ vpaddq (xmm13, xmm13, xmm19, Assembler::AVX_512bit);
21962173 roundEnc (xmm27, 7 );
2197- ev_add128 (xmm14, xmm14, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2174+ __ vpaddq (xmm14, xmm14, xmm19, Assembler::AVX_512bit);
21982175 roundEnc (xmm28, 7 );
2199- ev_add128 (xmm15, xmm15, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2176+ __ vpaddq (xmm15, xmm15, xmm19, Assembler::AVX_512bit);
22002177 roundEnc (xmm29, 7 );
22012178
22022179 __ cmpl (rounds, 52 );
@@ -2274,8 +2251,8 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
22742251 __ vpshufb (xmm3, xmm11, xmm16, Assembler::AVX_512bit);
22752252 __ evpxorq (xmm3, xmm3, xmm20, Assembler::AVX_512bit);
22762253 // Increment counter values by 16
2277- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2278- ev_add128 (xmm9, xmm9, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2254+ __ vpaddq (xmm8, xmm8, xmm19, Assembler::AVX_512bit);
2255+ __ vpaddq (xmm9, xmm9, xmm19, Assembler::AVX_512bit);
22792256 // AES encode rounds
22802257 roundEnc (xmm21, 3 );
22812258 roundEnc (xmm22, 3 );
@@ -2342,7 +2319,7 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
23422319 __ vpshufb (xmm1, xmm9, xmm16, Assembler::AVX_512bit);
23432320 __ evpxorq (xmm1, xmm1, xmm20, Assembler::AVX_512bit);
23442321 // increment counter by 8
2345- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2322+ __ vpaddq (xmm8, xmm8, xmm19, Assembler::AVX_512bit);
23462323 // AES encode
23472324 roundEnc (xmm21, 1 );
23482325 roundEnc (xmm22, 1 );
@@ -2399,9 +2376,8 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
23992376 // XOR counter with first roundkey
24002377 __ vpshufb (xmm0, xmm8, xmm16, Assembler::AVX_512bit);
24012378 __ evpxorq (xmm0, xmm0, xmm20, Assembler::AVX_512bit);
2402-
24032379 // Increment counter
2404- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_512bit, /* ktmp */ k1, r15 /* rscratch */ );
2380+ __ vpaddq (xmm8, xmm8, xmm19, Assembler::AVX_512bit);
24052381 __ vaesenc (xmm0, xmm0, xmm21, Assembler::AVX_512bit);
24062382 __ vaesenc (xmm0, xmm0, xmm22, Assembler::AVX_512bit);
24072383 __ vaesenc (xmm0, xmm0, xmm23, Assembler::AVX_512bit);
@@ -2451,7 +2427,7 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist
24512427 __ evpxorq (xmm0, xmm0, xmm20, Assembler::AVX_128bit);
24522428 __ vaesenc (xmm0, xmm0, xmm21, Assembler::AVX_128bit);
24532429 // Increment counter by 1
2454- ev_add128 (xmm8, xmm8, xmm19, Assembler::AVX_128bit, /* ktmp */ k1, r15 /* rscratch */ );
2430+ __ vpaddq (xmm8, xmm8, xmm19, Assembler::AVX_128bit);
24552431 __ vaesenc (xmm0, xmm0, xmm22, Assembler::AVX_128bit);
24562432 __ vaesenc (xmm0, xmm0, xmm23, Assembler::AVX_128bit);
24572433 __ vaesenc (xmm0, xmm0, xmm24, Assembler::AVX_128bit);
0 commit comments