diff --git a/wolfcrypt/src/sha3_asm.S b/wolfcrypt/src/sha3_asm.S index 056d31c7c..4aeff9b31 100644 --- a/wolfcrypt/src/sha3_asm.S +++ b/wolfcrypt/src/sha3_asm.S @@ -244,11 +244,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 48(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 96(%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 96(%rdi) # XOR in constant xorq $0x01, %rsi # Row 1 @@ -277,11 +277,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -72(%rdi) + movq %r13, -72(%rdi) # Row 2 movq -88(%rdi), %r10 movq -40(%rdi), %r11 @@ -308,11 +308,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -88(%rdi) + movq %r13, -88(%rdi) # Row 3 movq -64(%rdi), %r10 movq -56(%rdi), %r11 @@ -339,11 +339,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -64(%rdi) + movq %r13, -64(%rdi) # Row 4 xorq -80(%rdi), %rcx xorq -32(%rdi), %r8 @@ -427,11 +427,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 40(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 72(%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 72(%rdi) # XOR in constant xorq $0x8082, %rsi # Row 1 @@ -460,11 +460,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 48(%rdi) + movq %r13, 48(%rdi) # Row 2 movq -48(%rdi), %r10 movq -16(%rdi), %r11 @@ -491,11 +491,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -48(%rdi) + movq %r13, -48(%rdi) # Row 3 movq 96(%rdi), %r10 movq -72(%rdi), %r11 @@ -522,11 +522,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 96(%rdi) + movq %r13, 96(%rdi) # Row 4 xorq (%rdi), %rcx xorq 32(%rdi), %r8 @@ -610,13 +610,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -8(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -32(%rdi) - movq $0x800000000000808a, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -32(%rdi) # XOR in constant + movq $0x800000000000808a, %r14 xorq %r14, %rsi # Row 1 movq 40(%rdi), %r10 @@ -644,11 +644,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 40(%rdi) + movq %r13, 40(%rdi) # Row 2 movq -24(%rdi), %r10 movq -88(%rdi), %r11 @@ -675,11 +675,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, (%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -24(%rdi) + movq %r13, -24(%rdi) # Row 3 movq 72(%rdi), %r10 movq 48(%rdi), %r11 @@ -706,11 +706,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 72(%rdi) + movq %r13, 72(%rdi) # Row 4 xorq 8(%rdi), %rcx xorq -56(%rdi), %r8 @@ -794,13 +794,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -40(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 32(%rdi) - movq $0x8000000080008000, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 32(%rdi) # XOR in constant + movq $0x8000000080008000, %r14 xorq %r14, %rsi # Row 1 movq -8(%rdi), %r10 @@ -828,11 +828,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -8(%rdi) + movq %r13, -8(%rdi) # Row 2 movq 80(%rdi), %r10 movq -48(%rdi), %r11 @@ -859,11 +859,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 80(%rdi) + movq %r13, 80(%rdi) # Row 3 movq -32(%rdi), %r10 movq 40(%rdi), %r11 @@ -890,11 +890,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 96(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -32(%rdi) + movq %r13, -32(%rdi) # Row 4 xorq 56(%rdi), %rcx xorq -72(%rdi), %r8 @@ -978,11 +978,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -16(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -56(%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -56(%rdi) # XOR in constant xorq $0x808b, %rsi # Row 1 @@ -1011,11 +1011,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, (%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -40(%rdi) + movq %r13, -40(%rdi) # Row 2 movq 16(%rdi), %r10 movq -24(%rdi), %r11 @@ -1042,11 +1042,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 96(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 16(%rdi) + movq %r13, 16(%rdi) # Row 3 movq 32(%rdi), %r10 movq -8(%rdi), %r11 @@ -1073,11 +1073,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 32(%rdi) + movq %r13, 32(%rdi) # Row 4 xorq 88(%rdi), %rcx xorq 48(%rdi), %r8 @@ -1161,13 +1161,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -88(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -72(%rdi) - movq $0x80000001, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -72(%rdi) # XOR in constant + movq $0x80000001, %r14 xorq %r14, %rsi # Row 1 movq -16(%rdi), %r10 @@ -1195,11 +1195,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -16(%rdi) + movq %r13, -16(%rdi) # Row 2 movq 64(%rdi), %r10 movq 80(%rdi), %r11 @@ -1226,11 +1226,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 64(%rdi) + movq %r13, 64(%rdi) # Row 3 movq -56(%rdi), %r10 movq -40(%rdi), %r11 @@ -1257,11 +1257,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -56(%rdi) + movq %r13, -56(%rdi) # Row 4 xorq 24(%rdi), %rcx xorq 40(%rdi), %r8 @@ -1345,13 +1345,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -48(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 48(%rdi) - movq $0x8000000080008081, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 48(%rdi) # XOR in constant + movq $0x8000000080008081, %r14 xorq %r14, %rsi # Row 1 movq -88(%rdi), %r10 @@ -1379,11 +1379,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -88(%rdi) + movq %r13, -88(%rdi) # Row 2 movq -80(%rdi), %r10 movq 16(%rdi), %r11 @@ -1410,11 +1410,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -80(%rdi) + movq %r13, -80(%rdi) # Row 3 movq -72(%rdi), %r10 movq -16(%rdi), %r11 @@ -1441,11 +1441,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -72(%rdi) + movq %r13, -72(%rdi) # Row 4 xorq -64(%rdi), %rcx xorq -8(%rdi), %r8 @@ -1529,13 +1529,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -24(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 40(%rdi) - movq $0x8000000000008009, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 40(%rdi) # XOR in constant + movq $0x8000000000008009, %r14 xorq %r14, %rsi # Row 1 movq -48(%rdi), %r10 @@ -1563,11 +1563,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -48(%rdi) + movq %r13, -48(%rdi) # Row 2 movq (%rdi), %r10 movq 64(%rdi), %r11 @@ -1594,11 +1594,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, (%rdi) + movq %r13, (%rdi) # Row 3 movq 48(%rdi), %r10 movq -88(%rdi), %r11 @@ -1625,11 +1625,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 48(%rdi) + movq %r13, 48(%rdi) # Row 4 xorq 96(%rdi), %rcx xorq -40(%rdi), %r8 @@ -1713,11 +1713,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 80(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -8(%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -8(%rdi) # XOR in constant xorq $0x8a, %rsi # Row 1 @@ -1746,11 +1746,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -24(%rdi) + movq %r13, -24(%rdi) # Row 2 movq 8(%rdi), %r10 movq -80(%rdi), %r11 @@ -1777,11 +1777,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 96(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 8(%rdi) + movq %r13, 8(%rdi) # Row 3 movq 40(%rdi), %r10 movq -48(%rdi), %r11 @@ -1808,11 +1808,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 40(%rdi) + movq %r13, 40(%rdi) # Row 4 xorq 72(%rdi), %rcx xorq -16(%rdi), %r8 @@ -1896,11 +1896,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 16(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -40(%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -40(%rdi) # XOR in constant xorq $0x88, %rsi # Row 1 @@ -1929,11 +1929,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 80(%rdi) + movq %r13, 80(%rdi) # Row 2 movq 56(%rdi), %r10 movq (%rdi), %r11 @@ -1960,11 +1960,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 56(%rdi) + movq %r13, 56(%rdi) # Row 3 movq -8(%rdi), %r10 movq -24(%rdi), %r11 @@ -1991,11 +1991,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -8(%rdi) + movq %r13, -8(%rdi) # Row 4 xorq -32(%rdi), %rcx xorq -88(%rdi), %r8 @@ -2079,13 +2079,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 64(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -16(%rdi) - movq $0x80008009, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -16(%rdi) # XOR in constant + movq $0x80008009, %r14 xorq %r14, %rsi # Row 1 movq 16(%rdi), %r10 @@ -2113,11 +2113,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 96(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 16(%rdi) + movq %r13, 16(%rdi) # Row 2 movq 88(%rdi), %r10 movq 8(%rdi), %r11 @@ -2144,11 +2144,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 88(%rdi) + movq %r13, 88(%rdi) # Row 3 movq -40(%rdi), %r10 movq 80(%rdi), %r11 @@ -2175,11 +2175,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -40(%rdi) + movq %r13, -40(%rdi) # Row 4 xorq 32(%rdi), %rcx xorq -48(%rdi), %r8 @@ -2263,13 +2263,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -80(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -88(%rdi) - movq $0x8000000a, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -88(%rdi) # XOR in constant + movq $0x8000000a, %r14 xorq %r14, %rsi # Row 1 movq 64(%rdi), %r10 @@ -2297,11 +2297,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 64(%rdi) + movq %r13, 64(%rdi) # Row 2 movq 24(%rdi), %r10 movq 56(%rdi), %r11 @@ -2328,11 +2328,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 24(%rdi) + movq %r13, 24(%rdi) # Row 3 movq -16(%rdi), %r10 movq 16(%rdi), %r11 @@ -2359,11 +2359,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, (%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -16(%rdi) + movq %r13, -16(%rdi) # Row 4 xorq -56(%rdi), %rcx xorq -24(%rdi), %r8 @@ -2447,13 +2447,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, (%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -48(%rdi) - movq $0x8000808b, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -48(%rdi) # XOR in constant + movq $0x8000808b, %r14 xorq %r14, %rsi # Row 1 movq -80(%rdi), %r10 @@ -2481,11 +2481,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -80(%rdi) + movq %r13, -80(%rdi) # Row 2 movq -64(%rdi), %r10 movq 88(%rdi), %r11 @@ -2512,11 +2512,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -64(%rdi) + movq %r13, -64(%rdi) # Row 3 movq -88(%rdi), %r10 movq 64(%rdi), %r11 @@ -2543,11 +2543,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -88(%rdi) + movq %r13, -88(%rdi) # Row 4 xorq -72(%rdi), %rcx xorq 80(%rdi), %r8 @@ -2631,13 +2631,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 8(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -24(%rdi) - movq $0x800000000000008b, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -24(%rdi) # XOR in constant + movq $0x800000000000008b, %r14 xorq %r14, %rsi # Row 1 movq (%rdi), %r10 @@ -2665,11 +2665,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 32(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, (%rdi) + movq %r13, (%rdi) # Row 2 movq 96(%rdi), %r10 movq 24(%rdi), %r11 @@ -2696,11 +2696,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -40(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 96(%rdi) + movq %r13, 96(%rdi) # Row 3 movq -48(%rdi), %r10 movq -80(%rdi), %r11 @@ -2727,11 +2727,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -48(%rdi) + movq %r13, -48(%rdi) # Row 4 xorq 48(%rdi), %rcx xorq 16(%rdi), %r8 @@ -2815,13 +2815,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 56(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 80(%rdi) - movq $0x8000000000008089, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 80(%rdi) # XOR in constant + movq $0x8000000000008089, %r14 xorq %r14, %rsi # Row 1 movq 8(%rdi), %r10 @@ -2849,11 +2849,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 8(%rdi) + movq %r13, 8(%rdi) # Row 2 movq 72(%rdi), %r10 movq -64(%rdi), %r11 @@ -2880,11 +2880,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 72(%rdi) + movq %r13, 72(%rdi) # Row 3 movq -24(%rdi), %r10 movq (%rdi), %r11 @@ -2911,11 +2911,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -24(%rdi) + movq %r13, -24(%rdi) # Row 4 xorq 40(%rdi), %rcx xorq 64(%rdi), %r8 @@ -2999,13 +2999,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 88(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 16(%rdi) - movq $0x8000000000008003, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 16(%rdi) # XOR in constant + movq $0x8000000000008003, %r14 xorq %r14, %rsi # Row 1 movq 56(%rdi), %r10 @@ -3033,11 +3033,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, (%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -72(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 56(%rdi) + movq %r13, 56(%rdi) # Row 2 movq -32(%rdi), %r10 movq 96(%rdi), %r11 @@ -3064,11 +3064,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -32(%rdi) + movq %r13, -32(%rdi) # Row 3 movq 80(%rdi), %r10 movq 8(%rdi), %r11 @@ -3095,11 +3095,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 80(%rdi) + movq %r13, 80(%rdi) # Row 4 xorq -8(%rdi), %rcx xorq -80(%rdi), %r8 @@ -3183,13 +3183,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 24(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 64(%rdi) - movq $0x8000000000008002, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 64(%rdi) # XOR in constant + movq $0x8000000000008002, %r14 xorq %r14, %rsi # Row 1 movq 88(%rdi), %r10 @@ -3217,11 +3217,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 88(%rdi) + movq %r13, 88(%rdi) # Row 2 movq 32(%rdi), %r10 movq 72(%rdi), %r11 @@ -3248,11 +3248,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 32(%rdi) + movq %r13, 32(%rdi) # Row 3 movq 16(%rdi), %r10 movq 56(%rdi), %r11 @@ -3279,11 +3279,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 16(%rdi) + movq %r13, 16(%rdi) # Row 4 xorq -40(%rdi), %rcx xorq (%rdi), %r8 @@ -3367,13 +3367,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -64(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -80(%rdi) - movq $0x8000000000000080, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -80(%rdi) # XOR in constant + movq $0x8000000000000080, %r14 xorq %r14, %rsi # Row 1 movq 24(%rdi), %r10 @@ -3401,11 +3401,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 24(%rdi) + movq %r13, 24(%rdi) # Row 2 movq -56(%rdi), %r10 movq -32(%rdi), %r11 @@ -3432,11 +3432,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -56(%rdi) + movq %r13, -56(%rdi) # Row 3 movq 64(%rdi), %r10 movq 88(%rdi), %r11 @@ -3463,11 +3463,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 96(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 64(%rdi) + movq %r13, 64(%rdi) # Row 4 xorq -16(%rdi), %rcx xorq 8(%rdi), %r8 @@ -3551,11 +3551,11 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 96(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, (%rdi) + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, (%rdi) # XOR in constant xorq $0x800a, %rsi # Row 1 @@ -3584,11 +3584,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 88(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -64(%rdi) + movq %r13, -64(%rdi) # Row 2 movq -72(%rdi), %r10 movq 32(%rdi), %r11 @@ -3615,11 +3615,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -72(%rdi) + movq %r13, -72(%rdi) # Row 3 movq -80(%rdi), %r10 movq 24(%rdi), %r11 @@ -3646,11 +3646,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -80(%rdi) + movq %r13, -80(%rdi) # Row 4 xorq -88(%rdi), %rcx xorq 56(%rdi), %r8 @@ -3734,13 +3734,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 72(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 8(%rdi) - movq $0x800000008000000a, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 8(%rdi) # XOR in constant + movq $0x800000008000000a, %r14 xorq %r14, %rsi # Row 1 movq 96(%rdi), %r10 @@ -3768,11 +3768,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 24(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -40(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 96(%rdi) + movq %r13, 96(%rdi) # Row 2 movq 48(%rdi), %r10 movq -56(%rdi), %r11 @@ -3799,11 +3799,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 16(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 48(%rdi) + movq %r13, 48(%rdi) # Row 3 movq (%rdi), %r10 movq -64(%rdi), %r11 @@ -3830,11 +3830,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 64(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, (%rdi) + movq %r13, (%rdi) # Row 4 xorq -48(%rdi), %rcx xorq 88(%rdi), %r8 @@ -3918,13 +3918,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -32(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 56(%rdi) - movq $0x8000000080008081, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 56(%rdi) # XOR in constant + movq $0x8000000080008081, %r14 xorq %r14, %rsi # Row 1 movq 72(%rdi), %r10 @@ -3952,11 +3952,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 72(%rdi) + movq %r13, 72(%rdi) # Row 2 movq 40(%rdi), %r10 movq -72(%rdi), %r11 @@ -3983,11 +3983,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 64(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 40(%rdi) + movq %r13, 40(%rdi) # Row 3 movq 8(%rdi), %r10 movq 96(%rdi), %r11 @@ -4014,11 +4014,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 8(%rdi) + movq %r13, 8(%rdi) # Row 4 xorq -24(%rdi), %rcx xorq 24(%rdi), %r8 @@ -4102,13 +4102,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, 32(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 88(%rdi) - movq $0x8000000000008080, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 88(%rdi) # XOR in constant + movq $0x8000000000008080, %r14 xorq %r14, %rsi # Row 1 movq -32(%rdi), %r10 @@ -4136,11 +4136,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 96(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -88(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -32(%rdi) + movq %r13, -32(%rdi) # Row 2 movq -8(%rdi), %r10 movq 48(%rdi), %r11 @@ -4167,11 +4167,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -80(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -8(%rdi) + movq %r13, -8(%rdi) # Row 3 movq 56(%rdi), %r10 movq 72(%rdi), %r11 @@ -4198,11 +4198,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -56(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, (%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 56(%rdi) + movq %r13, 56(%rdi) # Row 4 xorq 80(%rdi), %rcx xorq -64(%rdi), %r8 @@ -4286,13 +4286,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -56(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, 24(%rdi) - movq $0x80000001, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, 24(%rdi) # XOR in constant + movq $0x80000001, %r14 xorq %r14, %rsi # Row 1 movq 32(%rdi), %r10 @@ -4320,11 +4320,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -48(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 32(%rdi) + movq %r13, 32(%rdi) # Row 2 movq -40(%rdi), %r10 movq 40(%rdi), %r11 @@ -4351,11 +4351,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, (%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 80(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -40(%rdi) + movq %r13, -40(%rdi) # Row 3 movq 88(%rdi), %r10 movq -32(%rdi), %r11 @@ -4382,11 +4382,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -72(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 8(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 88(%rdi) + movq %r13, 88(%rdi) # Row 4 xorq 16(%rdi), %rcx xorq 96(%rdi), %r8 @@ -4470,13 +4470,13 @@ _sha3_block_bmi2: andnq %r10, %r14, %r15 xorq %r13, %r15 movq %r15, -72(%rdi) - andnq %r11, %r10, %r15 - xorq %r14, %r15 - movq %r15, -64(%rdi) - movq $0x8000000080008008, %r14 + andnq %r11, %r10, %r13 andnq %r12, %r11, %rsi + xorq %r14, %r13 xorq %r10, %rsi + movq %r13, -64(%rdi) # XOR in constant + movq $0x8000000080008008, %r14 xorq %r14, %rsi # Row 1 movq -56(%rdi), %r10 @@ -4504,11 +4504,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, -32(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, -24(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -56(%rdi) + movq %r13, -56(%rdi) # Row 2 movq -16(%rdi), %r10 movq -8(%rdi), %r11 @@ -4535,11 +4535,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 8(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 16(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, -16(%rdi) + movq %r13, -16(%rdi) # Row 3 movq 24(%rdi), %r10 movq 32(%rdi), %r11 @@ -4566,11 +4566,11 @@ _sha3_block_bmi2: xorq %r13, %r15 movq %r15, 48(%rdi) andnq %r11, %r10, %r15 + andnq %r12, %r11, %r13 xorq %r14, %r15 + xorq %r10, %r13 movq %r15, 56(%rdi) - andnq %r12, %r11, %r15 - xorq %r10, %r15 - movq %r15, 24(%rdi) + movq %r13, 24(%rdi) # Row 4 xorq 64(%rdi), %rcx xorq 72(%rdi), %r8 @@ -4937,11 +4937,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 48(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 96(%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 96(%rdi) # XOR in constant xorq $0x01, %rcx # Row 1 @@ -4970,11 +4970,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -72(%rdi) + movq %r15, -72(%rdi) # Row 2 movq -88(%rdi), %r12 movq -40(%rdi), %r13 @@ -5001,11 +5001,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -88(%rdi) + movq %r15, -88(%rdi) # Row 3 movq -64(%rdi), %r12 movq -56(%rdi), %r13 @@ -5032,11 +5032,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -64(%rdi) + movq %r15, -64(%rdi) # Row 4 xorq -80(%rdi), %r9 xorq -32(%rdi), %r10 @@ -5120,11 +5120,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 40(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 72(%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 72(%rdi) # XOR in constant xorq $0x8082, %rcx # Row 1 @@ -5153,11 +5153,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 48(%rdi) + movq %r15, 48(%rdi) # Row 2 movq -48(%rdi), %r12 movq -16(%rdi), %r13 @@ -5184,11 +5184,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -48(%rdi) + movq %r15, -48(%rdi) # Row 3 movq 96(%rdi), %r12 movq -72(%rdi), %r13 @@ -5215,11 +5215,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 96(%rdi) + movq %r15, 96(%rdi) # Row 4 xorq (%rdi), %r9 xorq 32(%rdi), %r10 @@ -5303,13 +5303,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -8(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -32(%rdi) - movq $0x800000000000808a, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -32(%rdi) # XOR in constant + movq $0x800000000000808a, %rbx xorq %rbx, %rcx # Row 1 movq 40(%rdi), %r12 @@ -5337,11 +5337,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 40(%rdi) + movq %r15, 40(%rdi) # Row 2 movq -24(%rdi), %r12 movq -88(%rdi), %r13 @@ -5368,11 +5368,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, (%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -24(%rdi) + movq %r15, -24(%rdi) # Row 3 movq 72(%rdi), %r12 movq 48(%rdi), %r13 @@ -5399,11 +5399,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 72(%rdi) + movq %r15, 72(%rdi) # Row 4 xorq 8(%rdi), %r9 xorq -56(%rdi), %r10 @@ -5487,13 +5487,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -40(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 32(%rdi) - movq $0x8000000080008000, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 32(%rdi) # XOR in constant + movq $0x8000000080008000, %rbx xorq %rbx, %rcx # Row 1 movq -8(%rdi), %r12 @@ -5521,11 +5521,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -8(%rdi) + movq %r15, -8(%rdi) # Row 2 movq 80(%rdi), %r12 movq -48(%rdi), %r13 @@ -5552,11 +5552,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 80(%rdi) + movq %r15, 80(%rdi) # Row 3 movq -32(%rdi), %r12 movq 40(%rdi), %r13 @@ -5583,11 +5583,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 96(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -32(%rdi) + movq %r15, -32(%rdi) # Row 4 xorq 56(%rdi), %r9 xorq -72(%rdi), %r10 @@ -5671,11 +5671,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -16(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -56(%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -56(%rdi) # XOR in constant xorq $0x808b, %rcx # Row 1 @@ -5704,11 +5704,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, (%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -40(%rdi) + movq %r15, -40(%rdi) # Row 2 movq 16(%rdi), %r12 movq -24(%rdi), %r13 @@ -5735,11 +5735,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 96(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 16(%rdi) + movq %r15, 16(%rdi) # Row 3 movq 32(%rdi), %r12 movq -8(%rdi), %r13 @@ -5766,11 +5766,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 32(%rdi) + movq %r15, 32(%rdi) # Row 4 xorq 88(%rdi), %r9 xorq 48(%rdi), %r10 @@ -5854,13 +5854,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -88(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -72(%rdi) - movq $0x80000001, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -72(%rdi) # XOR in constant + movq $0x80000001, %rbx xorq %rbx, %rcx # Row 1 movq -16(%rdi), %r12 @@ -5888,11 +5888,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -16(%rdi) + movq %r15, -16(%rdi) # Row 2 movq 64(%rdi), %r12 movq 80(%rdi), %r13 @@ -5919,11 +5919,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 64(%rdi) + movq %r15, 64(%rdi) # Row 3 movq -56(%rdi), %r12 movq -40(%rdi), %r13 @@ -5950,11 +5950,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -56(%rdi) + movq %r15, -56(%rdi) # Row 4 xorq 24(%rdi), %r9 xorq 40(%rdi), %r10 @@ -6038,13 +6038,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -48(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 48(%rdi) - movq $0x8000000080008081, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 48(%rdi) # XOR in constant + movq $0x8000000080008081, %rbx xorq %rbx, %rcx # Row 1 movq -88(%rdi), %r12 @@ -6072,11 +6072,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -88(%rdi) + movq %r15, -88(%rdi) # Row 2 movq -80(%rdi), %r12 movq 16(%rdi), %r13 @@ -6103,11 +6103,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -80(%rdi) + movq %r15, -80(%rdi) # Row 3 movq -72(%rdi), %r12 movq -16(%rdi), %r13 @@ -6134,11 +6134,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -72(%rdi) + movq %r15, -72(%rdi) # Row 4 xorq -64(%rdi), %r9 xorq -8(%rdi), %r10 @@ -6222,13 +6222,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -24(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 40(%rdi) - movq $0x8000000000008009, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 40(%rdi) # XOR in constant + movq $0x8000000000008009, %rbx xorq %rbx, %rcx # Row 1 movq -48(%rdi), %r12 @@ -6256,11 +6256,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -48(%rdi) + movq %r15, -48(%rdi) # Row 2 movq (%rdi), %r12 movq 64(%rdi), %r13 @@ -6287,11 +6287,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, (%rdi) + movq %r15, (%rdi) # Row 3 movq 48(%rdi), %r12 movq -88(%rdi), %r13 @@ -6318,11 +6318,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 48(%rdi) + movq %r15, 48(%rdi) # Row 4 xorq 96(%rdi), %r9 xorq -40(%rdi), %r10 @@ -6406,11 +6406,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 80(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -8(%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -8(%rdi) # XOR in constant xorq $0x8a, %rcx # Row 1 @@ -6439,11 +6439,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -24(%rdi) + movq %r15, -24(%rdi) # Row 2 movq 8(%rdi), %r12 movq -80(%rdi), %r13 @@ -6470,11 +6470,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 96(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 8(%rdi) + movq %r15, 8(%rdi) # Row 3 movq 40(%rdi), %r12 movq -48(%rdi), %r13 @@ -6501,11 +6501,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 40(%rdi) + movq %r15, 40(%rdi) # Row 4 xorq 72(%rdi), %r9 xorq -16(%rdi), %r10 @@ -6589,11 +6589,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 16(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -40(%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -40(%rdi) # XOR in constant xorq $0x88, %rcx # Row 1 @@ -6622,11 +6622,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 80(%rdi) + movq %r15, 80(%rdi) # Row 2 movq 56(%rdi), %r12 movq (%rdi), %r13 @@ -6653,11 +6653,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 56(%rdi) + movq %r15, 56(%rdi) # Row 3 movq -8(%rdi), %r12 movq -24(%rdi), %r13 @@ -6684,11 +6684,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -8(%rdi) + movq %r15, -8(%rdi) # Row 4 xorq -32(%rdi), %r9 xorq -88(%rdi), %r10 @@ -6772,13 +6772,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 64(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -16(%rdi) - movq $0x80008009, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -16(%rdi) # XOR in constant + movq $0x80008009, %rbx xorq %rbx, %rcx # Row 1 movq 16(%rdi), %r12 @@ -6806,11 +6806,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 96(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 16(%rdi) + movq %r15, 16(%rdi) # Row 2 movq 88(%rdi), %r12 movq 8(%rdi), %r13 @@ -6837,11 +6837,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 88(%rdi) + movq %r15, 88(%rdi) # Row 3 movq -40(%rdi), %r12 movq 80(%rdi), %r13 @@ -6868,11 +6868,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -40(%rdi) + movq %r15, -40(%rdi) # Row 4 xorq 32(%rdi), %r9 xorq -48(%rdi), %r10 @@ -6956,13 +6956,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -80(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -88(%rdi) - movq $0x8000000a, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -88(%rdi) # XOR in constant + movq $0x8000000a, %rbx xorq %rbx, %rcx # Row 1 movq 64(%rdi), %r12 @@ -6990,11 +6990,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 64(%rdi) + movq %r15, 64(%rdi) # Row 2 movq 24(%rdi), %r12 movq 56(%rdi), %r13 @@ -7021,11 +7021,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 24(%rdi) + movq %r15, 24(%rdi) # Row 3 movq -16(%rdi), %r12 movq 16(%rdi), %r13 @@ -7052,11 +7052,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, (%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -16(%rdi) + movq %r15, -16(%rdi) # Row 4 xorq -56(%rdi), %r9 xorq -24(%rdi), %r10 @@ -7140,13 +7140,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, (%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -48(%rdi) - movq $0x8000808b, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -48(%rdi) # XOR in constant + movq $0x8000808b, %rbx xorq %rbx, %rcx # Row 1 movq -80(%rdi), %r12 @@ -7174,11 +7174,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -80(%rdi) + movq %r15, -80(%rdi) # Row 2 movq -64(%rdi), %r12 movq 88(%rdi), %r13 @@ -7205,11 +7205,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -64(%rdi) + movq %r15, -64(%rdi) # Row 3 movq -88(%rdi), %r12 movq 64(%rdi), %r13 @@ -7236,11 +7236,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -88(%rdi) + movq %r15, -88(%rdi) # Row 4 xorq -72(%rdi), %r9 xorq 80(%rdi), %r10 @@ -7324,13 +7324,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 8(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -24(%rdi) - movq $0x800000000000008b, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -24(%rdi) # XOR in constant + movq $0x800000000000008b, %rbx xorq %rbx, %rcx # Row 1 movq (%rdi), %r12 @@ -7358,11 +7358,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 32(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, (%rdi) + movq %r15, (%rdi) # Row 2 movq 96(%rdi), %r12 movq 24(%rdi), %r13 @@ -7389,11 +7389,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -40(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 96(%rdi) + movq %r15, 96(%rdi) # Row 3 movq -48(%rdi), %r12 movq -80(%rdi), %r13 @@ -7420,11 +7420,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -48(%rdi) + movq %r15, -48(%rdi) # Row 4 xorq 48(%rdi), %r9 xorq 16(%rdi), %r10 @@ -7508,13 +7508,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 56(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 80(%rdi) - movq $0x8000000000008089, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 80(%rdi) # XOR in constant + movq $0x8000000000008089, %rbx xorq %rbx, %rcx # Row 1 movq 8(%rdi), %r12 @@ -7542,11 +7542,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 8(%rdi) + movq %r15, 8(%rdi) # Row 2 movq 72(%rdi), %r12 movq -64(%rdi), %r13 @@ -7573,11 +7573,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 72(%rdi) + movq %r15, 72(%rdi) # Row 3 movq -24(%rdi), %r12 movq (%rdi), %r13 @@ -7604,11 +7604,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -24(%rdi) + movq %r15, -24(%rdi) # Row 4 xorq 40(%rdi), %r9 xorq 64(%rdi), %r10 @@ -7692,13 +7692,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 88(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 16(%rdi) - movq $0x8000000000008003, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 16(%rdi) # XOR in constant + movq $0x8000000000008003, %rbx xorq %rbx, %rcx # Row 1 movq 56(%rdi), %r12 @@ -7726,11 +7726,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, (%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -72(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 56(%rdi) + movq %r15, 56(%rdi) # Row 2 movq -32(%rdi), %r12 movq 96(%rdi), %r13 @@ -7757,11 +7757,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -32(%rdi) + movq %r15, -32(%rdi) # Row 3 movq 80(%rdi), %r12 movq 8(%rdi), %r13 @@ -7788,11 +7788,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 80(%rdi) + movq %r15, 80(%rdi) # Row 4 xorq -8(%rdi), %r9 xorq -80(%rdi), %r10 @@ -7876,13 +7876,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 24(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 64(%rdi) - movq $0x8000000000008002, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 64(%rdi) # XOR in constant + movq $0x8000000000008002, %rbx xorq %rbx, %rcx # Row 1 movq 88(%rdi), %r12 @@ -7910,11 +7910,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 88(%rdi) + movq %r15, 88(%rdi) # Row 2 movq 32(%rdi), %r12 movq 72(%rdi), %r13 @@ -7941,11 +7941,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 32(%rdi) + movq %r15, 32(%rdi) # Row 3 movq 16(%rdi), %r12 movq 56(%rdi), %r13 @@ -7972,11 +7972,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 16(%rdi) + movq %r15, 16(%rdi) # Row 4 xorq -40(%rdi), %r9 xorq (%rdi), %r10 @@ -8060,13 +8060,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -64(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -80(%rdi) - movq $0x8000000000000080, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -80(%rdi) # XOR in constant + movq $0x8000000000000080, %rbx xorq %rbx, %rcx # Row 1 movq 24(%rdi), %r12 @@ -8094,11 +8094,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 24(%rdi) + movq %r15, 24(%rdi) # Row 2 movq -56(%rdi), %r12 movq -32(%rdi), %r13 @@ -8125,11 +8125,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -56(%rdi) + movq %r15, -56(%rdi) # Row 3 movq 64(%rdi), %r12 movq 88(%rdi), %r13 @@ -8156,11 +8156,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 96(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 64(%rdi) + movq %r15, 64(%rdi) # Row 4 xorq -16(%rdi), %r9 xorq 8(%rdi), %r10 @@ -8244,11 +8244,11 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 96(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, (%rdi) + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, (%rdi) # XOR in constant xorq $0x800a, %rcx # Row 1 @@ -8277,11 +8277,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 88(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -64(%rdi) + movq %r15, -64(%rdi) # Row 2 movq -72(%rdi), %r12 movq 32(%rdi), %r13 @@ -8308,11 +8308,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -72(%rdi) + movq %r15, -72(%rdi) # Row 3 movq -80(%rdi), %r12 movq 24(%rdi), %r13 @@ -8339,11 +8339,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -80(%rdi) + movq %r15, -80(%rdi) # Row 4 xorq -88(%rdi), %r9 xorq 56(%rdi), %r10 @@ -8427,13 +8427,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 72(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 8(%rdi) - movq $0x800000008000000a, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 8(%rdi) # XOR in constant + movq $0x800000008000000a, %rbx xorq %rbx, %rcx # Row 1 movq 96(%rdi), %r12 @@ -8461,11 +8461,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 24(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -40(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 96(%rdi) + movq %r15, 96(%rdi) # Row 2 movq 48(%rdi), %r12 movq -56(%rdi), %r13 @@ -8492,11 +8492,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 16(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 48(%rdi) + movq %r15, 48(%rdi) # Row 3 movq (%rdi), %r12 movq -64(%rdi), %r13 @@ -8523,11 +8523,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 64(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, (%rdi) + movq %r15, (%rdi) # Row 4 xorq -48(%rdi), %r9 xorq 88(%rdi), %r10 @@ -8611,13 +8611,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -32(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 56(%rdi) - movq $0x8000000080008081, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 56(%rdi) # XOR in constant + movq $0x8000000080008081, %rbx xorq %rbx, %rcx # Row 1 movq 72(%rdi), %r12 @@ -8645,11 +8645,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 72(%rdi) + movq %r15, 72(%rdi) # Row 2 movq 40(%rdi), %r12 movq -72(%rdi), %r13 @@ -8676,11 +8676,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 64(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 40(%rdi) + movq %r15, 40(%rdi) # Row 3 movq 8(%rdi), %r12 movq 96(%rdi), %r13 @@ -8707,11 +8707,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 8(%rdi) + movq %r15, 8(%rdi) # Row 4 xorq -24(%rdi), %r9 xorq 24(%rdi), %r10 @@ -8795,13 +8795,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, 32(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 88(%rdi) - movq $0x8000000000008080, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 88(%rdi) # XOR in constant + movq $0x8000000000008080, %rbx xorq %rbx, %rcx # Row 1 movq -32(%rdi), %r12 @@ -8829,11 +8829,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 96(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -88(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -32(%rdi) + movq %r15, -32(%rdi) # Row 2 movq -8(%rdi), %r12 movq 48(%rdi), %r13 @@ -8860,11 +8860,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -80(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -8(%rdi) + movq %r15, -8(%rdi) # Row 3 movq 56(%rdi), %r12 movq 72(%rdi), %r13 @@ -8891,11 +8891,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -56(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, (%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 56(%rdi) + movq %r15, 56(%rdi) # Row 4 xorq 80(%rdi), %r9 xorq -64(%rdi), %r10 @@ -8979,13 +8979,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -56(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, 24(%rdi) - movq $0x80000001, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, 24(%rdi) # XOR in constant + movq $0x80000001, %rbx xorq %rbx, %rcx # Row 1 movq 32(%rdi), %r12 @@ -9013,11 +9013,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -48(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 32(%rdi) + movq %r15, 32(%rdi) # Row 2 movq -40(%rdi), %r12 movq 40(%rdi), %r13 @@ -9044,11 +9044,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, (%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 80(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -40(%rdi) + movq %r15, -40(%rdi) # Row 3 movq 88(%rdi), %r12 movq -32(%rdi), %r13 @@ -9075,11 +9075,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -72(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 8(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 88(%rdi) + movq %r15, 88(%rdi) # Row 4 xorq 16(%rdi), %r9 xorq 96(%rdi), %r10 @@ -9163,13 +9163,13 @@ L_sha3_block_n_bmi2_rounds: andnq %r12, %rbx, %rbp xorq %r15, %rbp movq %rbp, -72(%rdi) - andnq %r13, %r12, %rbp - xorq %rbx, %rbp - movq %rbp, -64(%rdi) - movq $0x8000000080008008, %rbx + andnq %r13, %r12, %r15 andnq %r14, %r13, %rcx + xorq %rbx, %r15 xorq %r12, %rcx + movq %r15, -64(%rdi) # XOR in constant + movq $0x8000000080008008, %rbx xorq %rbx, %rcx # Row 1 movq -56(%rdi), %r12 @@ -9197,11 +9197,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, -32(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, -24(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -56(%rdi) + movq %r15, -56(%rdi) # Row 2 movq -16(%rdi), %r12 movq -8(%rdi), %r13 @@ -9228,11 +9228,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 8(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 16(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, -16(%rdi) + movq %r15, -16(%rdi) # Row 3 movq 24(%rdi), %r12 movq 32(%rdi), %r13 @@ -9259,11 +9259,11 @@ L_sha3_block_n_bmi2_rounds: xorq %r15, %rbp movq %rbp, 48(%rdi) andnq %r13, %r12, %rbp + andnq %r14, %r13, %r15 xorq %rbx, %rbp + xorq %r12, %r15 movq %rbp, 56(%rdi) - andnq %r14, %r13, %rbp - xorq %r12, %rbp - movq %rbp, 24(%rdi) + movq %r15, 24(%rdi) # Row 4 xorq 64(%rdi), %r9 xorq 72(%rdi), %r10 diff --git a/wolfcrypt/src/wc_mlkem.c b/wolfcrypt/src/wc_mlkem.c index 61f7111e3..2951e6fe1 100644 --- a/wolfcrypt/src/wc_mlkem.c +++ b/wolfcrypt/src/wc_mlkem.c @@ -348,12 +348,12 @@ int wc_MlKemKey_MakeKeyWithRandom(MlKemKey* key, const unsigned char* rand, #else #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM #ifndef WOLFSSL_MLKEM_CACHE_A - sword16 e[(MLKEM_MAX_K + 1) * MLKEM_MAX_K * MLKEM_N]; + sword16 e[(WC_ML_KEM_MAX_K + 1) * WC_ML_KEM_MAX_K * MLKEM_N]; #else - sword16 e[MLKEM_MAX_K * MLKEM_N]; + sword16 e[WC_ML_KEM_MAX_K * MLKEM_N]; #endif #else - sword16 e[MLKEM_MAX_K * MLKEM_N]; + sword16 e[WC_ML_KEM_MAX_K * MLKEM_N]; #endif #endif #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM @@ -667,9 +667,9 @@ static int mlkemkey_encapsulate(MlKemKey* key, const byte* m, byte* r, byte* c) sword16* y = NULL; #else #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - sword16 y[((MLKEM_MAX_K + 3) * MLKEM_MAX_K + 3) * MLKEM_N]; + sword16 y[((WC_ML_KEM_MAX_K + 3) * WC_ML_KEM_MAX_K + 3) * MLKEM_N]; #else - sword16 y[3 * MLKEM_MAX_K * MLKEM_N]; + sword16 y[3 * WC_ML_KEM_MAX_K * MLKEM_N]; #endif #endif sword16* u; @@ -1266,39 +1266,6 @@ static MLKEM_NOINLINE int mlkemkey_decapsulate(MlKemKey* key, byte* m, return ret; } -#ifndef WOLFSSL_NO_ML_KEM -/* Derive the secret from z and cipher text. - * - * @param [in] z Implicit rejection value. - * @param [in] ct Cipher text. - * @param [in] ctSz Length of cipher text in bytes. - * @param [out] ss Shared secret. - * @return 0 on success. - * @return MEMORY_E when dynamic memory allocation failed. - * @return Other negative when a hash error occurred. - */ -static int mlkem_derive_secret(const byte* z, const byte* ct, word32 ctSz, - byte* ss) -{ - int ret; - wc_Shake shake; - - ret = wc_InitShake256(&shake, NULL, INVALID_DEVID); - if (ret == 0) { - ret = wc_Shake256_Update(&shake, z, WC_ML_KEM_SYM_SZ); - if (ret == 0) { - ret = wc_Shake256_Update(&shake, ct, ctSz); - } - if (ret == 0) { - ret = wc_Shake256_Final(&shake, ss, WC_ML_KEM_SS_SZ); - } - wc_Shake256_Free(&shake); - } - - return ret; -} -#endif - /** * Decapsulate the cipher text to calculate the shared secret. * @@ -1461,7 +1428,7 @@ int wc_MlKemKey_Decapsulate(MlKemKey* key, unsigned char* ss, #endif #ifndef WOLFSSL_NO_ML_KEM { - ret = mlkem_derive_secret(key->z, ct, ctSz, msg); + ret = mlkem_derive_secret(&key->prf, key->z, ct, ctSz, msg); if (ret == 0) { /* Set secret to kr or fake secret on comparison failure. */ for (i = 0; i < WC_ML_KEM_SYM_SZ; i++) { diff --git a/wolfcrypt/src/wc_mlkem_asm.S b/wolfcrypt/src/wc_mlkem_asm.S index ffb77b730..f804be428 100644 --- a/wolfcrypt/src/wc_mlkem_asm.S +++ b/wolfcrypt/src/wc_mlkem_asm.S @@ -1579,15 +1579,17 @@ mlkem_keygen_avx2: .p2align 4 _mlkem_keygen_avx2: #endif /* __APPLE__ */ + pushq %r12 vmovdqu mlkem_q(%rip), %ymm14 vmovdqu mlkem_v(%rip), %ymm15 + movq %rdi, %r11 movslq %r8d, %r9 movq %rdi, %r10 L_mlkem_keygen_avx2_priv: # ntt - leaq L_mlkem_avx2_zetas(%rip), %r11 - vmovdqu (%r11), %ymm10 - vmovdqu 32(%r11), %ymm12 + leaq L_mlkem_avx2_zetas(%rip), %r12 + vmovdqu (%r12), %ymm10 + vmovdqu 32(%r12), %ymm12 vmovdqu 128(%r10), %ymm0 vmovdqu 160(%r10), %ymm1 vmovdqu 192(%r10), %ymm2 @@ -1669,8 +1671,8 @@ L_mlkem_keygen_avx2_priv: vmovdqu 192(%r10), %ymm6 vmovdqu 224(%r10), %ymm7 # 64: 0/3 - vmovdqu 64(%r11), %ymm10 - vmovdqu 96(%r11), %ymm12 + vmovdqu 64(%r12), %ymm10 + vmovdqu 96(%r12), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -1696,8 +1698,8 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 0/3 - vmovdqu 128(%r11), %ymm10 - vmovdqu 160(%r11), %ymm12 + vmovdqu 128(%r12), %ymm10 + vmovdqu 160(%r12), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -1711,8 +1713,8 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 0/3 - vmovdqu 192(%r11), %ymm10 - vmovdqu 224(%r11), %ymm12 + vmovdqu 192(%r12), %ymm10 + vmovdqu 224(%r12), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -1726,10 +1728,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 0/3 - vmovdqu 256(%r11), %ymm10 - vmovdqu 288(%r11), %ymm12 - vmovdqu 320(%r11), %ymm11 - vmovdqu 352(%r11), %ymm13 + vmovdqu 256(%r12), %ymm10 + vmovdqu 288(%r12), %ymm12 + vmovdqu 320(%r12), %ymm11 + vmovdqu 352(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -1743,10 +1745,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 0/3 - vmovdqu 384(%r11), %ymm10 - vmovdqu 416(%r11), %ymm12 - vmovdqu 448(%r11), %ymm11 - vmovdqu 480(%r11), %ymm13 + vmovdqu 384(%r12), %ymm10 + vmovdqu 416(%r12), %ymm12 + vmovdqu 448(%r12), %ymm11 + vmovdqu 480(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -1761,13 +1763,13 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm9, %ymm6, %ymm6 # 8: 0/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 512(%r11), %ymm10 + vmovdqu 512(%r12), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 544(%r11), %ymm12 + vmovdqu 544(%r12), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 576(%r11), %ymm11 + vmovdqu 576(%r12), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 608(%r11), %ymm13 + vmovdqu 608(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -1781,10 +1783,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 640(%r11), %ymm10 - vmovdqu 672(%r11), %ymm12 - vmovdqu 704(%r11), %ymm11 - vmovdqu 736(%r11), %ymm13 + vmovdqu 640(%r12), %ymm10 + vmovdqu 672(%r12), %ymm12 + vmovdqu 704(%r12), %ymm11 + vmovdqu 736(%r12), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -1803,13 +1805,13 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm9, %ymm2, %ymm2 # 8: 0/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 768(%r11), %ymm10 + vmovdqu 768(%r12), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 800(%r11), %ymm12 + vmovdqu 800(%r12), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 832(%r11), %ymm11 + vmovdqu 832(%r12), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 864(%r11), %ymm13 + vmovdqu 864(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -1823,10 +1825,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 896(%r11), %ymm10 - vmovdqu 928(%r11), %ymm12 - vmovdqu 960(%r11), %ymm11 - vmovdqu 992(%r11), %ymm13 + vmovdqu 896(%r12), %ymm10 + vmovdqu 928(%r12), %ymm12 + vmovdqu 960(%r12), %ymm11 + vmovdqu 992(%r12), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -1844,10 +1846,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 0/3 - vmovdqu 1024(%r11), %ymm10 - vmovdqu 1056(%r11), %ymm12 - vmovdqu 1088(%r11), %ymm11 - vmovdqu 1120(%r11), %ymm13 + vmovdqu 1024(%r12), %ymm10 + vmovdqu 1056(%r12), %ymm12 + vmovdqu 1088(%r12), %ymm11 + vmovdqu 1120(%r12), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -1869,10 +1871,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 0/3 - vmovdqu 1152(%r11), %ymm10 - vmovdqu 1184(%r11), %ymm12 - vmovdqu 1216(%r11), %ymm11 - vmovdqu 1248(%r11), %ymm13 + vmovdqu 1152(%r12), %ymm10 + vmovdqu 1184(%r12), %ymm12 + vmovdqu 1216(%r12), %ymm11 + vmovdqu 1248(%r12), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -1958,8 +1960,8 @@ L_mlkem_keygen_avx2_priv: vmovdqu 448(%r10), %ymm6 vmovdqu 480(%r10), %ymm7 # 64: 1/3 - vmovdqu 1280(%r11), %ymm10 - vmovdqu 1312(%r11), %ymm12 + vmovdqu 1280(%r12), %ymm10 + vmovdqu 1312(%r12), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -1985,8 +1987,8 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 1/3 - vmovdqu 1344(%r11), %ymm10 - vmovdqu 1376(%r11), %ymm12 + vmovdqu 1344(%r12), %ymm10 + vmovdqu 1376(%r12), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -2000,8 +2002,8 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 1/3 - vmovdqu 1408(%r11), %ymm10 - vmovdqu 1440(%r11), %ymm12 + vmovdqu 1408(%r12), %ymm10 + vmovdqu 1440(%r12), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -2015,10 +2017,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 1/3 - vmovdqu 1472(%r11), %ymm10 - vmovdqu 1504(%r11), %ymm12 - vmovdqu 1536(%r11), %ymm11 - vmovdqu 1568(%r11), %ymm13 + vmovdqu 1472(%r12), %ymm10 + vmovdqu 1504(%r12), %ymm12 + vmovdqu 1536(%r12), %ymm11 + vmovdqu 1568(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -2032,10 +2034,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 1/3 - vmovdqu 1600(%r11), %ymm10 - vmovdqu 1632(%r11), %ymm12 - vmovdqu 1664(%r11), %ymm11 - vmovdqu 1696(%r11), %ymm13 + vmovdqu 1600(%r12), %ymm10 + vmovdqu 1632(%r12), %ymm12 + vmovdqu 1664(%r12), %ymm11 + vmovdqu 1696(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -2050,13 +2052,13 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm9, %ymm6, %ymm6 # 8: 1/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 1728(%r11), %ymm10 + vmovdqu 1728(%r12), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 1760(%r11), %ymm12 + vmovdqu 1760(%r12), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 1792(%r11), %ymm11 + vmovdqu 1792(%r12), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 1824(%r11), %ymm13 + vmovdqu 1824(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -2070,10 +2072,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 1856(%r11), %ymm10 - vmovdqu 1888(%r11), %ymm12 - vmovdqu 1920(%r11), %ymm11 - vmovdqu 1952(%r11), %ymm13 + vmovdqu 1856(%r12), %ymm10 + vmovdqu 1888(%r12), %ymm12 + vmovdqu 1920(%r12), %ymm11 + vmovdqu 1952(%r12), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -2092,13 +2094,13 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm9, %ymm2, %ymm2 # 8: 1/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 1984(%r11), %ymm10 + vmovdqu 1984(%r12), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 2016(%r11), %ymm12 + vmovdqu 2016(%r12), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 2048(%r11), %ymm11 + vmovdqu 2048(%r12), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 2080(%r11), %ymm13 + vmovdqu 2080(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -2112,10 +2114,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 2112(%r11), %ymm10 - vmovdqu 2144(%r11), %ymm12 - vmovdqu 2176(%r11), %ymm11 - vmovdqu 2208(%r11), %ymm13 + vmovdqu 2112(%r12), %ymm10 + vmovdqu 2144(%r12), %ymm12 + vmovdqu 2176(%r12), %ymm11 + vmovdqu 2208(%r12), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -2133,10 +2135,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 1/3 - vmovdqu 2240(%r11), %ymm10 - vmovdqu 2272(%r11), %ymm12 - vmovdqu 2304(%r11), %ymm11 - vmovdqu 2336(%r11), %ymm13 + vmovdqu 2240(%r12), %ymm10 + vmovdqu 2272(%r12), %ymm12 + vmovdqu 2304(%r12), %ymm11 + vmovdqu 2336(%r12), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -2158,10 +2160,10 @@ L_mlkem_keygen_avx2_priv: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 1/3 - vmovdqu 2368(%r11), %ymm10 - vmovdqu 2400(%r11), %ymm12 - vmovdqu 2432(%r11), %ymm11 - vmovdqu 2464(%r11), %ymm13 + vmovdqu 2368(%r12), %ymm10 + vmovdqu 2400(%r12), %ymm12 + vmovdqu 2432(%r12), %ymm11 + vmovdqu 2464(%r12), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -2248,7 +2250,7 @@ L_mlkem_keygen_avx2_acc: # Pointwise acc mont movslq %r8d, %r9 # Base mul mont - leaq L_mlkem_avx2_zetas_basemul(%rip), %r11 + leaq L_mlkem_avx2_zetas_basemul(%rip), %r12 vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -2261,8 +2263,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r11), %ymm10 - vmovdqu 32(%r11), %ymm11 + vmovdqu (%r12), %ymm10 + vmovdqu 32(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2305,8 +2307,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r11), %ymm10 - vmovdqu 96(%r11), %ymm11 + vmovdqu 64(%r12), %ymm10 + vmovdqu 96(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2349,8 +2351,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r11), %ymm10 - vmovdqu 160(%r11), %ymm11 + vmovdqu 128(%r12), %ymm10 + vmovdqu 160(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2393,8 +2395,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r11), %ymm10 - vmovdqu 224(%r11), %ymm11 + vmovdqu 192(%r12), %ymm10 + vmovdqu 224(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2437,8 +2439,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r11), %ymm10 - vmovdqu 288(%r11), %ymm11 + vmovdqu 256(%r12), %ymm10 + vmovdqu 288(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2481,8 +2483,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r11), %ymm10 - vmovdqu 352(%r11), %ymm11 + vmovdqu 320(%r12), %ymm10 + vmovdqu 352(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2525,8 +2527,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r11), %ymm10 - vmovdqu 416(%r11), %ymm11 + vmovdqu 384(%r12), %ymm10 + vmovdqu 416(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2569,8 +2571,8 @@ L_mlkem_keygen_avx2_acc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r11), %ymm10 - vmovdqu 480(%r11), %ymm11 + vmovdqu 448(%r12), %ymm10 + vmovdqu 480(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2607,7 +2609,7 @@ L_mlkem_keygen_avx2_acc: jz L_pointwise_acc_mont_end_keygen L_pointwise_acc_mont_start_keygen: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r11 + leaq L_mlkem_avx2_zetas_basemul(%rip), %r12 vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -2620,8 +2622,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r11), %ymm10 - vmovdqu 32(%r11), %ymm11 + vmovdqu (%r12), %ymm10 + vmovdqu 32(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2668,8 +2670,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r11), %ymm10 - vmovdqu 96(%r11), %ymm11 + vmovdqu 64(%r12), %ymm10 + vmovdqu 96(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2716,8 +2718,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r11), %ymm10 - vmovdqu 160(%r11), %ymm11 + vmovdqu 128(%r12), %ymm10 + vmovdqu 160(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2764,8 +2766,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r11), %ymm10 - vmovdqu 224(%r11), %ymm11 + vmovdqu 192(%r12), %ymm10 + vmovdqu 224(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2812,8 +2814,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r11), %ymm10 - vmovdqu 288(%r11), %ymm11 + vmovdqu 256(%r12), %ymm10 + vmovdqu 288(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2860,8 +2862,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r11), %ymm10 - vmovdqu 352(%r11), %ymm11 + vmovdqu 320(%r12), %ymm10 + vmovdqu 352(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2908,8 +2910,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r11), %ymm10 - vmovdqu 416(%r11), %ymm11 + vmovdqu 384(%r12), %ymm10 + vmovdqu 416(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2956,8 +2958,8 @@ L_pointwise_acc_mont_start_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r11), %ymm10 - vmovdqu 480(%r11), %ymm11 + vmovdqu 448(%r12), %ymm10 + vmovdqu 480(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -2998,7 +3000,7 @@ L_pointwise_acc_mont_start_keygen: jg L_pointwise_acc_mont_start_keygen L_pointwise_acc_mont_end_keygen: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r11 + leaq L_mlkem_avx2_zetas_basemul(%rip), %r12 vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -3011,8 +3013,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r11), %ymm10 - vmovdqu 32(%r11), %ymm11 + vmovdqu (%r12), %ymm10 + vmovdqu 32(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3063,8 +3065,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r11), %ymm10 - vmovdqu 96(%r11), %ymm11 + vmovdqu 64(%r12), %ymm10 + vmovdqu 96(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3115,8 +3117,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r11), %ymm10 - vmovdqu 160(%r11), %ymm11 + vmovdqu 128(%r12), %ymm10 + vmovdqu 160(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3167,8 +3169,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r11), %ymm10 - vmovdqu 224(%r11), %ymm11 + vmovdqu 192(%r12), %ymm10 + vmovdqu 224(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3219,8 +3221,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r11), %ymm10 - vmovdqu 288(%r11), %ymm11 + vmovdqu 256(%r12), %ymm10 + vmovdqu 288(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3271,8 +3273,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r11), %ymm10 - vmovdqu 352(%r11), %ymm11 + vmovdqu 320(%r12), %ymm10 + vmovdqu 352(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3323,8 +3325,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r11), %ymm10 - vmovdqu 416(%r11), %ymm11 + vmovdqu 384(%r12), %ymm10 + vmovdqu 416(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3375,8 +3377,8 @@ L_pointwise_acc_mont_end_keygen: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r11), %ymm10 - vmovdqu 480(%r11), %ymm11 + vmovdqu 448(%r12), %ymm10 + vmovdqu 480(%r12), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -3416,10 +3418,7 @@ L_pointwise_acc_mont_end_keygen: vmovdqu %ymm0, 448(%r10) vmovdqu %ymm1, 480(%r10) addq $0x200, %rcx - addq $0x200, %rdi - movslq %r8d, %r9 - shl $9, %r9d - subq %r9, %rdi + movq %r11, %rdi addq $0x200, %r10 subq $0x01, %rax jg L_mlkem_keygen_avx2_acc @@ -3532,9 +3531,9 @@ L_mlkem_keygen_avx2_to_mont: movslq %r8d, %rax L_mlkem_keygen_avx2_to_mont_ntt_err: # ntt - leaq L_mlkem_avx2_zetas(%rip), %r11 - vmovdqu (%r11), %ymm10 - vmovdqu 32(%r11), %ymm12 + leaq L_mlkem_avx2_zetas(%rip), %r12 + vmovdqu (%r12), %ymm10 + vmovdqu 32(%r12), %ymm12 vmovdqu 128(%rdx), %ymm0 vmovdqu 160(%rdx), %ymm1 vmovdqu 192(%rdx), %ymm2 @@ -3616,8 +3615,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vmovdqu 192(%rdx), %ymm6 vmovdqu 224(%rdx), %ymm7 # 64: 0/3 - vmovdqu 64(%r11), %ymm10 - vmovdqu 96(%r11), %ymm12 + vmovdqu 64(%r12), %ymm10 + vmovdqu 96(%r12), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -3643,8 +3642,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 0/3 - vmovdqu 128(%r11), %ymm10 - vmovdqu 160(%r11), %ymm12 + vmovdqu 128(%r12), %ymm10 + vmovdqu 160(%r12), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -3658,8 +3657,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 0/3 - vmovdqu 192(%r11), %ymm10 - vmovdqu 224(%r11), %ymm12 + vmovdqu 192(%r12), %ymm10 + vmovdqu 224(%r12), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -3673,10 +3672,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 0/3 - vmovdqu 256(%r11), %ymm10 - vmovdqu 288(%r11), %ymm12 - vmovdqu 320(%r11), %ymm11 - vmovdqu 352(%r11), %ymm13 + vmovdqu 256(%r12), %ymm10 + vmovdqu 288(%r12), %ymm12 + vmovdqu 320(%r12), %ymm11 + vmovdqu 352(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -3690,10 +3689,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 0/3 - vmovdqu 384(%r11), %ymm10 - vmovdqu 416(%r11), %ymm12 - vmovdqu 448(%r11), %ymm11 - vmovdqu 480(%r11), %ymm13 + vmovdqu 384(%r12), %ymm10 + vmovdqu 416(%r12), %ymm12 + vmovdqu 448(%r12), %ymm11 + vmovdqu 480(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -3708,13 +3707,13 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm9, %ymm6, %ymm6 # 8: 0/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 512(%r11), %ymm10 + vmovdqu 512(%r12), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 544(%r11), %ymm12 + vmovdqu 544(%r12), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 576(%r11), %ymm11 + vmovdqu 576(%r12), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 608(%r11), %ymm13 + vmovdqu 608(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -3728,10 +3727,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 640(%r11), %ymm10 - vmovdqu 672(%r11), %ymm12 - vmovdqu 704(%r11), %ymm11 - vmovdqu 736(%r11), %ymm13 + vmovdqu 640(%r12), %ymm10 + vmovdqu 672(%r12), %ymm12 + vmovdqu 704(%r12), %ymm11 + vmovdqu 736(%r12), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -3750,13 +3749,13 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm9, %ymm2, %ymm2 # 8: 0/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 768(%r11), %ymm10 + vmovdqu 768(%r12), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 800(%r11), %ymm12 + vmovdqu 800(%r12), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 832(%r11), %ymm11 + vmovdqu 832(%r12), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 864(%r11), %ymm13 + vmovdqu 864(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -3770,10 +3769,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 896(%r11), %ymm10 - vmovdqu 928(%r11), %ymm12 - vmovdqu 960(%r11), %ymm11 - vmovdqu 992(%r11), %ymm13 + vmovdqu 896(%r12), %ymm10 + vmovdqu 928(%r12), %ymm12 + vmovdqu 960(%r12), %ymm11 + vmovdqu 992(%r12), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -3791,10 +3790,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 0/3 - vmovdqu 1024(%r11), %ymm10 - vmovdqu 1056(%r11), %ymm12 - vmovdqu 1088(%r11), %ymm11 - vmovdqu 1120(%r11), %ymm13 + vmovdqu 1024(%r12), %ymm10 + vmovdqu 1056(%r12), %ymm12 + vmovdqu 1088(%r12), %ymm11 + vmovdqu 1120(%r12), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -3816,10 +3815,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 0/3 - vmovdqu 1152(%r11), %ymm10 - vmovdqu 1184(%r11), %ymm12 - vmovdqu 1216(%r11), %ymm11 - vmovdqu 1248(%r11), %ymm13 + vmovdqu 1152(%r12), %ymm10 + vmovdqu 1184(%r12), %ymm12 + vmovdqu 1216(%r12), %ymm11 + vmovdqu 1248(%r12), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -3856,14 +3855,62 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpunpckhdq %ymm7, %ymm6, %ymm9 vperm2i128 $32, %ymm9, %ymm8, %ymm6 vperm2i128 $49, %ymm9, %ymm8, %ymm7 - vmovdqu %ymm0, (%rdx) - vmovdqu %ymm1, 32(%rdx) - vmovdqu %ymm2, 64(%rdx) - vmovdqu %ymm3, 96(%rdx) - vmovdqu %ymm4, 128(%rdx) - vmovdqu %ymm5, 160(%rdx) - vmovdqu %ymm6, 192(%rdx) - vmovdqu %ymm7, 224(%rdx) + vmovdqu (%rsi), %ymm8 + vmovdqu 32(%rsi), %ymm9 + vpaddw %ymm8, %ymm0, %ymm0 + vpaddw %ymm9, %ymm1, %ymm1 + vpmulhw %ymm15, %ymm0, %ymm8 + vpmulhw %ymm15, %ymm1, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm0, %ymm8 + vpsubw %ymm9, %ymm1, %ymm9 + vmovdqu %ymm8, (%rsi) + vmovdqu %ymm9, 32(%rsi) + vmovdqu 64(%rsi), %ymm8 + vmovdqu 96(%rsi), %ymm9 + vpaddw %ymm8, %ymm2, %ymm2 + vpaddw %ymm9, %ymm3, %ymm3 + vpmulhw %ymm15, %ymm2, %ymm8 + vpmulhw %ymm15, %ymm3, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm2, %ymm8 + vpsubw %ymm9, %ymm3, %ymm9 + vmovdqu %ymm8, 64(%rsi) + vmovdqu %ymm9, 96(%rsi) + vmovdqu 128(%rsi), %ymm8 + vmovdqu 160(%rsi), %ymm9 + vpaddw %ymm8, %ymm4, %ymm4 + vpaddw %ymm9, %ymm5, %ymm5 + vpmulhw %ymm15, %ymm4, %ymm8 + vpmulhw %ymm15, %ymm5, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm4, %ymm8 + vpsubw %ymm9, %ymm5, %ymm9 + vmovdqu %ymm8, 128(%rsi) + vmovdqu %ymm9, 160(%rsi) + vmovdqu 192(%rsi), %ymm8 + vmovdqu 224(%rsi), %ymm9 + vpaddw %ymm8, %ymm6, %ymm6 + vpaddw %ymm9, %ymm7, %ymm7 + vpmulhw %ymm15, %ymm6, %ymm8 + vpmulhw %ymm15, %ymm7, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm8 + vpsubw %ymm9, %ymm7, %ymm9 + vmovdqu %ymm8, 192(%rsi) + vmovdqu %ymm9, 224(%rsi) vmovdqu 256(%rdx), %ymm0 vmovdqu 288(%rdx), %ymm1 vmovdqu 320(%rdx), %ymm2 @@ -3873,8 +3920,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vmovdqu 448(%rdx), %ymm6 vmovdqu 480(%rdx), %ymm7 # 64: 1/3 - vmovdqu 1280(%r11), %ymm10 - vmovdqu 1312(%r11), %ymm12 + vmovdqu 1280(%r12), %ymm10 + vmovdqu 1312(%r12), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -3900,8 +3947,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 1/3 - vmovdqu 1344(%r11), %ymm10 - vmovdqu 1376(%r11), %ymm12 + vmovdqu 1344(%r12), %ymm10 + vmovdqu 1376(%r12), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -3915,8 +3962,8 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 1/3 - vmovdqu 1408(%r11), %ymm10 - vmovdqu 1440(%r11), %ymm12 + vmovdqu 1408(%r12), %ymm10 + vmovdqu 1440(%r12), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -3930,10 +3977,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 1/3 - vmovdqu 1472(%r11), %ymm10 - vmovdqu 1504(%r11), %ymm12 - vmovdqu 1536(%r11), %ymm11 - vmovdqu 1568(%r11), %ymm13 + vmovdqu 1472(%r12), %ymm10 + vmovdqu 1504(%r12), %ymm12 + vmovdqu 1536(%r12), %ymm11 + vmovdqu 1568(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -3947,10 +3994,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 1/3 - vmovdqu 1600(%r11), %ymm10 - vmovdqu 1632(%r11), %ymm12 - vmovdqu 1664(%r11), %ymm11 - vmovdqu 1696(%r11), %ymm13 + vmovdqu 1600(%r12), %ymm10 + vmovdqu 1632(%r12), %ymm12 + vmovdqu 1664(%r12), %ymm11 + vmovdqu 1696(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -3965,13 +4012,13 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm9, %ymm6, %ymm6 # 8: 1/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 1728(%r11), %ymm10 + vmovdqu 1728(%r12), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 1760(%r11), %ymm12 + vmovdqu 1760(%r12), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 1792(%r11), %ymm11 + vmovdqu 1792(%r12), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 1824(%r11), %ymm13 + vmovdqu 1824(%r12), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -3985,10 +4032,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 1856(%r11), %ymm10 - vmovdqu 1888(%r11), %ymm12 - vmovdqu 1920(%r11), %ymm11 - vmovdqu 1952(%r11), %ymm13 + vmovdqu 1856(%r12), %ymm10 + vmovdqu 1888(%r12), %ymm12 + vmovdqu 1920(%r12), %ymm11 + vmovdqu 1952(%r12), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -4007,13 +4054,13 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm9, %ymm2, %ymm2 # 8: 1/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 1984(%r11), %ymm10 + vmovdqu 1984(%r12), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 2016(%r11), %ymm12 + vmovdqu 2016(%r12), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 2048(%r11), %ymm11 + vmovdqu 2048(%r12), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 2080(%r11), %ymm13 + vmovdqu 2080(%r12), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -4027,10 +4074,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 2112(%r11), %ymm10 - vmovdqu 2144(%r11), %ymm12 - vmovdqu 2176(%r11), %ymm11 - vmovdqu 2208(%r11), %ymm13 + vmovdqu 2112(%r12), %ymm10 + vmovdqu 2144(%r12), %ymm12 + vmovdqu 2176(%r12), %ymm11 + vmovdqu 2208(%r12), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -4048,10 +4095,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 1/3 - vmovdqu 2240(%r11), %ymm10 - vmovdqu 2272(%r11), %ymm12 - vmovdqu 2304(%r11), %ymm11 - vmovdqu 2336(%r11), %ymm13 + vmovdqu 2240(%r12), %ymm10 + vmovdqu 2272(%r12), %ymm12 + vmovdqu 2304(%r12), %ymm11 + vmovdqu 2336(%r12), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -4073,10 +4120,10 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 1/3 - vmovdqu 2368(%r11), %ymm10 - vmovdqu 2400(%r11), %ymm12 - vmovdqu 2432(%r11), %ymm11 - vmovdqu 2464(%r11), %ymm13 + vmovdqu 2368(%r12), %ymm10 + vmovdqu 2400(%r12), %ymm12 + vmovdqu 2432(%r12), %ymm11 + vmovdqu 2464(%r12), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -4113,148 +4160,68 @@ L_mlkem_keygen_avx2_to_mont_ntt_err: vpunpckhdq %ymm7, %ymm6, %ymm9 vperm2i128 $32, %ymm9, %ymm8, %ymm6 vperm2i128 $49, %ymm9, %ymm8, %ymm7 - vmovdqu %ymm0, 256(%rdx) - vmovdqu %ymm1, 288(%rdx) - vmovdqu %ymm2, 320(%rdx) - vmovdqu %ymm3, 352(%rdx) - vmovdqu %ymm4, 384(%rdx) - vmovdqu %ymm5, 416(%rdx) - vmovdqu %ymm6, 448(%rdx) - vmovdqu %ymm7, 480(%rdx) - # Add Errors - vmovdqu (%rsi), %ymm0 - vmovdqu 32(%rsi), %ymm1 - vmovdqu 64(%rsi), %ymm2 - vmovdqu 96(%rsi), %ymm3 - vmovdqu (%rdx), %ymm4 - vmovdqu 32(%rdx), %ymm5 - vmovdqu 64(%rdx), %ymm6 - vmovdqu 96(%rdx), %ymm7 - vpaddw %ymm4, %ymm0, %ymm4 - vpaddw %ymm5, %ymm1, %ymm5 - vpmulhw %ymm15, %ymm4, %ymm0 - vpmulhw %ymm15, %ymm5, %ymm1 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm1, %ymm1 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm1, %ymm1 - vpsubw %ymm0, %ymm4, %ymm0 - vpsubw %ymm1, %ymm5, %ymm1 - vpaddw %ymm6, %ymm2, %ymm6 - vpaddw %ymm7, %ymm3, %ymm7 - vpmulhw %ymm15, %ymm6, %ymm2 - vpmulhw %ymm15, %ymm7, %ymm3 - vpsraw $10, %ymm2, %ymm2 - vpsraw $10, %ymm3, %ymm3 - vpmullw %ymm14, %ymm2, %ymm2 - vpmullw %ymm14, %ymm3, %ymm3 - vpsubw %ymm2, %ymm6, %ymm2 - vpsubw %ymm3, %ymm7, %ymm3 - vmovdqu %ymm0, (%rsi) - vmovdqu %ymm1, 32(%rsi) - vmovdqu %ymm2, 64(%rsi) - vmovdqu %ymm3, 96(%rsi) - vmovdqu 128(%rsi), %ymm0 - vmovdqu 160(%rsi), %ymm1 - vmovdqu 192(%rsi), %ymm2 - vmovdqu 224(%rsi), %ymm3 - vmovdqu 128(%rdx), %ymm4 - vmovdqu 160(%rdx), %ymm5 - vmovdqu 192(%rdx), %ymm6 - vmovdqu 224(%rdx), %ymm7 - vpaddw %ymm4, %ymm0, %ymm4 - vpaddw %ymm5, %ymm1, %ymm5 - vpmulhw %ymm15, %ymm4, %ymm0 - vpmulhw %ymm15, %ymm5, %ymm1 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm1, %ymm1 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm1, %ymm1 - vpsubw %ymm0, %ymm4, %ymm0 - vpsubw %ymm1, %ymm5, %ymm1 - vpaddw %ymm6, %ymm2, %ymm6 - vpaddw %ymm7, %ymm3, %ymm7 - vpmulhw %ymm15, %ymm6, %ymm2 - vpmulhw %ymm15, %ymm7, %ymm3 - vpsraw $10, %ymm2, %ymm2 - vpsraw $10, %ymm3, %ymm3 - vpmullw %ymm14, %ymm2, %ymm2 - vpmullw %ymm14, %ymm3, %ymm3 - vpsubw %ymm2, %ymm6, %ymm2 - vpsubw %ymm3, %ymm7, %ymm3 - vmovdqu %ymm0, 128(%rsi) - vmovdqu %ymm1, 160(%rsi) - vmovdqu %ymm2, 192(%rsi) - vmovdqu %ymm3, 224(%rsi) - vmovdqu 256(%rsi), %ymm0 - vmovdqu 288(%rsi), %ymm1 - vmovdqu 320(%rsi), %ymm2 - vmovdqu 352(%rsi), %ymm3 - vmovdqu 256(%rdx), %ymm4 - vmovdqu 288(%rdx), %ymm5 - vmovdqu 320(%rdx), %ymm6 - vmovdqu 352(%rdx), %ymm7 - vpaddw %ymm4, %ymm0, %ymm4 - vpaddw %ymm5, %ymm1, %ymm5 - vpmulhw %ymm15, %ymm4, %ymm0 - vpmulhw %ymm15, %ymm5, %ymm1 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm1, %ymm1 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm1, %ymm1 - vpsubw %ymm0, %ymm4, %ymm0 - vpsubw %ymm1, %ymm5, %ymm1 - vpaddw %ymm6, %ymm2, %ymm6 - vpaddw %ymm7, %ymm3, %ymm7 - vpmulhw %ymm15, %ymm6, %ymm2 - vpmulhw %ymm15, %ymm7, %ymm3 - vpsraw $10, %ymm2, %ymm2 - vpsraw $10, %ymm3, %ymm3 - vpmullw %ymm14, %ymm2, %ymm2 - vpmullw %ymm14, %ymm3, %ymm3 - vpsubw %ymm2, %ymm6, %ymm2 - vpsubw %ymm3, %ymm7, %ymm3 - vmovdqu %ymm0, 256(%rsi) - vmovdqu %ymm1, 288(%rsi) - vmovdqu %ymm2, 320(%rsi) - vmovdqu %ymm3, 352(%rsi) - vmovdqu 384(%rsi), %ymm0 - vmovdqu 416(%rsi), %ymm1 - vmovdqu 448(%rsi), %ymm2 - vmovdqu 480(%rsi), %ymm3 - vmovdqu 384(%rdx), %ymm4 - vmovdqu 416(%rdx), %ymm5 - vmovdqu 448(%rdx), %ymm6 - vmovdqu 480(%rdx), %ymm7 - vpaddw %ymm4, %ymm0, %ymm4 - vpaddw %ymm5, %ymm1, %ymm5 - vpmulhw %ymm15, %ymm4, %ymm0 - vpmulhw %ymm15, %ymm5, %ymm1 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm1, %ymm1 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm1, %ymm1 - vpsubw %ymm0, %ymm4, %ymm0 - vpsubw %ymm1, %ymm5, %ymm1 - vpaddw %ymm6, %ymm2, %ymm6 - vpaddw %ymm7, %ymm3, %ymm7 - vpmulhw %ymm15, %ymm6, %ymm2 - vpmulhw %ymm15, %ymm7, %ymm3 - vpsraw $10, %ymm2, %ymm2 - vpsraw $10, %ymm3, %ymm3 - vpmullw %ymm14, %ymm2, %ymm2 - vpmullw %ymm14, %ymm3, %ymm3 - vpsubw %ymm2, %ymm6, %ymm2 - vpsubw %ymm3, %ymm7, %ymm3 - vmovdqu %ymm0, 384(%rsi) - vmovdqu %ymm1, 416(%rsi) - vmovdqu %ymm2, 448(%rsi) - vmovdqu %ymm3, 480(%rsi) + vmovdqu 256(%rsi), %ymm8 + vmovdqu 288(%rsi), %ymm9 + vpaddw %ymm8, %ymm0, %ymm0 + vpaddw %ymm9, %ymm1, %ymm1 + vpmulhw %ymm15, %ymm0, %ymm8 + vpmulhw %ymm15, %ymm1, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm0, %ymm8 + vpsubw %ymm9, %ymm1, %ymm9 + vmovdqu %ymm8, 256(%rsi) + vmovdqu %ymm9, 288(%rsi) + vmovdqu 320(%rsi), %ymm8 + vmovdqu 352(%rsi), %ymm9 + vpaddw %ymm8, %ymm2, %ymm2 + vpaddw %ymm9, %ymm3, %ymm3 + vpmulhw %ymm15, %ymm2, %ymm8 + vpmulhw %ymm15, %ymm3, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm2, %ymm8 + vpsubw %ymm9, %ymm3, %ymm9 + vmovdqu %ymm8, 320(%rsi) + vmovdqu %ymm9, 352(%rsi) + vmovdqu 384(%rsi), %ymm8 + vmovdqu 416(%rsi), %ymm9 + vpaddw %ymm8, %ymm4, %ymm4 + vpaddw %ymm9, %ymm5, %ymm5 + vpmulhw %ymm15, %ymm4, %ymm8 + vpmulhw %ymm15, %ymm5, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm4, %ymm8 + vpsubw %ymm9, %ymm5, %ymm9 + vmovdqu %ymm8, 384(%rsi) + vmovdqu %ymm9, 416(%rsi) + vmovdqu 448(%rsi), %ymm8 + vmovdqu 480(%rsi), %ymm9 + vpaddw %ymm8, %ymm6, %ymm6 + vpaddw %ymm9, %ymm7, %ymm7 + vpmulhw %ymm15, %ymm6, %ymm8 + vpmulhw %ymm15, %ymm7, %ymm9 + vpsraw $10, %ymm8, %ymm8 + vpsraw $10, %ymm9, %ymm9 + vpmullw %ymm14, %ymm8, %ymm8 + vpmullw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm8 + vpsubw %ymm9, %ymm7, %ymm9 + vmovdqu %ymm8, 448(%rsi) + vmovdqu %ymm9, 480(%rsi) addq $0x200, %rdx addq $0x200, %rsi subq $0x01, %rax jg L_mlkem_keygen_avx2_to_mont_ntt_err vzeroupper + popq %r12 repz retq #ifndef __APPLE__ .size mlkem_keygen_avx2,.-mlkem_keygen_avx2 @@ -4275,19 +4242,21 @@ _mlkem_encapsulate_avx2: pushq %r13 pushq %r14 pushq %r15 - movq 40(%rsp), %rax - movq 48(%rsp), %r10 - movq 56(%rsp), %r11 + pushq %rbx + movq 48(%rsp), %rax + movq 56(%rsp), %r10 + movq 64(%rsp), %r11 subq $48, %rsp vmovdqu mlkem_q(%rip), %ymm14 vmovdqu mlkem_v(%rip), %ymm15 + movq %r8, %r15 movslq %r11d, %r13 movq %r8, %r14 L_mlkem_encapsulate_avx2_trans: # ntt - leaq L_mlkem_avx2_zetas(%rip), %r15 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm12 + leaq L_mlkem_avx2_zetas(%rip), %rbx + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm12 vmovdqu 128(%r14), %ymm0 vmovdqu 160(%r14), %ymm1 vmovdqu 192(%r14), %ymm2 @@ -4369,8 +4338,8 @@ L_mlkem_encapsulate_avx2_trans: vmovdqu 192(%r14), %ymm6 vmovdqu 224(%r14), %ymm7 # 64: 0/3 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm12 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -4396,8 +4365,8 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 0/3 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm12 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -4411,8 +4380,8 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 0/3 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm12 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -4426,10 +4395,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 0/3 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm12 - vmovdqu 320(%r15), %ymm11 - vmovdqu 352(%r15), %ymm13 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm12 + vmovdqu 320(%rbx), %ymm11 + vmovdqu 352(%rbx), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -4443,10 +4412,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 0/3 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm12 - vmovdqu 448(%r15), %ymm11 - vmovdqu 480(%r15), %ymm13 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm12 + vmovdqu 448(%rbx), %ymm11 + vmovdqu 480(%rbx), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -4461,13 +4430,13 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm9, %ymm6, %ymm6 # 8: 0/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 512(%r15), %ymm10 + vmovdqu 512(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 544(%r15), %ymm12 + vmovdqu 544(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 576(%r15), %ymm11 + vmovdqu 576(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 608(%r15), %ymm13 + vmovdqu 608(%rbx), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -4481,10 +4450,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 640(%r15), %ymm10 - vmovdqu 672(%r15), %ymm12 - vmovdqu 704(%r15), %ymm11 - vmovdqu 736(%r15), %ymm13 + vmovdqu 640(%rbx), %ymm10 + vmovdqu 672(%rbx), %ymm12 + vmovdqu 704(%rbx), %ymm11 + vmovdqu 736(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -4503,13 +4472,13 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm9, %ymm2, %ymm2 # 8: 0/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 768(%r15), %ymm10 + vmovdqu 768(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 800(%r15), %ymm12 + vmovdqu 800(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 832(%r15), %ymm11 + vmovdqu 832(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 864(%r15), %ymm13 + vmovdqu 864(%rbx), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -4523,10 +4492,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 0/3 - vmovdqu 896(%r15), %ymm10 - vmovdqu 928(%r15), %ymm12 - vmovdqu 960(%r15), %ymm11 - vmovdqu 992(%r15), %ymm13 + vmovdqu 896(%rbx), %ymm10 + vmovdqu 928(%rbx), %ymm12 + vmovdqu 960(%rbx), %ymm11 + vmovdqu 992(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -4544,10 +4513,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 0/3 - vmovdqu 1024(%r15), %ymm10 - vmovdqu 1056(%r15), %ymm12 - vmovdqu 1088(%r15), %ymm11 - vmovdqu 1120(%r15), %ymm13 + vmovdqu 1024(%rbx), %ymm10 + vmovdqu 1056(%rbx), %ymm12 + vmovdqu 1088(%rbx), %ymm11 + vmovdqu 1120(%rbx), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -4569,10 +4538,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 0/3 - vmovdqu 1152(%r15), %ymm10 - vmovdqu 1184(%r15), %ymm12 - vmovdqu 1216(%r15), %ymm11 - vmovdqu 1248(%r15), %ymm13 + vmovdqu 1152(%rbx), %ymm10 + vmovdqu 1184(%rbx), %ymm12 + vmovdqu 1216(%rbx), %ymm11 + vmovdqu 1248(%rbx), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -4626,8 +4595,8 @@ L_mlkem_encapsulate_avx2_trans: vmovdqu 448(%r14), %ymm6 vmovdqu 480(%r14), %ymm7 # 64: 1/3 - vmovdqu 1280(%r15), %ymm10 - vmovdqu 1312(%r15), %ymm12 + vmovdqu 1280(%rbx), %ymm10 + vmovdqu 1312(%rbx), %ymm12 vpmullw %ymm12, %ymm4, %ymm8 vpmullw %ymm12, %ymm5, %ymm9 vpmulhw %ymm10, %ymm4, %ymm4 @@ -4653,8 +4622,8 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm2, %ymm2 vpaddw %ymm9, %ymm3, %ymm3 # 32: 1/3 - vmovdqu 1344(%r15), %ymm10 - vmovdqu 1376(%r15), %ymm12 + vmovdqu 1344(%rbx), %ymm10 + vmovdqu 1376(%rbx), %ymm12 vpmullw %ymm12, %ymm2, %ymm8 vpmullw %ymm12, %ymm3, %ymm9 vpmulhw %ymm10, %ymm2, %ymm2 @@ -4668,8 +4637,8 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm1, %ymm1 # 32: 1/3 - vmovdqu 1408(%r15), %ymm10 - vmovdqu 1440(%r15), %ymm12 + vmovdqu 1408(%rbx), %ymm10 + vmovdqu 1440(%rbx), %ymm12 vpmullw %ymm12, %ymm6, %ymm8 vpmullw %ymm12, %ymm7, %ymm9 vpmulhw %ymm10, %ymm6, %ymm6 @@ -4683,10 +4652,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm5, %ymm5 # 16: 1/3 - vmovdqu 1472(%r15), %ymm10 - vmovdqu 1504(%r15), %ymm12 - vmovdqu 1536(%r15), %ymm11 - vmovdqu 1568(%r15), %ymm13 + vmovdqu 1472(%rbx), %ymm10 + vmovdqu 1504(%rbx), %ymm12 + vmovdqu 1536(%rbx), %ymm11 + vmovdqu 1568(%rbx), %ymm13 vpmullw %ymm12, %ymm1, %ymm8 vpmullw %ymm13, %ymm3, %ymm9 vpmulhw %ymm10, %ymm1, %ymm1 @@ -4700,10 +4669,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 16: 1/3 - vmovdqu 1600(%r15), %ymm10 - vmovdqu 1632(%r15), %ymm12 - vmovdqu 1664(%r15), %ymm11 - vmovdqu 1696(%r15), %ymm13 + vmovdqu 1600(%rbx), %ymm10 + vmovdqu 1632(%rbx), %ymm12 + vmovdqu 1664(%rbx), %ymm11 + vmovdqu 1696(%rbx), %ymm13 vpmullw %ymm12, %ymm5, %ymm8 vpmullw %ymm13, %ymm7, %ymm9 vpmulhw %ymm10, %ymm5, %ymm5 @@ -4718,13 +4687,13 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm9, %ymm6, %ymm6 # 8: 1/3 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 1728(%r15), %ymm10 + vmovdqu 1728(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm1 - vmovdqu 1760(%r15), %ymm12 + vmovdqu 1760(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm2, %ymm9 - vmovdqu 1792(%r15), %ymm11 + vmovdqu 1792(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm3 - vmovdqu 1824(%r15), %ymm13 + vmovdqu 1824(%rbx), %ymm13 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -4738,10 +4707,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm0, %ymm8, %ymm8 vpaddw %ymm2, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 1856(%r15), %ymm10 - vmovdqu 1888(%r15), %ymm12 - vmovdqu 1920(%r15), %ymm11 - vmovdqu 1952(%r15), %ymm13 + vmovdqu 1856(%rbx), %ymm10 + vmovdqu 1888(%rbx), %ymm12 + vmovdqu 1920(%rbx), %ymm11 + vmovdqu 1952(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -4760,13 +4729,13 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm9, %ymm2, %ymm2 # 8: 1/3 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 1984(%r15), %ymm10 + vmovdqu 1984(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm5 - vmovdqu 2016(%r15), %ymm12 + vmovdqu 2016(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm6, %ymm9 - vmovdqu 2048(%r15), %ymm11 + vmovdqu 2048(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm7 - vmovdqu 2080(%r15), %ymm13 + vmovdqu 2080(%rbx), %ymm13 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -4780,10 +4749,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm4, %ymm8, %ymm8 vpaddw %ymm6, %ymm9, %ymm9 # 4: 1/3 - vmovdqu 2112(%r15), %ymm10 - vmovdqu 2144(%r15), %ymm12 - vmovdqu 2176(%r15), %ymm11 - vmovdqu 2208(%r15), %ymm13 + vmovdqu 2112(%rbx), %ymm10 + vmovdqu 2144(%rbx), %ymm12 + vmovdqu 2176(%rbx), %ymm11 + vmovdqu 2208(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -4801,10 +4770,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm4, %ymm4 vpaddw %ymm9, %ymm6, %ymm6 # 2: 1/3 - vmovdqu 2240(%r15), %ymm10 - vmovdqu 2272(%r15), %ymm12 - vmovdqu 2304(%r15), %ymm11 - vmovdqu 2336(%r15), %ymm13 + vmovdqu 2240(%rbx), %ymm10 + vmovdqu 2272(%rbx), %ymm12 + vmovdqu 2304(%rbx), %ymm11 + vmovdqu 2336(%rbx), %ymm13 vpsllq $32, %ymm1, %ymm8 vpsrlq $32, %ymm0, %ymm9 vpblendd $0xaa, %ymm8, %ymm0, %ymm0 @@ -4826,10 +4795,10 @@ L_mlkem_encapsulate_avx2_trans: vpaddw %ymm8, %ymm0, %ymm0 vpaddw %ymm9, %ymm2, %ymm2 # 2: 1/3 - vmovdqu 2368(%r15), %ymm10 - vmovdqu 2400(%r15), %ymm12 - vmovdqu 2432(%r15), %ymm11 - vmovdqu 2464(%r15), %ymm13 + vmovdqu 2368(%rbx), %ymm10 + vmovdqu 2400(%rbx), %ymm12 + vmovdqu 2432(%rbx), %ymm11 + vmovdqu 2464(%rbx), %ymm13 vpsllq $32, %ymm5, %ymm8 vpsrlq $32, %ymm4, %ymm9 vpblendd $0xaa, %ymm8, %ymm4, %ymm4 @@ -4883,7 +4852,7 @@ L_mlkem_encapsulate_avx2_calc: # Pointwise acc mont movslq %r11d, %r13 # Base mul mont - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -4896,8 +4865,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -4940,8 +4909,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -4984,8 +4953,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5028,8 +4997,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5072,8 +5041,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5116,8 +5085,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5160,8 +5129,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5204,8 +5173,8 @@ L_mlkem_encapsulate_avx2_calc: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5242,7 +5211,7 @@ L_mlkem_encapsulate_avx2_calc: jz L_pointwise_acc_mont_end_encap_bp L_pointwise_acc_mont_start_encap_bp: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -5255,8 +5224,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5303,8 +5272,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5351,8 +5320,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5399,8 +5368,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5447,8 +5416,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5495,8 +5464,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5543,8 +5512,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5591,8 +5560,8 @@ L_pointwise_acc_mont_start_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5633,7 +5602,7 @@ L_pointwise_acc_mont_start_encap_bp: jg L_pointwise_acc_mont_start_encap_bp L_pointwise_acc_mont_end_encap_bp: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rcx), %ymm2 vmovdqu 32(%rcx), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -5646,8 +5615,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5698,8 +5667,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5750,8 +5719,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5802,8 +5771,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5854,8 +5823,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5906,8 +5875,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -5958,8 +5927,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -6010,8 +5979,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -6051,12 +6020,9 @@ L_pointwise_acc_mont_end_encap_bp: vmovdqu %ymm0, 448(%rsi) vmovdqu %ymm1, 480(%rsi) addq $0x200, %rcx - addq $0x200, %r8 - movslq %r11d, %r13 - shl $9, %r13d - subq %r13, %r8 + movq %r15, %r8 # invntt - leaq L_mlkem_avx2_zetas_inv(%rip), %r15 + leaq L_mlkem_avx2_zetas_inv(%rip), %rbx vmovdqu (%rsi), %ymm0 vmovdqu 32(%rsi), %ymm1 vmovdqu 64(%rsi), %ymm2 @@ -6067,17 +6033,17 @@ L_pointwise_acc_mont_end_encap_bp: vmovdqu 224(%rsi), %ymm7 # 2: 1/2 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu (%r15), %ymm10 + vmovdqu (%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm9 - vmovdqu 32(%r15), %ymm12 + vmovdqu 32(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm0 vpsrlq $32, %ymm8, %ymm1 vpblendd $0xaa, %ymm0, %ymm8, %ymm0 vpblendd $0x55, %ymm1, %ymm9, %ymm1 vperm2i128 $32, %ymm3, %ymm2, %ymm8 - vmovdqu 64(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm9 - vmovdqu 96(%r15), %ymm13 + vmovdqu 96(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm2 vpsrlq $32, %ymm8, %ymm3 vpblendd $0xaa, %ymm2, %ymm8, %ymm2 @@ -6103,10 +6069,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 4: 1/2 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm12 - vmovdqu 192(%r15), %ymm11 - vmovdqu 224(%r15), %ymm13 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm12 + vmovdqu 192(%rbx), %ymm11 + vmovdqu 224(%rbx), %ymm13 vpunpckldq %ymm1, %ymm8, %ymm0 vpunpckhdq %ymm1, %ymm8, %ymm1 vpunpckldq %ymm3, %ymm9, %ymm2 @@ -6124,10 +6090,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 8: 1/2 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm12 - vmovdqu 320(%r15), %ymm11 - vmovdqu 352(%r15), %ymm13 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm12 + vmovdqu 320(%rbx), %ymm11 + vmovdqu 352(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -6154,13 +6120,13 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm2, %ymm3, %ymm3 # 16: 1/2 vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 384(%r15), %ymm10 + vmovdqu 384(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 416(%r15), %ymm12 + vmovdqu 416(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 448(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 480(%r15), %ymm13 + vmovdqu 480(%rbx), %ymm13 vpsubw %ymm1, %ymm0, %ymm8 vpsubw %ymm3, %ymm2, %ymm9 vpaddw %ymm1, %ymm0, %ymm0 @@ -6174,8 +6140,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm1, %ymm8, %ymm1 vpsubw %ymm3, %ymm9, %ymm3 # 32: 1/2 - vmovdqu 512(%r15), %ymm10 - vmovdqu 544(%r15), %ymm12 + vmovdqu 512(%rbx), %ymm10 + vmovdqu 544(%rbx), %ymm12 vpaddw %ymm2, %ymm0, %ymm8 vpaddw %ymm3, %ymm1, %ymm9 vpsubw %ymm2, %ymm0, %ymm2 @@ -6198,17 +6164,17 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm9, %ymm3, %ymm3 # 2: 1/2 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 576(%r15), %ymm10 + vmovdqu 576(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm9 - vmovdqu 608(%r15), %ymm12 + vmovdqu 608(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm4 vpsrlq $32, %ymm8, %ymm5 vpblendd $0xaa, %ymm4, %ymm8, %ymm4 vpblendd $0x55, %ymm5, %ymm9, %ymm5 vperm2i128 $32, %ymm7, %ymm6, %ymm8 - vmovdqu 640(%r15), %ymm11 + vmovdqu 640(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm9 - vmovdqu 672(%r15), %ymm13 + vmovdqu 672(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm6 vpsrlq $32, %ymm8, %ymm7 vpblendd $0xaa, %ymm6, %ymm8, %ymm6 @@ -6234,10 +6200,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 4: 1/2 - vmovdqu 704(%r15), %ymm10 - vmovdqu 736(%r15), %ymm12 - vmovdqu 768(%r15), %ymm11 - vmovdqu 800(%r15), %ymm13 + vmovdqu 704(%rbx), %ymm10 + vmovdqu 736(%rbx), %ymm12 + vmovdqu 768(%rbx), %ymm11 + vmovdqu 800(%rbx), %ymm13 vpunpckldq %ymm5, %ymm8, %ymm4 vpunpckhdq %ymm5, %ymm8, %ymm5 vpunpckldq %ymm7, %ymm9, %ymm6 @@ -6255,10 +6221,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 8: 1/2 - vmovdqu 832(%r15), %ymm10 - vmovdqu 864(%r15), %ymm12 - vmovdqu 896(%r15), %ymm11 - vmovdqu 928(%r15), %ymm13 + vmovdqu 832(%rbx), %ymm10 + vmovdqu 864(%rbx), %ymm12 + vmovdqu 896(%rbx), %ymm11 + vmovdqu 928(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -6285,13 +6251,13 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm6, %ymm7, %ymm7 # 16: 1/2 vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 960(%r15), %ymm10 + vmovdqu 960(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 992(%r15), %ymm12 + vmovdqu 992(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 1024(%r15), %ymm11 + vmovdqu 1024(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 1056(%r15), %ymm13 + vmovdqu 1056(%rbx), %ymm13 vpsubw %ymm5, %ymm4, %ymm8 vpsubw %ymm7, %ymm6, %ymm9 vpaddw %ymm5, %ymm4, %ymm4 @@ -6305,8 +6271,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm5, %ymm8, %ymm5 vpsubw %ymm7, %ymm9, %ymm7 # 32: 1/2 - vmovdqu 1088(%r15), %ymm10 - vmovdqu 1120(%r15), %ymm12 + vmovdqu 1088(%rbx), %ymm10 + vmovdqu 1120(%rbx), %ymm12 vpaddw %ymm6, %ymm4, %ymm8 vpaddw %ymm7, %ymm5, %ymm9 vpsubw %ymm6, %ymm4, %ymm6 @@ -6328,8 +6294,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm8, %ymm6, %ymm6 vpsubw %ymm9, %ymm7, %ymm7 # 64: 1/2 - vmovdqu 1152(%r15), %ymm10 - vmovdqu 1184(%r15), %ymm12 + vmovdqu 1152(%rbx), %ymm10 + vmovdqu 1184(%rbx), %ymm12 vpsubw %ymm4, %ymm0, %ymm8 vpsubw %ymm5, %ymm1, %ymm9 vpaddw %ymm4, %ymm0, %ymm0 @@ -6372,17 +6338,17 @@ L_pointwise_acc_mont_end_encap_bp: vmovdqu 480(%rsi), %ymm7 # 2: 2/2 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 1216(%r15), %ymm10 + vmovdqu 1216(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm9 - vmovdqu 1248(%r15), %ymm12 + vmovdqu 1248(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm0 vpsrlq $32, %ymm8, %ymm1 vpblendd $0xaa, %ymm0, %ymm8, %ymm0 vpblendd $0x55, %ymm1, %ymm9, %ymm1 vperm2i128 $32, %ymm3, %ymm2, %ymm8 - vmovdqu 1280(%r15), %ymm11 + vmovdqu 1280(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm9 - vmovdqu 1312(%r15), %ymm13 + vmovdqu 1312(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm2 vpsrlq $32, %ymm8, %ymm3 vpblendd $0xaa, %ymm2, %ymm8, %ymm2 @@ -6408,10 +6374,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 4: 2/2 - vmovdqu 1344(%r15), %ymm10 - vmovdqu 1376(%r15), %ymm12 - vmovdqu 1408(%r15), %ymm11 - vmovdqu 1440(%r15), %ymm13 + vmovdqu 1344(%rbx), %ymm10 + vmovdqu 1376(%rbx), %ymm12 + vmovdqu 1408(%rbx), %ymm11 + vmovdqu 1440(%rbx), %ymm13 vpunpckldq %ymm1, %ymm8, %ymm0 vpunpckhdq %ymm1, %ymm8, %ymm1 vpunpckldq %ymm3, %ymm9, %ymm2 @@ -6429,10 +6395,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 8: 2/2 - vmovdqu 1472(%r15), %ymm10 - vmovdqu 1504(%r15), %ymm12 - vmovdqu 1536(%r15), %ymm11 - vmovdqu 1568(%r15), %ymm13 + vmovdqu 1472(%rbx), %ymm10 + vmovdqu 1504(%rbx), %ymm12 + vmovdqu 1536(%rbx), %ymm11 + vmovdqu 1568(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -6459,13 +6425,13 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm2, %ymm3, %ymm3 # 16: 2/2 vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 1600(%r15), %ymm10 + vmovdqu 1600(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 1632(%r15), %ymm12 + vmovdqu 1632(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 1664(%r15), %ymm11 + vmovdqu 1664(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 1696(%r15), %ymm13 + vmovdqu 1696(%rbx), %ymm13 vpsubw %ymm1, %ymm0, %ymm8 vpsubw %ymm3, %ymm2, %ymm9 vpaddw %ymm1, %ymm0, %ymm0 @@ -6479,8 +6445,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm1, %ymm8, %ymm1 vpsubw %ymm3, %ymm9, %ymm3 # 32: 2/2 - vmovdqu 1728(%r15), %ymm10 - vmovdqu 1760(%r15), %ymm12 + vmovdqu 1728(%rbx), %ymm10 + vmovdqu 1760(%rbx), %ymm12 vpaddw %ymm2, %ymm0, %ymm8 vpaddw %ymm3, %ymm1, %ymm9 vpsubw %ymm2, %ymm0, %ymm2 @@ -6503,17 +6469,17 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm9, %ymm3, %ymm3 # 2: 2/2 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 1792(%r15), %ymm10 + vmovdqu 1792(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm9 - vmovdqu 1824(%r15), %ymm12 + vmovdqu 1824(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm4 vpsrlq $32, %ymm8, %ymm5 vpblendd $0xaa, %ymm4, %ymm8, %ymm4 vpblendd $0x55, %ymm5, %ymm9, %ymm5 vperm2i128 $32, %ymm7, %ymm6, %ymm8 - vmovdqu 1856(%r15), %ymm11 + vmovdqu 1856(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm9 - vmovdqu 1888(%r15), %ymm13 + vmovdqu 1888(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm6 vpsrlq $32, %ymm8, %ymm7 vpblendd $0xaa, %ymm6, %ymm8, %ymm6 @@ -6539,10 +6505,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 4: 2/2 - vmovdqu 1920(%r15), %ymm10 - vmovdqu 1952(%r15), %ymm12 - vmovdqu 1984(%r15), %ymm11 - vmovdqu 2016(%r15), %ymm13 + vmovdqu 1920(%rbx), %ymm10 + vmovdqu 1952(%rbx), %ymm12 + vmovdqu 1984(%rbx), %ymm11 + vmovdqu 2016(%rbx), %ymm13 vpunpckldq %ymm5, %ymm8, %ymm4 vpunpckhdq %ymm5, %ymm8, %ymm5 vpunpckldq %ymm7, %ymm9, %ymm6 @@ -6560,10 +6526,10 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 8: 2/2 - vmovdqu 2048(%r15), %ymm10 - vmovdqu 2080(%r15), %ymm12 - vmovdqu 2112(%r15), %ymm11 - vmovdqu 2144(%r15), %ymm13 + vmovdqu 2048(%rbx), %ymm10 + vmovdqu 2080(%rbx), %ymm12 + vmovdqu 2112(%rbx), %ymm11 + vmovdqu 2144(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -6590,13 +6556,13 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm6, %ymm7, %ymm7 # 16: 2/2 vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 2176(%r15), %ymm10 + vmovdqu 2176(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 2208(%r15), %ymm12 + vmovdqu 2208(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 2240(%r15), %ymm11 + vmovdqu 2240(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 2272(%r15), %ymm13 + vmovdqu 2272(%rbx), %ymm13 vpsubw %ymm5, %ymm4, %ymm8 vpsubw %ymm7, %ymm6, %ymm9 vpaddw %ymm5, %ymm4, %ymm4 @@ -6610,8 +6576,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm5, %ymm8, %ymm5 vpsubw %ymm7, %ymm9, %ymm7 # 32: 2/2 - vmovdqu 2304(%r15), %ymm10 - vmovdqu 2336(%r15), %ymm12 + vmovdqu 2304(%rbx), %ymm10 + vmovdqu 2336(%rbx), %ymm12 vpaddw %ymm6, %ymm4, %ymm8 vpaddw %ymm7, %ymm5, %ymm9 vpsubw %ymm6, %ymm4, %ymm6 @@ -6633,8 +6599,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsubw %ymm8, %ymm6, %ymm6 vpsubw %ymm9, %ymm7, %ymm7 # 64: 2/2 - vmovdqu 2368(%r15), %ymm10 - vmovdqu 2400(%r15), %ymm12 + vmovdqu 2368(%rbx), %ymm10 + vmovdqu 2400(%rbx), %ymm12 vpsubw %ymm4, %ymm0, %ymm8 vpsubw %ymm5, %ymm1, %ymm9 vpaddw %ymm4, %ymm0, %ymm0 @@ -6664,10 +6630,10 @@ L_pointwise_acc_mont_end_encap_bp: vmovdqu %ymm2, 320(%rsi) vmovdqu %ymm3, 352(%rsi) # 128 - vmovdqu 2432(%r15), %ymm10 - vmovdqu 2464(%r15), %ymm12 - vmovdqu 2496(%r15), %ymm11 - vmovdqu 2528(%r15), %ymm13 + vmovdqu 2432(%rbx), %ymm10 + vmovdqu 2464(%rbx), %ymm12 + vmovdqu 2496(%rbx), %ymm11 + vmovdqu 2528(%rbx), %ymm13 vmovdqu 128(%rsi), %ymm0 vmovdqu 160(%rsi), %ymm1 vmovdqu 192(%rsi), %ymm2 @@ -6961,7 +6927,7 @@ L_pointwise_acc_mont_end_encap_bp: # Pointwise acc mont movslq %r11d, %r13 # Base mul mont - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rdi), %ymm2 vmovdqu 32(%rdi), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -6974,8 +6940,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7018,8 +6984,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7062,8 +7028,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7106,8 +7072,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7150,8 +7116,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7194,8 +7160,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7238,8 +7204,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7282,8 +7248,8 @@ L_pointwise_acc_mont_end_encap_bp: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7320,7 +7286,7 @@ L_pointwise_acc_mont_end_encap_bp: jz L_pointwise_acc_mont_end_encap_v L_pointwise_acc_mont_start_encap_v: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rdi), %ymm2 vmovdqu 32(%rdi), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -7333,8 +7299,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7381,8 +7347,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7429,8 +7395,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7477,8 +7443,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7525,8 +7491,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7573,8 +7539,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7621,8 +7587,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7669,8 +7635,8 @@ L_pointwise_acc_mont_start_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7711,7 +7677,7 @@ L_pointwise_acc_mont_start_encap_v: jg L_pointwise_acc_mont_start_encap_v L_pointwise_acc_mont_end_encap_v: # Base mul mont add - leaq L_mlkem_avx2_zetas_basemul(%rip), %r15 + leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx vmovdqu (%rdi), %ymm2 vmovdqu 32(%rdi), %ymm3 vpslld $16, %ymm3, %ymm6 @@ -7724,8 +7690,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu (%r15), %ymm10 - vmovdqu 32(%r15), %ymm11 + vmovdqu (%rbx), %ymm10 + vmovdqu 32(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7776,8 +7742,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 64(%r15), %ymm10 - vmovdqu 96(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm10 + vmovdqu 96(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7828,8 +7794,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm11 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7880,8 +7846,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 192(%r15), %ymm10 - vmovdqu 224(%r15), %ymm11 + vmovdqu 192(%rbx), %ymm10 + vmovdqu 224(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7932,8 +7898,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm11 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -7984,8 +7950,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 320(%r15), %ymm10 - vmovdqu 352(%r15), %ymm11 + vmovdqu 320(%rbx), %ymm10 + vmovdqu 352(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -8036,8 +8002,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 384(%r15), %ymm10 - vmovdqu 416(%r15), %ymm11 + vmovdqu 384(%rbx), %ymm10 + vmovdqu 416(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -8088,8 +8054,8 @@ L_pointwise_acc_mont_end_encap_v: vpsrld $16, %ymm4, %ymm7 vpblendw $0xaa, %ymm6, %ymm4, %ymm4 vpblendw $0x55, %ymm7, %ymm5, %ymm5 - vmovdqu 448(%r15), %ymm10 - vmovdqu 480(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm10 + vmovdqu 480(%rbx), %ymm11 vpmullw %ymm5, %ymm3, %ymm0 vpmulhw %ymm5, %ymm3, %ymm6 vpmullw %ymm4, %ymm2, %ymm1 @@ -8129,12 +8095,8 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm0, 448(%rdx) vmovdqu %ymm1, 480(%rdx) addq $0x200, %rdi - addq $0x200, %r8 - movslq %r11d, %r13 - shl $9, %r13d - subq %r13, %r8 # invntt - leaq L_mlkem_avx2_zetas_inv(%rip), %r15 + leaq L_mlkem_avx2_zetas_inv(%rip), %rbx vmovdqu (%rdx), %ymm0 vmovdqu 32(%rdx), %ymm1 vmovdqu 64(%rdx), %ymm2 @@ -8145,17 +8107,17 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu 224(%rdx), %ymm7 # 2: 1/2 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu (%r15), %ymm10 + vmovdqu (%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm9 - vmovdqu 32(%r15), %ymm12 + vmovdqu 32(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm0 vpsrlq $32, %ymm8, %ymm1 vpblendd $0xaa, %ymm0, %ymm8, %ymm0 vpblendd $0x55, %ymm1, %ymm9, %ymm1 vperm2i128 $32, %ymm3, %ymm2, %ymm8 - vmovdqu 64(%r15), %ymm11 + vmovdqu 64(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm9 - vmovdqu 96(%r15), %ymm13 + vmovdqu 96(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm2 vpsrlq $32, %ymm8, %ymm3 vpblendd $0xaa, %ymm2, %ymm8, %ymm2 @@ -8181,10 +8143,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 4: 1/2 - vmovdqu 128(%r15), %ymm10 - vmovdqu 160(%r15), %ymm12 - vmovdqu 192(%r15), %ymm11 - vmovdqu 224(%r15), %ymm13 + vmovdqu 128(%rbx), %ymm10 + vmovdqu 160(%rbx), %ymm12 + vmovdqu 192(%rbx), %ymm11 + vmovdqu 224(%rbx), %ymm13 vpunpckldq %ymm1, %ymm8, %ymm0 vpunpckhdq %ymm1, %ymm8, %ymm1 vpunpckldq %ymm3, %ymm9, %ymm2 @@ -8202,10 +8164,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 8: 1/2 - vmovdqu 256(%r15), %ymm10 - vmovdqu 288(%r15), %ymm12 - vmovdqu 320(%r15), %ymm11 - vmovdqu 352(%r15), %ymm13 + vmovdqu 256(%rbx), %ymm10 + vmovdqu 288(%rbx), %ymm12 + vmovdqu 320(%rbx), %ymm11 + vmovdqu 352(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -8232,13 +8194,13 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm2, %ymm3, %ymm3 # 16: 1/2 vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 384(%r15), %ymm10 + vmovdqu 384(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 416(%r15), %ymm12 + vmovdqu 416(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 448(%r15), %ymm11 + vmovdqu 448(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 480(%r15), %ymm13 + vmovdqu 480(%rbx), %ymm13 vpsubw %ymm1, %ymm0, %ymm8 vpsubw %ymm3, %ymm2, %ymm9 vpaddw %ymm1, %ymm0, %ymm0 @@ -8252,8 +8214,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm1, %ymm8, %ymm1 vpsubw %ymm3, %ymm9, %ymm3 # 32: 1/2 - vmovdqu 512(%r15), %ymm10 - vmovdqu 544(%r15), %ymm12 + vmovdqu 512(%rbx), %ymm10 + vmovdqu 544(%rbx), %ymm12 vpaddw %ymm2, %ymm0, %ymm8 vpaddw %ymm3, %ymm1, %ymm9 vpsubw %ymm2, %ymm0, %ymm2 @@ -8276,17 +8238,17 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm9, %ymm3, %ymm3 # 2: 1/2 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 576(%r15), %ymm10 + vmovdqu 576(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm9 - vmovdqu 608(%r15), %ymm12 + vmovdqu 608(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm4 vpsrlq $32, %ymm8, %ymm5 vpblendd $0xaa, %ymm4, %ymm8, %ymm4 vpblendd $0x55, %ymm5, %ymm9, %ymm5 vperm2i128 $32, %ymm7, %ymm6, %ymm8 - vmovdqu 640(%r15), %ymm11 + vmovdqu 640(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm9 - vmovdqu 672(%r15), %ymm13 + vmovdqu 672(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm6 vpsrlq $32, %ymm8, %ymm7 vpblendd $0xaa, %ymm6, %ymm8, %ymm6 @@ -8312,10 +8274,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 4: 1/2 - vmovdqu 704(%r15), %ymm10 - vmovdqu 736(%r15), %ymm12 - vmovdqu 768(%r15), %ymm11 - vmovdqu 800(%r15), %ymm13 + vmovdqu 704(%rbx), %ymm10 + vmovdqu 736(%rbx), %ymm12 + vmovdqu 768(%rbx), %ymm11 + vmovdqu 800(%rbx), %ymm13 vpunpckldq %ymm5, %ymm8, %ymm4 vpunpckhdq %ymm5, %ymm8, %ymm5 vpunpckldq %ymm7, %ymm9, %ymm6 @@ -8333,10 +8295,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 8: 1/2 - vmovdqu 832(%r15), %ymm10 - vmovdqu 864(%r15), %ymm12 - vmovdqu 896(%r15), %ymm11 - vmovdqu 928(%r15), %ymm13 + vmovdqu 832(%rbx), %ymm10 + vmovdqu 864(%rbx), %ymm12 + vmovdqu 896(%rbx), %ymm11 + vmovdqu 928(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -8363,13 +8325,13 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm6, %ymm7, %ymm7 # 16: 1/2 vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 960(%r15), %ymm10 + vmovdqu 960(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 992(%r15), %ymm12 + vmovdqu 992(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 1024(%r15), %ymm11 + vmovdqu 1024(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 1056(%r15), %ymm13 + vmovdqu 1056(%rbx), %ymm13 vpsubw %ymm5, %ymm4, %ymm8 vpsubw %ymm7, %ymm6, %ymm9 vpaddw %ymm5, %ymm4, %ymm4 @@ -8383,8 +8345,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm5, %ymm8, %ymm5 vpsubw %ymm7, %ymm9, %ymm7 # 32: 1/2 - vmovdqu 1088(%r15), %ymm10 - vmovdqu 1120(%r15), %ymm12 + vmovdqu 1088(%rbx), %ymm10 + vmovdqu 1120(%rbx), %ymm12 vpaddw %ymm6, %ymm4, %ymm8 vpaddw %ymm7, %ymm5, %ymm9 vpsubw %ymm6, %ymm4, %ymm6 @@ -8406,8 +8368,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm8, %ymm6, %ymm6 vpsubw %ymm9, %ymm7, %ymm7 # 64: 1/2 - vmovdqu 1152(%r15), %ymm10 - vmovdqu 1184(%r15), %ymm12 + vmovdqu 1152(%rbx), %ymm10 + vmovdqu 1184(%rbx), %ymm12 vpsubw %ymm4, %ymm0, %ymm8 vpsubw %ymm5, %ymm1, %ymm9 vpaddw %ymm4, %ymm0, %ymm0 @@ -8450,17 +8412,17 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu 480(%rdx), %ymm7 # 2: 2/2 vperm2i128 $32, %ymm1, %ymm0, %ymm8 - vmovdqu 1216(%r15), %ymm10 + vmovdqu 1216(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm0, %ymm9 - vmovdqu 1248(%r15), %ymm12 + vmovdqu 1248(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm0 vpsrlq $32, %ymm8, %ymm1 vpblendd $0xaa, %ymm0, %ymm8, %ymm0 vpblendd $0x55, %ymm1, %ymm9, %ymm1 vperm2i128 $32, %ymm3, %ymm2, %ymm8 - vmovdqu 1280(%r15), %ymm11 + vmovdqu 1280(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm2, %ymm9 - vmovdqu 1312(%r15), %ymm13 + vmovdqu 1312(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm2 vpsrlq $32, %ymm8, %ymm3 vpblendd $0xaa, %ymm2, %ymm8, %ymm2 @@ -8486,10 +8448,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 4: 2/2 - vmovdqu 1344(%r15), %ymm10 - vmovdqu 1376(%r15), %ymm12 - vmovdqu 1408(%r15), %ymm11 - vmovdqu 1440(%r15), %ymm13 + vmovdqu 1344(%rbx), %ymm10 + vmovdqu 1376(%rbx), %ymm12 + vmovdqu 1408(%rbx), %ymm11 + vmovdqu 1440(%rbx), %ymm13 vpunpckldq %ymm1, %ymm8, %ymm0 vpunpckhdq %ymm1, %ymm8, %ymm1 vpunpckldq %ymm3, %ymm9, %ymm2 @@ -8507,10 +8469,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm0, %ymm1, %ymm1 vpsubw %ymm2, %ymm3, %ymm3 # 8: 2/2 - vmovdqu 1472(%r15), %ymm10 - vmovdqu 1504(%r15), %ymm12 - vmovdqu 1536(%r15), %ymm11 - vmovdqu 1568(%r15), %ymm13 + vmovdqu 1472(%rbx), %ymm10 + vmovdqu 1504(%rbx), %ymm12 + vmovdqu 1536(%rbx), %ymm11 + vmovdqu 1568(%rbx), %ymm13 vpunpcklqdq %ymm1, %ymm8, %ymm0 vpunpckhqdq %ymm1, %ymm8, %ymm1 vpunpcklqdq %ymm3, %ymm9, %ymm2 @@ -8537,13 +8499,13 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm2, %ymm3, %ymm3 # 16: 2/2 vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 1600(%r15), %ymm10 + vmovdqu 1600(%rbx), %ymm10 vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 1632(%r15), %ymm12 + vmovdqu 1632(%rbx), %ymm12 vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 1664(%r15), %ymm11 + vmovdqu 1664(%rbx), %ymm11 vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 1696(%r15), %ymm13 + vmovdqu 1696(%rbx), %ymm13 vpsubw %ymm1, %ymm0, %ymm8 vpsubw %ymm3, %ymm2, %ymm9 vpaddw %ymm1, %ymm0, %ymm0 @@ -8557,8 +8519,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm1, %ymm8, %ymm1 vpsubw %ymm3, %ymm9, %ymm3 # 32: 2/2 - vmovdqu 1728(%r15), %ymm10 - vmovdqu 1760(%r15), %ymm12 + vmovdqu 1728(%rbx), %ymm10 + vmovdqu 1760(%rbx), %ymm12 vpaddw %ymm2, %ymm0, %ymm8 vpaddw %ymm3, %ymm1, %ymm9 vpsubw %ymm2, %ymm0, %ymm2 @@ -8581,17 +8543,17 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm9, %ymm3, %ymm3 # 2: 2/2 vperm2i128 $32, %ymm5, %ymm4, %ymm8 - vmovdqu 1792(%r15), %ymm10 + vmovdqu 1792(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm4, %ymm9 - vmovdqu 1824(%r15), %ymm12 + vmovdqu 1824(%rbx), %ymm12 vpsllq $32, %ymm9, %ymm4 vpsrlq $32, %ymm8, %ymm5 vpblendd $0xaa, %ymm4, %ymm8, %ymm4 vpblendd $0x55, %ymm5, %ymm9, %ymm5 vperm2i128 $32, %ymm7, %ymm6, %ymm8 - vmovdqu 1856(%r15), %ymm11 + vmovdqu 1856(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm6, %ymm9 - vmovdqu 1888(%r15), %ymm13 + vmovdqu 1888(%rbx), %ymm13 vpsllq $32, %ymm9, %ymm6 vpsrlq $32, %ymm8, %ymm7 vpblendd $0xaa, %ymm6, %ymm8, %ymm6 @@ -8617,10 +8579,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 4: 2/2 - vmovdqu 1920(%r15), %ymm10 - vmovdqu 1952(%r15), %ymm12 - vmovdqu 1984(%r15), %ymm11 - vmovdqu 2016(%r15), %ymm13 + vmovdqu 1920(%rbx), %ymm10 + vmovdqu 1952(%rbx), %ymm12 + vmovdqu 1984(%rbx), %ymm11 + vmovdqu 2016(%rbx), %ymm13 vpunpckldq %ymm5, %ymm8, %ymm4 vpunpckhdq %ymm5, %ymm8, %ymm5 vpunpckldq %ymm7, %ymm9, %ymm6 @@ -8638,10 +8600,10 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm4, %ymm5, %ymm5 vpsubw %ymm6, %ymm7, %ymm7 # 8: 2/2 - vmovdqu 2048(%r15), %ymm10 - vmovdqu 2080(%r15), %ymm12 - vmovdqu 2112(%r15), %ymm11 - vmovdqu 2144(%r15), %ymm13 + vmovdqu 2048(%rbx), %ymm10 + vmovdqu 2080(%rbx), %ymm12 + vmovdqu 2112(%rbx), %ymm11 + vmovdqu 2144(%rbx), %ymm13 vpunpcklqdq %ymm5, %ymm8, %ymm4 vpunpckhqdq %ymm5, %ymm8, %ymm5 vpunpcklqdq %ymm7, %ymm9, %ymm6 @@ -8668,13 +8630,13 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm6, %ymm7, %ymm7 # 16: 2/2 vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 2176(%r15), %ymm10 + vmovdqu 2176(%rbx), %ymm10 vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 2208(%r15), %ymm12 + vmovdqu 2208(%rbx), %ymm12 vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 2240(%r15), %ymm11 + vmovdqu 2240(%rbx), %ymm11 vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 2272(%r15), %ymm13 + vmovdqu 2272(%rbx), %ymm13 vpsubw %ymm5, %ymm4, %ymm8 vpsubw %ymm7, %ymm6, %ymm9 vpaddw %ymm5, %ymm4, %ymm4 @@ -8688,8 +8650,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm5, %ymm8, %ymm5 vpsubw %ymm7, %ymm9, %ymm7 # 32: 2/2 - vmovdqu 2304(%r15), %ymm10 - vmovdqu 2336(%r15), %ymm12 + vmovdqu 2304(%rbx), %ymm10 + vmovdqu 2336(%rbx), %ymm12 vpaddw %ymm6, %ymm4, %ymm8 vpaddw %ymm7, %ymm5, %ymm9 vpsubw %ymm6, %ymm4, %ymm6 @@ -8711,8 +8673,8 @@ L_pointwise_acc_mont_end_encap_v: vpsubw %ymm8, %ymm6, %ymm6 vpsubw %ymm9, %ymm7, %ymm7 # 64: 2/2 - vmovdqu 2368(%r15), %ymm10 - vmovdqu 2400(%r15), %ymm12 + vmovdqu 2368(%rbx), %ymm10 + vmovdqu 2400(%rbx), %ymm12 vpsubw %ymm4, %ymm0, %ymm8 vpsubw %ymm5, %ymm1, %ymm9 vpaddw %ymm4, %ymm0, %ymm0 @@ -8742,10 +8704,10 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm2, 320(%rdx) vmovdqu %ymm3, 352(%rdx) # 128 - vmovdqu 2432(%r15), %ymm10 - vmovdqu 2464(%r15), %ymm12 - vmovdqu 2496(%r15), %ymm11 - vmovdqu 2528(%r15), %ymm13 + vmovdqu 2432(%rbx), %ymm10 + vmovdqu 2464(%rbx), %ymm12 + vmovdqu 2496(%rbx), %ymm11 + vmovdqu 2528(%rbx), %ymm13 vmovdqu 128(%rdx), %ymm0 vmovdqu 160(%rdx), %ymm1 vmovdqu 192(%rdx), %ymm2 @@ -8903,79 +8865,22 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm6, 320(%rdx) vmovdqu %ymm7, 352(%rdx) # Add Errors - vmovdqu (%rdx), %ymm0 - vmovdqu 32(%rdx), %ymm1 - vmovdqu 64(%rdx), %ymm2 - vmovdqu 96(%rdx), %ymm3 + vmovdqu (%r10), %ymm0 + vmovdqu 32(%r10), %ymm1 + vmovdqu 64(%r10), %ymm2 + vmovdqu 96(%r10), %ymm3 vmovdqu (%rax), %ymm4 vmovdqu 32(%rax), %ymm5 vmovdqu 64(%rax), %ymm6 vmovdqu 96(%rax), %ymm7 - vpaddw %ymm4, %ymm0, %ymm0 - vpaddw %ymm5, %ymm1, %ymm1 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, (%rdx) - vmovdqu %ymm1, 32(%rdx) - vmovdqu %ymm2, 64(%rdx) - vmovdqu %ymm3, 96(%rdx) - vmovdqu 128(%rdx), %ymm0 - vmovdqu 160(%rdx), %ymm1 - vmovdqu 192(%rdx), %ymm2 - vmovdqu 224(%rdx), %ymm3 - vmovdqu 128(%rax), %ymm4 - vmovdqu 160(%rax), %ymm5 - vmovdqu 192(%rax), %ymm6 - vmovdqu 224(%rax), %ymm7 - vpaddw %ymm4, %ymm0, %ymm0 - vpaddw %ymm5, %ymm1, %ymm1 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 128(%rdx) - vmovdqu %ymm1, 160(%rdx) - vmovdqu %ymm2, 192(%rdx) - vmovdqu %ymm3, 224(%rdx) - vmovdqu 256(%rdx), %ymm0 - vmovdqu 288(%rdx), %ymm1 - vmovdqu 320(%rdx), %ymm2 - vmovdqu 352(%rdx), %ymm3 - vmovdqu 256(%rax), %ymm4 - vmovdqu 288(%rax), %ymm5 - vmovdqu 320(%rax), %ymm6 - vmovdqu 352(%rax), %ymm7 - vpaddw %ymm4, %ymm0, %ymm0 - vpaddw %ymm5, %ymm1, %ymm1 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 256(%rdx) - vmovdqu %ymm1, 288(%rdx) - vmovdqu %ymm2, 320(%rdx) - vmovdqu %ymm3, 352(%rdx) - vmovdqu 384(%rdx), %ymm0 - vmovdqu 416(%rdx), %ymm1 - vmovdqu 448(%rdx), %ymm2 - vmovdqu 480(%rdx), %ymm3 - vmovdqu 384(%rax), %ymm4 - vmovdqu 416(%rax), %ymm5 - vmovdqu 448(%rax), %ymm6 - vmovdqu 480(%rax), %ymm7 - vpaddw %ymm4, %ymm0, %ymm0 - vpaddw %ymm5, %ymm1, %ymm1 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 384(%rdx) - vmovdqu %ymm1, 416(%rdx) - vmovdqu %ymm2, 448(%rdx) - vmovdqu %ymm3, 480(%rdx) - # Add Errors + vpaddw %ymm0, %ymm4, %ymm4 + vpaddw %ymm1, %ymm5, %ymm5 + vpaddw %ymm2, %ymm6, %ymm6 + vpaddw %ymm3, %ymm7, %ymm7 vmovdqu (%rdx), %ymm0 vmovdqu 32(%rdx), %ymm1 vmovdqu 64(%rdx), %ymm2 vmovdqu 96(%rdx), %ymm3 - vmovdqu (%r10), %ymm4 - vmovdqu 32(%r10), %ymm5 - vmovdqu 64(%r10), %ymm6 - vmovdqu 96(%r10), %ymm7 vpaddw %ymm4, %ymm0, %ymm4 vpaddw %ymm5, %ymm1, %ymm5 vpmulhw %ymm15, %ymm4, %ymm0 @@ -9000,14 +8905,22 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm1, 32(%rdx) vmovdqu %ymm2, 64(%rdx) vmovdqu %ymm3, 96(%rdx) + vmovdqu 128(%r10), %ymm0 + vmovdqu 160(%r10), %ymm1 + vmovdqu 192(%r10), %ymm2 + vmovdqu 224(%r10), %ymm3 + vmovdqu 128(%rax), %ymm4 + vmovdqu 160(%rax), %ymm5 + vmovdqu 192(%rax), %ymm6 + vmovdqu 224(%rax), %ymm7 + vpaddw %ymm0, %ymm4, %ymm4 + vpaddw %ymm1, %ymm5, %ymm5 + vpaddw %ymm2, %ymm6, %ymm6 + vpaddw %ymm3, %ymm7, %ymm7 vmovdqu 128(%rdx), %ymm0 vmovdqu 160(%rdx), %ymm1 vmovdqu 192(%rdx), %ymm2 vmovdqu 224(%rdx), %ymm3 - vmovdqu 128(%r10), %ymm4 - vmovdqu 160(%r10), %ymm5 - vmovdqu 192(%r10), %ymm6 - vmovdqu 224(%r10), %ymm7 vpaddw %ymm4, %ymm0, %ymm4 vpaddw %ymm5, %ymm1, %ymm5 vpmulhw %ymm15, %ymm4, %ymm0 @@ -9032,14 +8945,22 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm1, 160(%rdx) vmovdqu %ymm2, 192(%rdx) vmovdqu %ymm3, 224(%rdx) + vmovdqu 256(%r10), %ymm0 + vmovdqu 288(%r10), %ymm1 + vmovdqu 320(%r10), %ymm2 + vmovdqu 352(%r10), %ymm3 + vmovdqu 256(%rax), %ymm4 + vmovdqu 288(%rax), %ymm5 + vmovdqu 320(%rax), %ymm6 + vmovdqu 352(%rax), %ymm7 + vpaddw %ymm0, %ymm4, %ymm4 + vpaddw %ymm1, %ymm5, %ymm5 + vpaddw %ymm2, %ymm6, %ymm6 + vpaddw %ymm3, %ymm7, %ymm7 vmovdqu 256(%rdx), %ymm0 vmovdqu 288(%rdx), %ymm1 vmovdqu 320(%rdx), %ymm2 vmovdqu 352(%rdx), %ymm3 - vmovdqu 256(%r10), %ymm4 - vmovdqu 288(%r10), %ymm5 - vmovdqu 320(%r10), %ymm6 - vmovdqu 352(%r10), %ymm7 vpaddw %ymm4, %ymm0, %ymm4 vpaddw %ymm5, %ymm1, %ymm5 vpmulhw %ymm15, %ymm4, %ymm0 @@ -9064,14 +8985,22 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm1, 288(%rdx) vmovdqu %ymm2, 320(%rdx) vmovdqu %ymm3, 352(%rdx) + vmovdqu 384(%r10), %ymm0 + vmovdqu 416(%r10), %ymm1 + vmovdqu 448(%r10), %ymm2 + vmovdqu 480(%r10), %ymm3 + vmovdqu 384(%rax), %ymm4 + vmovdqu 416(%rax), %ymm5 + vmovdqu 448(%rax), %ymm6 + vmovdqu 480(%rax), %ymm7 + vpaddw %ymm0, %ymm4, %ymm4 + vpaddw %ymm1, %ymm5, %ymm5 + vpaddw %ymm2, %ymm6, %ymm6 + vpaddw %ymm3, %ymm7, %ymm7 vmovdqu 384(%rdx), %ymm0 vmovdqu 416(%rdx), %ymm1 vmovdqu 448(%rdx), %ymm2 vmovdqu 480(%rdx), %ymm3 - vmovdqu 384(%r10), %ymm4 - vmovdqu 416(%r10), %ymm5 - vmovdqu 448(%r10), %ymm6 - vmovdqu 480(%r10), %ymm7 vpaddw %ymm4, %ymm0, %ymm4 vpaddw %ymm5, %ymm1, %ymm5 vpmulhw %ymm15, %ymm4, %ymm0 @@ -9098,6 +9027,7 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm3, 480(%rdx) vzeroupper addq $48, %rsp + popq %rbx popq %r15 popq %r14 popq %r13 @@ -10952,10 +10882,6 @@ L_pointwise_acc_mont_end_decap: vmovdqu %ymm0, 448(%rsi) vmovdqu %ymm1, 480(%rsi) addq $0x200, %rdi - addq $0x200, %rdx - movslq %r8d, %rax - shl $9, %eax - subq %rax, %rdx # invntt leaq L_mlkem_avx2_zetas_inv(%rip), %r10 vmovdqu (%rsi), %ymm0 diff --git a/wolfcrypt/src/wc_mlkem_poly.c b/wolfcrypt/src/wc_mlkem_poly.c index 320e8121f..39f6b9439 100644 --- a/wolfcrypt/src/wc_mlkem_poly.c +++ b/wolfcrypt/src/wc_mlkem_poly.c @@ -182,7 +182,7 @@ const sword16 zetas[MLKEM_N / 2] = { 817, 1097, 603, 610, 1322, 2044, 1864, 384, 2114, 3193, 1218, 1994, 2455, 220, 2142, 1670, 2144, 1799, 2051, 794, 1819, 2475, 2459, 478, - 3221, 3021, 996, 991, 958, 1869, 1522, 1628 + 3221, 3021, 996, 991, 958, 1869, 1522, 1628 }; @@ -540,6 +540,308 @@ static void mlkem_ntt(sword16* r) #endif } +#if !defined(WOLFSSL_MLKEM_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLKEM_SMALL) && !defined(WOLFSSL_MLKEM_NO_LARGE_CODE) +/* Number-Theoretic Transform. + * + * FIPS 203, Algorithm 9: NTT(f) + * Computes the NTT representation f_hat of the given polynomial f element of + * R_q. + * 1: f_hat <- f + * 2: i <- 1 + * 3: for (len <- 128; len >= 2; len <- len/2) + * 4: for (start <- 0; start < 256; start <- start + 2.len) + * 5: zeta <- zetas^BitRev_7(i) mod q + * 6: i <- i + 1 + * 7: for (j <- start; j < start + len; j++) + * 8: t <- zeta.f[j+len] + * 9: f_hat[j+len] <- f_hat[j] - t + * 10: f_hat[j] <- f_hat[j] - t + * 11: end for + * 12: end for + * 13: end for + * 14: return f_hat + * + * @param [in, out] r Polynomial to transform. + */ +static void mlkem_ntt_add_to(sword16* r, sword16* a) +{ +#if defined(WOLFSSL_MLKEM_NTT_UNROLL) + /* Unroll len loop (Step 3). */ + unsigned int k = 1; + unsigned int j; + unsigned int start; + sword16 zeta = zetas[k++]; + + /* len = 128 */ + for (j = 0; j < MLKEM_N / 2; ++j) { + sword32 p = (sword32)zeta * r[j + MLKEM_N / 2]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[j]; + r[j + MLKEM_N / 2] = rj - t; + r[j] = rj + t; + } + /* len = 64 */ + for (start = 0; start < MLKEM_N; start += 2 * 64) { + zeta = zetas[k++]; + for (j = 0; j < 64; ++j) { + sword32 p = (sword32)zeta * r[start + j + 64]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 64] = rj - t; + r[start + j] = rj + t; + } + } + /* len = 32 */ + for (start = 0; start < MLKEM_N; start += 2 * 32) { + zeta = zetas[k++]; + for (j = 0; j < 32; ++j) { + sword32 p = (sword32)zeta * r[start + j + 32]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 32] = rj - t; + r[start + j] = rj + t; + } + } + /* len = 16 */ + for (start = 0; start < MLKEM_N; start += 2 * 16) { + zeta = zetas[k++]; + for (j = 0; j < 16; ++j) { + sword32 p = (sword32)zeta * r[start + j + 16]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 16] = rj - t; + r[start + j] = rj + t; + } + } + /* len = 8 */ + for (start = 0; start < MLKEM_N; start += 2 * 8) { + zeta = zetas[k++]; + for (j = 0; j < 8; ++j) { + sword32 p = (sword32)zeta * r[start + j + 8]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 8] = rj - t; + r[start + j] = rj + t; + } + } + /* len = 4 */ + for (start = 0; start < MLKEM_N; start += 2 * 4) { + zeta = zetas[k++]; + for (j = 0; j < 4; ++j) { + sword32 p = (sword32)zeta * r[start + j + 4]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 4] = rj - t; + r[start + j] = rj + t; + } + } + /* len = 2 */ + for (start = 0; start < MLKEM_N; start += 2 * 2) { + zeta = zetas[k++]; + for (j = 0; j < 2; ++j) { + sword32 p = (sword32)zeta * r[start + j + 2]; + sword16 t = MLKEM_MONT_RED(p); + sword16 rj = r[start + j]; + r[start + j + 2] = rj - t; + r[start + j] = rj + t; + } + } + /* Reduce coefficients with quick algorithm. */ + for (j = 0; j < MLKEM_N; ++j) { + sword16 t = a[j] + r[j]; + a[j] = MLKEM_BARRETT_RED(t); + } +#else + /* Unroll len (2, 3, 2) and start loops. */ + unsigned int j; + sword16 t0; + sword16 t1; + sword16 t2; + sword16 t3; + + /* len = 128,64 */ + sword16 zeta128 = zetas[1]; + sword16 zeta64_0 = zetas[2]; + sword16 zeta64_1 = zetas[3]; + for (j = 0; j < MLKEM_N / 8; j++) { + sword16 r0 = r[j + 0]; + sword16 r1 = r[j + 32]; + sword16 r2 = r[j + 64]; + sword16 r3 = r[j + 96]; + sword16 r4 = r[j + 128]; + sword16 r5 = r[j + 160]; + sword16 r6 = r[j + 192]; + sword16 r7 = r[j + 224]; + + t0 = MLKEM_MONT_RED((sword32)zeta128 * r4); + t1 = MLKEM_MONT_RED((sword32)zeta128 * r5); + t2 = MLKEM_MONT_RED((sword32)zeta128 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta128 * r7); + r4 = r0 - t0; + r5 = r1 - t1; + r6 = r2 - t2; + r7 = r3 - t3; + r0 += t0; + r1 += t1; + r2 += t2; + r3 += t3; + + t0 = MLKEM_MONT_RED((sword32)zeta64_0 * r2); + t1 = MLKEM_MONT_RED((sword32)zeta64_0 * r3); + t2 = MLKEM_MONT_RED((sword32)zeta64_1 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta64_1 * r7); + r2 = r0 - t0; + r3 = r1 - t1; + r6 = r4 - t2; + r7 = r5 - t3; + r0 += t0; + r1 += t1; + r4 += t2; + r5 += t3; + + r[j + 0] = r0; + r[j + 32] = r1; + r[j + 64] = r2; + r[j + 96] = r3; + r[j + 128] = r4; + r[j + 160] = r5; + r[j + 192] = r6; + r[j + 224] = r7; + } + + /* len = 32,16,8 */ + for (j = 0; j < MLKEM_N; j += 64) { + int i; + sword16 zeta32 = zetas[ 4 + j / 64 + 0]; + sword16 zeta16_0 = zetas[ 8 + j / 32 + 0]; + sword16 zeta16_1 = zetas[ 8 + j / 32 + 1]; + sword16 zeta8_0 = zetas[16 + j / 16 + 0]; + sword16 zeta8_1 = zetas[16 + j / 16 + 1]; + sword16 zeta8_2 = zetas[16 + j / 16 + 2]; + sword16 zeta8_3 = zetas[16 + j / 16 + 3]; + for (i = 0; i < 8; i++) { + sword16 r0 = r[j + i + 0]; + sword16 r1 = r[j + i + 8]; + sword16 r2 = r[j + i + 16]; + sword16 r3 = r[j + i + 24]; + sword16 r4 = r[j + i + 32]; + sword16 r5 = r[j + i + 40]; + sword16 r6 = r[j + i + 48]; + sword16 r7 = r[j + i + 56]; + + t0 = MLKEM_MONT_RED((sword32)zeta32 * r4); + t1 = MLKEM_MONT_RED((sword32)zeta32 * r5); + t2 = MLKEM_MONT_RED((sword32)zeta32 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta32 * r7); + r4 = r0 - t0; + r5 = r1 - t1; + r6 = r2 - t2; + r7 = r3 - t3; + r0 += t0; + r1 += t1; + r2 += t2; + r3 += t3; + + t0 = MLKEM_MONT_RED((sword32)zeta16_0 * r2); + t1 = MLKEM_MONT_RED((sword32)zeta16_0 * r3); + t2 = MLKEM_MONT_RED((sword32)zeta16_1 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta16_1 * r7); + r2 = r0 - t0; + r3 = r1 - t1; + r6 = r4 - t2; + r7 = r5 - t3; + r0 += t0; + r1 += t1; + r4 += t2; + r5 += t3; + + t0 = MLKEM_MONT_RED((sword32)zeta8_0 * r1); + t1 = MLKEM_MONT_RED((sword32)zeta8_1 * r3); + t2 = MLKEM_MONT_RED((sword32)zeta8_2 * r5); + t3 = MLKEM_MONT_RED((sword32)zeta8_3 * r7); + r1 = r0 - t0; + r3 = r2 - t1; + r5 = r4 - t2; + r7 = r6 - t3; + r0 += t0; + r2 += t1; + r4 += t2; + r6 += t3; + + r[j + i + 0] = r0; + r[j + i + 8] = r1; + r[j + i + 16] = r2; + r[j + i + 24] = r3; + r[j + i + 32] = r4; + r[j + i + 40] = r5; + r[j + i + 48] = r6; + r[j + i + 56] = r7; + } + } + + /* len = 4,2 and Final reduction */ + for (j = 0; j < MLKEM_N; j += 8) { + sword16 zeta4 = zetas[32 + j / 8 + 0]; + sword16 zeta2_0 = zetas[64 + j / 4 + 0]; + sword16 zeta2_1 = zetas[64 + j / 4 + 1]; + sword16 r0 = r[j + 0]; + sword16 r1 = r[j + 1]; + sword16 r2 = r[j + 2]; + sword16 r3 = r[j + 3]; + sword16 r4 = r[j + 4]; + sword16 r5 = r[j + 5]; + sword16 r6 = r[j + 6]; + sword16 r7 = r[j + 7]; + + t0 = MLKEM_MONT_RED((sword32)zeta4 * r4); + t1 = MLKEM_MONT_RED((sword32)zeta4 * r5); + t2 = MLKEM_MONT_RED((sword32)zeta4 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta4 * r7); + r4 = r0 - t0; + r5 = r1 - t1; + r6 = r2 - t2; + r7 = r3 - t3; + r0 += t0; + r1 += t1; + r2 += t2; + r3 += t3; + + t0 = MLKEM_MONT_RED((sword32)zeta2_0 * r2); + t1 = MLKEM_MONT_RED((sword32)zeta2_0 * r3); + t2 = MLKEM_MONT_RED((sword32)zeta2_1 * r6); + t3 = MLKEM_MONT_RED((sword32)zeta2_1 * r7); + r2 = r0 - t0; + r3 = r1 - t1; + r6 = r4 - t2; + r7 = r5 - t3; + r0 += t0; + r1 += t1; + r4 += t2; + r5 += t3; + + r0 += a[j + 0]; + r1 += a[j + 1]; + r2 += a[j + 2]; + r3 += a[j + 3]; + r4 += a[j + 4]; + r5 += a[j + 5]; + r6 += a[j + 6]; + r7 += a[j + 7]; + + a[j + 0] = MLKEM_BARRETT_RED(r0); + a[j + 1] = MLKEM_BARRETT_RED(r1); + a[j + 2] = MLKEM_BARRETT_RED(r2); + a[j + 3] = MLKEM_BARRETT_RED(r3); + a[j + 4] = MLKEM_BARRETT_RED(r4); + a[j + 5] = MLKEM_BARRETT_RED(r5); + a[j + 6] = MLKEM_BARRETT_RED(r6); + a[j + 7] = MLKEM_BARRETT_RED(r7); + } +#endif +} +#endif + #if !defined(WOLFSSL_MLKEM_NO_ENCAPSULATE) || \ !defined(WOLFSSL_MLKEM_NO_DECAPSULATE) /* Zetas for inverse NTT. */ @@ -1524,6 +1826,7 @@ static void mlkem_keygen_c(sword16* s, sword16* t, sword16* e, const sword16* a, } /* Transform error values polynomial. * Step 17: e_hat = NTT(e) */ +#if defined(WOLFSSL_MLKEM_SMALL) || defined(WOLFSSL_MLKEM_NO_LARGE_CODE) mlkem_ntt(e + i * MLKEM_N); /* Add errors to public key and reduce. * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ @@ -1531,6 +1834,11 @@ static void mlkem_keygen_c(sword16* s, sword16* t, sword16* e, const sword16* a, sword16 n = t[i * MLKEM_N + j] + e[i * MLKEM_N + j]; t[i * MLKEM_N + j] = MLKEM_BARRETT_RED(n); } +#else + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ + mlkem_ntt_add_to(e + i * MLKEM_N, t + i * MLKEM_N); +#endif } } @@ -1633,6 +1941,7 @@ int mlkem_keygen_seeds(sword16* s, sword16* t, MLKEM_PRF_T* prf, } /* Transform error values polynomial. * Step 17: e_hat = NTT(e) */ +#if defined(WOLFSSL_MLKEM_SMALL) || defined(WOLFSSL_MLKEM_NO_LARGE_CODE) mlkem_ntt(e); /* Add errors to public key and reduce. * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ @@ -1640,6 +1949,11 @@ int mlkem_keygen_seeds(sword16* s, sword16* t, MLKEM_PRF_T* prf, sword16 n = t[i * MLKEM_N + j] + e[j]; t[i * MLKEM_N + j] = MLKEM_BARRETT_RED(n); } +#else + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ + mlkem_ntt_add_to(e, t + i * MLKEM_N); +#endif } return ret; @@ -1684,10 +1998,31 @@ static void mlkem_encapsulate_c(const sword16* pub, sword16* u, sword16* v, /* Inverse transform u polynomial. */ mlkem_invntt(u + i * MLKEM_N); /* Add errors to u and reduce. */ +#if defined(WOLFSSL_MLKEM_SMALL) || defined(WOLFSSL_MLKEM_NO_LARGE_CODE) for (j = 0; j < MLKEM_N; ++j) { sword16 t = u[i * MLKEM_N + j] + e1[i * MLKEM_N + j]; u[i * MLKEM_N + j] = MLKEM_BARRETT_RED(t); } +#else + for (j = 0; j < MLKEM_N; j += 8) { + sword16 t0 = u[i * MLKEM_N + j + 0] + e1[i * MLKEM_N + j + 0]; + sword16 t1 = u[i * MLKEM_N + j + 1] + e1[i * MLKEM_N + j + 1]; + sword16 t2 = u[i * MLKEM_N + j + 2] + e1[i * MLKEM_N + j + 2]; + sword16 t3 = u[i * MLKEM_N + j + 3] + e1[i * MLKEM_N + j + 3]; + sword16 t4 = u[i * MLKEM_N + j + 4] + e1[i * MLKEM_N + j + 4]; + sword16 t5 = u[i * MLKEM_N + j + 5] + e1[i * MLKEM_N + j + 5]; + sword16 t6 = u[i * MLKEM_N + j + 6] + e1[i * MLKEM_N + j + 6]; + sword16 t7 = u[i * MLKEM_N + j + 7] + e1[i * MLKEM_N + j + 7]; + u[i * MLKEM_N + j + 0] = MLKEM_BARRETT_RED(t0); + u[i * MLKEM_N + j + 1] = MLKEM_BARRETT_RED(t1); + u[i * MLKEM_N + j + 2] = MLKEM_BARRETT_RED(t2); + u[i * MLKEM_N + j + 3] = MLKEM_BARRETT_RED(t3); + u[i * MLKEM_N + j + 4] = MLKEM_BARRETT_RED(t4); + u[i * MLKEM_N + j + 5] = MLKEM_BARRETT_RED(t5); + u[i * MLKEM_N + j + 6] = MLKEM_BARRETT_RED(t6); + u[i * MLKEM_N + j + 7] = MLKEM_BARRETT_RED(t7); + } +#endif } /* Multiply public key by y into v polynomial. */ @@ -1781,10 +2116,31 @@ int mlkem_encapsulate_seeds(const sword16* pub, MLKEM_PRF_T* prf, sword16* u, break; } /* Add errors to u and reduce. */ +#if defined(WOLFSSL_MLKEM_SMALL) || defined(WOLFSSL_MLKEM_NO_LARGE_CODE) for (j = 0; j < MLKEM_N; ++j) { sword16 t = u[i * MLKEM_N + j] + e1[j]; u[i * MLKEM_N + j] = MLKEM_BARRETT_RED(t); } +#else + for (j = 0; j < MLKEM_N; j += 8) { + sword16 t0 = u[i * MLKEM_N + j + 0] + e1[j + 0]; + sword16 t1 = u[i * MLKEM_N + j + 1] + e1[j + 1]; + sword16 t2 = u[i * MLKEM_N + j + 2] + e1[j + 2]; + sword16 t3 = u[i * MLKEM_N + j + 3] + e1[j + 3]; + sword16 t4 = u[i * MLKEM_N + j + 4] + e1[j + 4]; + sword16 t5 = u[i * MLKEM_N + j + 5] + e1[j + 5]; + sword16 t6 = u[i * MLKEM_N + j + 6] + e1[j + 6]; + sword16 t7 = u[i * MLKEM_N + j + 7] + e1[j + 7]; + u[i * MLKEM_N + j + 0] = MLKEM_BARRETT_RED(t0); + u[i * MLKEM_N + j + 1] = MLKEM_BARRETT_RED(t1); + u[i * MLKEM_N + j + 2] = MLKEM_BARRETT_RED(t2); + u[i * MLKEM_N + j + 3] = MLKEM_BARRETT_RED(t3); + u[i * MLKEM_N + j + 4] = MLKEM_BARRETT_RED(t4); + u[i * MLKEM_N + j + 5] = MLKEM_BARRETT_RED(t5); + u[i * MLKEM_N + j + 6] = MLKEM_BARRETT_RED(t6); + u[i * MLKEM_N + j + 7] = MLKEM_BARRETT_RED(t7); + } +#endif } /* Multiply public key by y into v polynomial. */ @@ -1799,10 +2155,31 @@ int mlkem_encapsulate_seeds(const sword16* pub, MLKEM_PRF_T* prf, sword16* u, ret = mlkem_get_noise_eta2_c(prf, e2, coins); if (ret == 0) { /* Add errors and message to v and reduce. */ + #if defined(WOLFSSL_MLKEM_SMALL) || defined(WOLFSSL_MLKEM_NO_LARGE_CODE) for (i = 0; i < MLKEM_N; ++i) { sword16 t = v[i] + e2[i] + m[i]; - tp[i] = MLKEM_BARRETT_RED(t); + v[i] = MLKEM_BARRETT_RED(t); } + #else + for (i = 0; i < MLKEM_N; i += 8) { + sword16 t0 = v[i + 0] + e2[i + 0] + m[i + 0]; + sword16 t1 = v[i + 1] + e2[i + 1] + m[i + 1]; + sword16 t2 = v[i + 2] + e2[i + 2] + m[i + 2]; + sword16 t3 = v[i + 3] + e2[i + 3] + m[i + 3]; + sword16 t4 = v[i + 4] + e2[i + 4] + m[i + 4]; + sword16 t5 = v[i + 5] + e2[i + 5] + m[i + 5]; + sword16 t6 = v[i + 6] + e2[i + 6] + m[i + 6]; + sword16 t7 = v[i + 7] + e2[i + 7] + m[i + 7]; + v[i + 0] = MLKEM_BARRETT_RED(t0); + v[i + 1] = MLKEM_BARRETT_RED(t1); + v[i + 2] = MLKEM_BARRETT_RED(t2); + v[i + 3] = MLKEM_BARRETT_RED(t3); + v[i + 4] = MLKEM_BARRETT_RED(t4); + v[i + 5] = MLKEM_BARRETT_RED(t5); + v[i + 6] = MLKEM_BARRETT_RED(t6); + v[i + 7] = MLKEM_BARRETT_RED(t7); + } + #endif } return ret; @@ -2713,6 +3090,47 @@ int mlkem_kdf(byte* seed, int seedLen, byte* out, int outLen) #endif #endif +#ifndef WOLFSSL_NO_ML_KEM +/* Derive the secret from z and cipher text. + * + * @param [in, out] shake256 SHAKE-256 object. + * @param [in] z Implicit rejection value. + * @param [in] ct Cipher text. + * @param [in] ctSz Length of cipher text in bytes. + * @param [out] ss Shared secret. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation failed. + * @return Other negative when a hash error occurred. + */ +int mlkem_derive_secret(wc_Shake* shake256, const byte* z, const byte* ct, + word32 ctSz, byte* ss) +{ + int ret; + +#ifdef USE_INTEL_SPEEDUP + XMEMCPY(shake256->t, z, WC_ML_KEM_SYM_SZ); + XMEMCPY(shake256->t, ct, WC_SHA3_256_COUNT * 8 - WC_ML_KEM_SYM_SZ); + shake256->i = WC_ML_KEM_SYM_SZ; + ct += WC_SHA3_256_COUNT * 8 - WC_ML_KEM_SYM_SZ; + ctSz -= WC_SHA3_256_COUNT * 8 - WC_ML_KEM_SYM_SZ; + ret = wc_Shake256_Update(shake256, ct, ctSz); + if (ret == 0) { + ret = wc_Shake256_Final(shake256, ss, WC_ML_KEM_SS_SZ); + } +#else + ret = wc_Shake256_Update(shake256, z, WC_ML_KEM_SYM_SZ); + if (ret == 0) { + ret = wc_Shake256_Update(shake256, ct, ctSz); + } + if (ret == 0) { + ret = wc_Shake256_Final(shake256, ss, WC_ML_KEM_SS_SZ); + } +#endif + + return ret; +} +#endif + #if !defined(WOLFSSL_ARMASM) /* Rejection sampling on uniform random bytes to generate uniform random * integers mod q. @@ -3625,16 +4043,34 @@ static void mlkem_get_noise_x4_eta2_avx2(byte* rand, byte* seed, byte o) static int mlkem_get_noise_eta2_avx2(MLKEM_PRF_T* prf, sword16* p, const byte* seed) { - int ret; - byte rand[ETA2_RAND_SIZE]; + word64 state[25]; - /* Calculate random bytes from seed with PRF. */ - ret = mlkem_prf(prf, rand, sizeof(rand), seed); - if (ret == 0) { - mlkem_cbd_eta2_avx2(p, rand); + (void)prf; + + /* Put first WC_ML_KEM_SYM_SZ bytes og key into blank state. */ + readUnalignedWords64(state, seed, WC_ML_KEM_SYM_SZ / sizeof(word64)); + /* Last byte in with end of content marker. */ + state[WC_ML_KEM_SYM_SZ / 8] = 0x1f00 | seed[WC_ML_KEM_SYM_SZ]; + /* Set rest of state to 0. */ + XMEMSET(state + WC_ML_KEM_SYM_SZ / 8 + 1, 0, + (25 - WC_ML_KEM_SYM_SZ / 8 - 1) * sizeof(word64)); + /* ... except for rate marker. */ + state[WC_SHA3_256_COUNT - 1] = W64LIT(0x8000000000000000); + + /* Perform a block operation on the state for next block of output. */ + if (IS_INTEL_BMI2(cpuid_flags)) { + sha3_block_bmi2(state); } + else if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + sha3_block_avx2(state); + RESTORE_VECTOR_REGISTERS(); + } + else { + BlockSha3(state); + } + mlkem_cbd_eta2_avx2(p, (byte*)state); - return ret; + return 0; } #endif diff --git a/wolfssl/wolfcrypt/wc_mlkem.h b/wolfssl/wolfcrypt/wc_mlkem.h index ee6c9c878..f79e1883a 100644 --- a/wolfssl/wolfcrypt/wc_mlkem.h +++ b/wolfssl/wolfcrypt/wc_mlkem.h @@ -200,6 +200,10 @@ WOLFSSL_LOCAL int mlkem_hash512(wc_Sha3* hash, const byte* data1, word32 data1Len, const byte* data2, word32 data2Len, byte* out); +WOLFSSL_LOCAL +int mlkem_derive_secret(MLKEM_PRF_T* prf, const byte* z, const byte* ct, + word32 ctSz, byte* ss); + WOLFSSL_LOCAL void mlkem_prf_init(MLKEM_PRF_T* prf); WOLFSSL_LOCAL