diff --git a/wolfcrypt/src/aes_gcm_asm.asm b/wolfcrypt/src/aes_gcm_asm.asm index 34425d6692..37444980ac 100644 --- a/wolfcrypt/src/aes_gcm_asm.asm +++ b/wolfcrypt/src/aes_gcm_asm.asm @@ -18773,7 +18773,7 @@ L_AES_GCM_encrypt_vaes_iv_done: vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_encrypt_vaes_calc_aad_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 mov r13d, r11d and r13d, 4294967040 cmp ecx, r13d @@ -18781,7 +18781,7 @@ L_AES_GCM_encrypt_vaes_calc_aad_no_ext: L_AES_GCM_encrypt_vaes_calc_aad_l256: ; 256 bytes of AAD lea rbx, QWORD PTR [r12+rcx] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -18900,7 +18900,7 @@ L_AES_GCM_encrypt_vaes_calc_aad_a256: vpermq ymm9, ymm9, 78 vmovdqu ymm10, YMMWORD PTR [rsp] vpermq ymm10, ymm10, 78 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rbx] @@ -19411,7 +19411,7 @@ L_AES_GCM_encrypt_vaes_calc_aad_done: vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_encrypt_vaes_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 cmp r9d, 256 jl L_AES_GCM_encrypt_vaes_after_256 mov r13d, r9d @@ -19420,7 +19420,7 @@ L_AES_GCM_encrypt_vaes_loop_256: ; 256 bytes of input lea rcx, QWORD PTR [rsi+rbx] mov QWORD PTR [rsp+544], rcx - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [rsp+512] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -19635,7 +19635,7 @@ L_AES_GCM_encrypt_vaes_p2_vaes_ctr8_last: vpxor ymm3, ymm3, ymm5 vmovdqu YMMWORD PTR [rdx+96], ymm3 add ebx, 128 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask mov rcx, QWORD PTR [rsp+544] vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 @@ -19747,7 +19747,7 @@ L_AES_GCM_encrypt_vaes_after_256: ; 128 bytes of input lea rcx, QWORD PTR [rsi+rbx] mov QWORD PTR [rsp+544], rcx - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [rsp+512] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -19863,7 +19863,7 @@ L_AES_GCM_encrypt_vaes_8_vaes_ctr8_last: vpermq ymm9, ymm9, 78 vmovdqu ymm10, YMMWORD PTR [rsp] vpermq ymm10, ymm10, 78 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask mov rcx, QWORD PTR [rsp+544] vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 @@ -20795,7 +20795,7 @@ L_AES_GCM_decrypt_vaes_iv_done: vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_decrypt_vaes_calc_aad_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 mov r13d, r11d and r13d, 4294967040 cmp ecx, r13d @@ -20803,7 +20803,7 @@ L_AES_GCM_decrypt_vaes_calc_aad_no_ext: L_AES_GCM_decrypt_vaes_calc_aad_l256: ; 256 bytes of AAD lea rbx, QWORD PTR [r12+rcx] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -20922,7 +20922,7 @@ L_AES_GCM_decrypt_vaes_calc_aad_a256: vpermq ymm9, ymm9, 78 vmovdqu ymm10, YMMWORD PTR [rsp] vpermq ymm10, ymm10, 78 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rbx] @@ -21433,7 +21433,7 @@ L_AES_GCM_decrypt_vaes_calc_aad_done: vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_decrypt_vaes_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 cmp r9d, 256 jl L_AES_GCM_decrypt_vaes_after_256 mov r13d, r9d @@ -21441,7 +21441,7 @@ L_AES_GCM_decrypt_vaes_no_ext: L_AES_GCM_decrypt_vaes_loop_256: ; 256 bytes of input lea rax, QWORD PTR [rdi+rbx] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -21542,7 +21542,7 @@ L_AES_GCM_decrypt_vaes_loop_256: vpxor ymm13, ymm13, ymm12 vextracti128 xmm0, ymm13, 1 vpxor xmm15, xmm13, xmm0 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [rsp+512] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -21774,7 +21774,7 @@ L_AES_GCM_decrypt_vaes_after_256: jge L_AES_GCM_decrypt_vaes_after_128 ; 128 bytes of input lea rax, QWORD PTR [rdi+rbx] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rax] @@ -21827,7 +21827,7 @@ L_AES_GCM_decrypt_vaes_after_256: vpxor ymm13, ymm13, ymm12 vextracti128 xmm0, ymm13, 1 vpxor xmm15, xmm13, xmm0 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [rsp+512] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -22782,7 +22782,7 @@ AES_GCM_aad_update_vaes PROC vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_aad_update_vaes_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 mov eax, r9d and eax, 4294967040 cmp edx, eax @@ -22790,7 +22790,7 @@ L_AES_GCM_aad_update_vaes_no_ext: L_AES_GCM_aad_update_vaes_loop_256: ; 256 bytes of input lea rcx, QWORD PTR [r8+rdx] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -22909,7 +22909,7 @@ L_AES_GCM_aad_update_vaes_after_256: vpermq ymm9, ymm9, 78 vmovdqu ymm10, YMMWORD PTR [rsp] vpermq ymm10, ymm10, 78 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rcx] @@ -23440,7 +23440,7 @@ AES_GCM_encrypt_update_vaes PROC vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_encrypt_update_vaes_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 cmp r9d, 256 jl L_AES_GCM_encrypt_update_vaes_after_256 mov r13d, r9d @@ -23448,7 +23448,7 @@ L_AES_GCM_encrypt_update_vaes_no_ext: L_AES_GCM_encrypt_update_vaes_loop_256: ; 256 bytes of input lea rsi, QWORD PTR [r10+rdi] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [r15] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -23663,7 +23663,7 @@ L_AES_GCM_encrypt_update_vaes_p2_vaes_ctr8_last: vpxor ymm3, ymm3, ymm5 vmovdqu YMMWORD PTR [rdx+96], ymm3 add edi, 128 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -23773,7 +23773,7 @@ L_AES_GCM_encrypt_update_vaes_after_256: jge L_AES_GCM_encrypt_update_vaes_after_128 ; 128 bytes of input lea rsi, QWORD PTR [r10+rdi] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [r15] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -23889,7 +23889,7 @@ L_AES_GCM_encrypt_update_vaes_8_vaes_ctr8_last: vpermq ymm9, ymm9, 78 vmovdqu ymm10, YMMWORD PTR [rsp] vpermq ymm10, ymm10, 78 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rsi] @@ -24499,7 +24499,7 @@ AES_GCM_decrypt_update_vaes PROC vmovdqu YMMWORD PTR [rsp+448], ymm9 vmovdqu YMMWORD PTR [rsp+480], ymm10 L_AES_GCM_decrypt_update_vaes_no_ext: - vbroadcasti128 ymm14, ptr_L_vaes_aes_gcm_mod2_128 + vbroadcasti128 ymm14, OWORD PTR L_vaes_aes_gcm_mod2_128 cmp r9d, 256 jl L_AES_GCM_decrypt_update_vaes_after_256 mov r13d, r9d @@ -24507,7 +24507,7 @@ L_AES_GCM_decrypt_update_vaes_no_ext: L_AES_GCM_decrypt_update_vaes_loop_256: ; 256 bytes of input lea rbx, QWORD PTR [r11+rdi] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm7, YMMWORD PTR [rsp+256] @@ -24608,7 +24608,7 @@ L_AES_GCM_decrypt_update_vaes_loop_256: vpxor ymm13, ymm13, ymm12 vextracti128 xmm0, ymm13, 1 vpxor xmm15, xmm13, xmm0 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [r15] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -24840,7 +24840,7 @@ L_AES_GCM_decrypt_update_vaes_after_256: jge L_AES_GCM_decrypt_update_vaes_after_128 ; 128 bytes of input lea rbx, QWORD PTR [r11+rdi] - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_mask + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_mask vpxor ymm4, ymm4, ymm4 vinserti128 ymm4, ymm4, xmm15, 0 vmovdqu ymm5, YMMWORD PTR [rbx] @@ -24893,7 +24893,7 @@ L_AES_GCM_decrypt_update_vaes_after_256: vpxor ymm13, ymm13, ymm12 vextracti128 xmm0, ymm13, 1 vpxor xmm15, xmm13, xmm0 - vbroadcasti128 ymm6, ptr_L_vaes_aes_gcm_bswap_epi64 + vbroadcasti128 ymm6, OWORD PTR L_vaes_aes_gcm_bswap_epi64 vbroadcasti128 ymm4, OWORD PTR [r15] vpaddd ymm0, ymm4, YMMWORD PTR L_vaes_aes_gcm_inc_y0 vpshufb ymm0, ymm0, ymm6 @@ -26910,8 +26910,8 @@ L_AES_GCM_encrypt_avx512_iv_done: vpternlogq xmm11, xmm9, xmm12, 150 vmovdqa xmm7, xmm11 vmovdqu OWORD PTR [rsp+240], xmm7 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vmovdqu64 zmm23, [rsp+192] vshufi64x2 zmm23, zmm23, zmm23, 27 vmovdqu64 zmm24, [rsp+128] @@ -27012,7 +27012,7 @@ L_AES_GCM_encrypt_avx512_calc_aad_a256: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 @@ -27733,9 +27733,9 @@ L_AES_GCM_encrypt_avx512_calc_aad_done: vmovdqu OWORD PTR [rsp+496], xmm7 L_AES_GCM_encrypt_avx512_no_ext: L_AES_GCM_encrypt_avx512_no_ext2: - vbroadcasti32x4 zmm22, ptr_L_avx512_aes_gcm_bswap_epi64 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm22, OWORD PTR L_avx512_aes_gcm_bswap_epi64 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vbroadcasti32x4 zmm9, OWORD PTR [r15] vbroadcasti32x4 zmm10, OWORD PTR [r15+16] vbroadcasti32x4 zmm11, OWORD PTR [r15+32] @@ -28246,7 +28246,7 @@ L_AES_GCM_encrypt_avx512_b_il_last: vpxorq zmm19, zmm19, zmm21 vmovdqu64 [rdx+192], zmm19 add ebx, 256 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm23, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm23, 150 @@ -28773,7 +28773,7 @@ L_AES_GCM_encrypt_avx512_8_avx512_ctr8_last: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 @@ -29631,8 +29631,8 @@ L_AES_GCM_decrypt_avx512_iv_done: vpternlogq xmm11, xmm9, xmm12, 150 vmovdqa xmm7, xmm11 vmovdqu OWORD PTR [rsp+240], xmm7 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vmovdqu64 zmm23, [rsp+192] vshufi64x2 zmm23, zmm23, zmm23, 27 vmovdqu64 zmm24, [rsp+128] @@ -29733,7 +29733,7 @@ L_AES_GCM_decrypt_avx512_calc_aad_a256: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 @@ -30454,9 +30454,9 @@ L_AES_GCM_decrypt_avx512_calc_aad_done: vmovdqu OWORD PTR [rsp+496], xmm7 L_AES_GCM_decrypt_avx512_no_ext: L_AES_GCM_decrypt_avx512_no_ext2: - vbroadcasti32x4 zmm22, ptr_L_avx512_aes_gcm_bswap_epi64 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm22, OWORD PTR L_avx512_aes_gcm_bswap_epi64 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vbroadcasti32x4 zmm9, OWORD PTR [r15] vbroadcasti32x4 zmm10, OWORD PTR [r15+16] vbroadcasti32x4 zmm11, OWORD PTR [r15+32] @@ -30866,7 +30866,7 @@ L_AES_GCM_decrypt_avx512_b_il_last: vpxorq zmm19, zmm19, zmm21 vmovdqu64 [rdx+192], zmm19 add r12d, 256 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm23, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm23, 150 @@ -31270,7 +31270,7 @@ L_AES_GCM_decrypt_avx512_after_256: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 @@ -32162,8 +32162,8 @@ AES_GCM_aad_update_avx512 PROC vpternlogq xmm12, xmm10, xmm13, 150 vmovdqa xmm8, xmm12 vmovdqu OWORD PTR [rsp+240], xmm8 - vbroadcasti32x4 zmm22, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm23, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm22, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm23, OWORD PTR L_avx512_aes_gcm_mod2_128 vmovdqu64 zmm24, [rsp+192] vshufi64x2 zmm24, zmm24, zmm24, 27 vmovdqu64 zmm25, [rsp+128] @@ -32264,7 +32264,7 @@ L_AES_GCM_aad_update_avx512_after_256: vpxorq zmm28, zmm28, zmm16 vpternlogq zmm29, zmm18, zmm17, 150 vpxorq zmm30, zmm30, zmm19 - vbroadcasti32x4 zmm23, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm23, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm23, zmm28, 1 vpshufd zmm28, zmm28, 78 vpternlogq zmm29, zmm28, zmm21, 150 @@ -33006,9 +33006,9 @@ AES_GCM_encrypt_update_avx512 PROC vmovdqu OWORD PTR [rsp+496], xmm7 L_AES_GCM_encrypt_update_avx512_no_ext: L_AES_GCM_encrypt_update_avx512_no_ext2: - vbroadcasti32x4 zmm22, ptr_L_avx512_aes_gcm_bswap_epi64 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm22, OWORD PTR L_avx512_aes_gcm_bswap_epi64 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vbroadcasti32x4 zmm9, OWORD PTR [rax] vbroadcasti32x4 zmm10, OWORD PTR [rax+16] vbroadcasti32x4 zmm11, OWORD PTR [rax+32] @@ -33516,7 +33516,7 @@ L_AES_GCM_encrypt_update_avx512_b_il_last: vpxorq zmm19, zmm19, zmm21 vmovdqu64 [rdx+192], zmm19 add edi, 256 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm23, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm23, 150 @@ -34041,7 +34041,7 @@ L_AES_GCM_encrypt_update_avx512_8_avx512_ctr8_last: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 @@ -34863,9 +34863,9 @@ AES_GCM_decrypt_update_avx512 PROC vmovdqu OWORD PTR [rsp+496], xmm7 L_AES_GCM_decrypt_update_avx512_no_ext: L_AES_GCM_decrypt_update_avx512_no_ext2: - vbroadcasti32x4 zmm22, ptr_L_avx512_aes_gcm_bswap_epi64 - vbroadcasti32x4 zmm30, ptr_L_avx512_aes_gcm_bswap_mask - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm22, OWORD PTR L_avx512_aes_gcm_bswap_epi64 + vbroadcasti32x4 zmm30, OWORD PTR L_avx512_aes_gcm_bswap_mask + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vbroadcasti32x4 zmm9, OWORD PTR [rax] vbroadcasti32x4 zmm10, OWORD PTR [rax+16] vbroadcasti32x4 zmm11, OWORD PTR [rax+32] @@ -35275,7 +35275,7 @@ L_AES_GCM_decrypt_update_avx512_b_il_last: vpxorq zmm19, zmm19, zmm21 vmovdqu64 [rdx+192], zmm19 add esi, 256 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm23, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm23, 150 @@ -35679,7 +35679,7 @@ L_AES_GCM_decrypt_update_avx512_after_256: vpxorq zmm27, zmm27, zmm16 vpternlogq zmm28, zmm18, zmm17, 150 vpxorq zmm29, zmm29, zmm19 - vbroadcasti32x4 zmm31, ptr_L_avx512_aes_gcm_mod2_128 + vbroadcasti32x4 zmm31, OWORD PTR L_avx512_aes_gcm_mod2_128 vpclmulqdq zmm21, zmm31, zmm27, 1 vpshufd zmm27, zmm27, 78 vpternlogq zmm28, zmm27, zmm21, 150 diff --git a/wolfcrypt/src/aes_x86_64_asm.asm b/wolfcrypt/src/aes_x86_64_asm.asm index 78be4aba9e..e3d625642f 100644 --- a/wolfcrypt/src/aes_x86_64_asm.asm +++ b/wolfcrypt/src/aes_x86_64_asm.asm @@ -3093,7 +3093,7 @@ AES_CTR_encrypt_vaes PROC vmovdqu OWORD PTR [rsp+112], xmm13 vmovdqu OWORD PTR [rsp+128], xmm14 vmovdqu OWORD PTR [rsp+144], xmm15 - vbroadcasti128 ymm8, ptr_L_aes_ctr_bswap_vaes + vbroadcasti128 ymm8, OWORD PTR L_aes_ctr_bswap_vaes vbroadcasti128 ymm7, OWORD PTR [r10] vpshufb ymm7, ymm7, ymm8 vbroadcasti128 ymm12, OWORD PTR [ptr_L_aes_ctr_inc_vaes+32] @@ -4623,7 +4623,7 @@ AES_CTR_encrypt_avx512 PROC vmovdqu OWORD PTR [rsp+112], xmm13 vmovdqu OWORD PTR [rsp+128], xmm14 vmovdqu OWORD PTR [rsp+144], xmm15 - vbroadcasti32x4 zmm8, ptr_L_aes_ctr_bswap_avx512 + vbroadcasti32x4 zmm8, OWORD PTR L_aes_ctr_bswap_avx512 vbroadcasti32x4 zmm7, OWORD PTR [r10] vpshufb zmm7, zmm7, zmm8 vbroadcasti32x4 zmm12, OWORD PTR [ptr_L_aes_ctr_inc_avx512+64] diff --git a/wolfcrypt/src/aes_xts_asm.asm b/wolfcrypt/src/aes_xts_asm.asm index 92cafc7185..d3cda5d3f8 100644 --- a/wolfcrypt/src/aes_xts_asm.asm +++ b/wolfcrypt/src/aes_xts_asm.asm @@ -2919,7 +2919,7 @@ AES_XTS_encrypt_vaes PROC vmovdqu OWORD PTR [rsp+200], xmm14 vmovdqu OWORD PTR [rsp+216], xmm15 vmovdqu xmm12, OWORD PTR L_vaes_aes_xts_gc_xts - vbroadcasti128 ymm13, ptr_L_vaes_aes_xts_poly + vbroadcasti128 ymm13, OWORD PTR L_vaes_aes_xts_poly vmovdqu ymm14, YMMWORD PTR L_vaes_aes_xts_shl vmovdqu ymm15, YMMWORD PTR L_vaes_aes_xts_shr vmovdqu xmm8, OWORD PTR [r12] @@ -3433,7 +3433,7 @@ AES_XTS_encrypt_update_vaes PROC vmovdqu OWORD PTR [rsp+192], xmm14 vmovdqu OWORD PTR [rsp+208], xmm15 vmovdqu xmm12, OWORD PTR L_vaes_aes_xts_gc_xts - vbroadcasti128 ymm13, ptr_L_vaes_aes_xts_poly + vbroadcasti128 ymm13, OWORD PTR L_vaes_aes_xts_poly vmovdqu ymm14, YMMWORD PTR L_vaes_aes_xts_shl vmovdqu ymm15, YMMWORD PTR L_vaes_aes_xts_shr vmovdqu xmm8, OWORD PTR [r8] @@ -3914,7 +3914,7 @@ AES_XTS_decrypt_vaes PROC vmovdqu OWORD PTR [rsp+200], xmm14 vmovdqu OWORD PTR [rsp+216], xmm15 vmovdqu xmm12, OWORD PTR L_vaes_aes_xts_gc_xts - vbroadcasti128 ymm13, ptr_L_vaes_aes_xts_poly + vbroadcasti128 ymm13, OWORD PTR L_vaes_aes_xts_poly vmovdqu ymm14, YMMWORD PTR L_vaes_aes_xts_shl vmovdqu ymm15, YMMWORD PTR L_vaes_aes_xts_shr vmovdqu xmm8, OWORD PTR [r12] @@ -4502,7 +4502,7 @@ AES_XTS_decrypt_update_vaes PROC vmovdqu OWORD PTR [rsp+192], xmm14 vmovdqu OWORD PTR [rsp+208], xmm15 vmovdqu xmm12, OWORD PTR L_vaes_aes_xts_gc_xts - vbroadcasti128 ymm13, ptr_L_vaes_aes_xts_poly + vbroadcasti128 ymm13, OWORD PTR L_vaes_aes_xts_poly vmovdqu ymm14, YMMWORD PTR L_vaes_aes_xts_shl vmovdqu ymm15, YMMWORD PTR L_vaes_aes_xts_shr vmovdqu xmm8, OWORD PTR [r8] @@ -5127,7 +5127,7 @@ AES_XTS_encrypt_avx512 PROC vmovdqu OWORD PTR [rsp+200], xmm14 vmovdqu OWORD PTR [rsp+216], xmm15 vmovdqu xmm12, OWORD PTR L_avx512_aes_xts_gc_xts - vbroadcasti32x4 zmm13, ptr_L_avx512_aes_xts_poly + vbroadcasti32x4 zmm13, OWORD PTR L_avx512_aes_xts_poly vmovdqu64 zmm14, ZMMWORD PTR L_avx512_aes_xts_shl vmovdqu64 zmm15, ZMMWORD PTR L_avx512_aes_xts_shr vmovdqu xmm8, OWORD PTR [r12] @@ -5648,7 +5648,7 @@ AES_XTS_encrypt_update_avx512 PROC vmovdqu OWORD PTR [rsp+192], xmm14 vmovdqu OWORD PTR [rsp+208], xmm15 vmovdqu xmm12, OWORD PTR L_avx512_aes_xts_gc_xts - vbroadcasti32x4 zmm13, ptr_L_avx512_aes_xts_poly + vbroadcasti32x4 zmm13, OWORD PTR L_avx512_aes_xts_poly vmovdqu64 zmm14, ZMMWORD PTR L_avx512_aes_xts_shl vmovdqu64 zmm15, ZMMWORD PTR L_avx512_aes_xts_shr vmovdqu xmm8, OWORD PTR [r8] @@ -6136,7 +6136,7 @@ AES_XTS_decrypt_avx512 PROC vmovdqu OWORD PTR [rsp+200], xmm14 vmovdqu OWORD PTR [rsp+216], xmm15 vmovdqu xmm12, OWORD PTR L_avx512_aes_xts_gc_xts - vbroadcasti32x4 zmm13, ptr_L_avx512_aes_xts_poly + vbroadcasti32x4 zmm13, OWORD PTR L_avx512_aes_xts_poly vmovdqu64 zmm14, ZMMWORD PTR L_avx512_aes_xts_shl vmovdqu64 zmm15, ZMMWORD PTR L_avx512_aes_xts_shr vmovdqu xmm8, OWORD PTR [r12] @@ -6741,7 +6741,7 @@ AES_XTS_decrypt_update_avx512 PROC vmovdqu OWORD PTR [rsp+192], xmm14 vmovdqu OWORD PTR [rsp+208], xmm15 vmovdqu xmm12, OWORD PTR L_avx512_aes_xts_gc_xts - vbroadcasti32x4 zmm13, ptr_L_avx512_aes_xts_poly + vbroadcasti32x4 zmm13, OWORD PTR L_avx512_aes_xts_poly vmovdqu64 zmm14, ZMMWORD PTR L_avx512_aes_xts_shl vmovdqu64 zmm15, ZMMWORD PTR L_avx512_aes_xts_shr vmovdqu xmm8, OWORD PTR [r8] diff --git a/wolfcrypt/src/cpuid.c b/wolfcrypt/src/cpuid.c index c4750d54f3..eae52827fe 100644 --- a/wolfcrypt/src/cpuid.c +++ b/wolfcrypt/src/cpuid.c @@ -54,12 +54,8 @@ new_cpuid_flags |= CPUID_MOVBE; new_cpuid_flags |= CPUID_BMI1; #ifdef WOLFSSL_SGX_CPUID_AVX512_VAES - /* CPUID is unavailable inside an SGX enclave, so the integrator - * defines this macro to assert the target CPU implements VAES and - * AVX512. This enables ALL VAES/AVX512-gated code (AES-GCM and the - * rest), not just AES-GCM-SIV - only set it when that is true. */ new_cpuid_flags |= CPUID_VAES; - new_cpuid_flags |= CPUID_AVX512; + new_cpuid_flags |= CPUID_AVX512 | CPUID_AVX512_BW; #endif (void)wolfSSL_Atomic_Uint_CompareExchange @@ -164,6 +160,9 @@ if (cpuid_flag(7, 0, EBX, 17)) { new_cpuid_flags |= CPUID_AVX512_DQ; } + if (cpuid_flag(7, 0, EBX, 30)) { + new_cpuid_flags |= CPUID_AVX512_BW; + } if (cpuid_is_intel()) { new_cpuid_flags |= CPUID_INTEL ; } if (cpuid_is_amd()) { new_cpuid_flags |= CPUID_AMD ; } (void)wolfSSL_Atomic_Uint_CompareExchange diff --git a/wolfcrypt/src/sha3.c b/wolfcrypt/src/sha3.c index 7f4276955f..72f2d4e1fe 100644 --- a/wolfcrypt/src/sha3.c +++ b/wolfcrypt/src/sha3.c @@ -136,13 +136,7 @@ * it is not built - see scripts sha3_avx512.rb.) * Overrides: WOLFSSL_SHA3_AVX2 forces AVX2 on any vendor with it; * WOLFSSL_SHA3_NO_AVX2 never uses AVX2. */ -#if defined(WOLFSSL_SHA3_NO_AVX2) - #define SHA3_USE_AVX2(f) 0 -#elif defined(WOLFSSL_SHA3_AVX2) - #define SHA3_USE_AVX2(f) IS_INTEL_AVX2(f) -#else - #define SHA3_USE_AVX2(f) (IS_INTEL_AVX2(f) && IS_CPU_INTEL(f)) -#endif + /* SHA3_USE_AVX2() is defined in sha3.h - shared with ML-DSA. */ /* True when the selected block function uses vector registers and so * needs the caller to save/restore them. BMI2 and the C block use only diff --git a/wolfcrypt/src/sha3_asm.S b/wolfcrypt/src/sha3_asm.S index a9c9694cea..68d0911782 100644 --- a/wolfcrypt/src/sha3_asm.S +++ b/wolfcrypt/src/sha3_asm.S @@ -36852,7 +36852,7 @@ _sha3_256_blocksx4_seed_64_avx2: #endif /* HAVE_INTEL_AVX512 */ #endif /* NO_AVX512_SUPPORT */ #ifdef HAVE_INTEL_AVX512 -#if defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) +#if defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) || defined(WOLFSSL_HAVE_MLDSA) #ifndef __APPLE__ .data #else @@ -36960,7 +36960,7 @@ L_sha3_x8_avx512_r: .quad 0x8000000080008008,0x8000000080008008 .quad 0x8000000080008008,0x8000000080008008 .quad 0x8000000080008008,0x8000000080008008 -#endif /* defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) */ +#endif /* defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) || defined(WOLFSSL_HAVE_MLDSA) */ #ifdef WOLFSSL_HAVE_FRODOKEM #ifndef __APPLE__ .text @@ -39902,7 +39902,7 @@ L_sha3_blocksx8_out_avx512_done: .size sha3_blocksx8_out_avx512,.-sha3_blocksx8_out_avx512 #endif /* __APPLE__ */ #endif /* WOLFSSL_HAVE_FRODOKEM */ -#ifdef WOLFSSL_HAVE_MLKEM +#if defined(WOLFSSL_HAVE_MLKEM) || defined(WOLFSSL_HAVE_MLDSA) #ifndef __APPLE__ .text .globl sha3_blocksx8_avx512 @@ -45670,6 +45670,8 @@ _sha3_128_blocksx8_seed_avx512: #ifndef __APPLE__ .size sha3_128_blocksx8_seed_avx512,.-sha3_128_blocksx8_seed_avx512 #endif /* __APPLE__ */ +#endif /* defined(WOLFSSL_HAVE_MLKEM) || defined(WOLFSSL_HAVE_MLDSA) */ +#ifdef WOLFSSL_HAVE_MLKEM #ifndef __APPLE__ .data #else @@ -48562,6 +48564,2899 @@ _sha3_256_blocksx8_seed_avx512: .size sha3_256_blocksx8_seed_avx512,.-sha3_256_blocksx8_seed_avx512 #endif /* __APPLE__ */ #endif /* WOLFSSL_HAVE_MLKEM */ +#ifdef WOLFSSL_HAVE_MLDSA +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_sha3_256_blocksx8_seed_64_avx512_end_mark: +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +#ifndef __APPLE__ +.text +.globl sha3_256_blocksx8_seed_64_avx512 +.type sha3_256_blocksx8_seed_64_avx512,@function +.align 16 +sha3_256_blocksx8_seed_64_avx512: +#else +.section __TEXT,__text +.globl _sha3_256_blocksx8_seed_64_avx512 +.p2align 4 +_sha3_256_blocksx8_seed_64_avx512: +#endif /* __APPLE__ */ + leaq L_sha3_x8_avx512_r(%rip), %rdx + vpbroadcastq (%rsi), %zmm0 + vpbroadcastq 8(%rsi), %zmm1 + vpbroadcastq 16(%rsi), %zmm2 + vpbroadcastq 24(%rsi), %zmm3 + vpbroadcastq 32(%rsi), %zmm4 + vpbroadcastq 40(%rsi), %zmm5 + vpbroadcastq 48(%rsi), %zmm6 + vpbroadcastq 56(%rsi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vpxorq %zmm9, %zmm9, %zmm9 + vmovdqu64 %zmm9, %zmm10 + vmovdqu64 %zmm9, %zmm11 + vmovdqu64 %zmm9, %zmm12 + vmovdqu64 %zmm9, %zmm13 + vmovdqu64 %zmm9, %zmm14 + vmovdqu64 %zmm9, %zmm15 + vmovdqu64 L_sha3_256_blocksx8_seed_64_avx512_end_mark(%rip), %zmm16 + vmovdqu64 %zmm9, %zmm17 + vmovdqu64 %zmm9, %zmm18 + vmovdqu64 %zmm9, %zmm19 + vmovdqu64 %zmm9, %zmm20 + vmovdqu64 %zmm9, %zmm21 + vmovdqu64 %zmm9, %zmm22 + vmovdqu64 %zmm9, %zmm23 + vmovdqu64 %zmm9, %zmm24 + # Round 0 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm10, %zmm5, %zmm25 + vpternlogq $0x96, %zmm20, %zmm15, %zmm25 + vmovdqu64 %zmm1, %zmm26 + vpternlogq $0x96, %zmm11, %zmm6, %zmm26 + vpternlogq $0x96, %zmm21, %zmm16, %zmm26 + vmovdqu64 %zmm2, %zmm27 + vpternlogq $0x96, %zmm12, %zmm7, %zmm27 + vpternlogq $0x96, %zmm22, %zmm17, %zmm27 + vmovdqu64 %zmm3, %zmm28 + vpternlogq $0x96, %zmm13, %zmm8, %zmm28 + vpternlogq $0x96, %zmm23, %zmm18, %zmm28 + vmovdqu64 %zmm4, %zmm29 + vpternlogq $0x96, %zmm14, %zmm9, %zmm29 + vpternlogq $0x96, %zmm24, %zmm19, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm24, %zmm24 + # Rho - rotate each lane in place + vprolq $0x01, %zmm1, %zmm1 + vprolq $62, %zmm2, %zmm2 + vprolq $28, %zmm3, %zmm3 + vprolq $27, %zmm4, %zmm4 + vprolq $36, %zmm5, %zmm5 + vprolq $44, %zmm6, %zmm6 + vprolq $6, %zmm7, %zmm7 + vprolq $55, %zmm8, %zmm8 + vprolq $20, %zmm9, %zmm9 + vprolq $3, %zmm10, %zmm10 + vprolq $10, %zmm11, %zmm11 + vprolq $43, %zmm12, %zmm12 + vprolq $25, %zmm13, %zmm13 + vprolq $39, %zmm14, %zmm14 + vprolq $41, %zmm15, %zmm15 + vprolq $45, %zmm16, %zmm16 + vprolq $15, %zmm17, %zmm17 + vprolq $21, %zmm18, %zmm18 + vprolq $8, %zmm19, %zmm19 + vprolq $18, %zmm20, %zmm20 + vprolq $2, %zmm21, %zmm21 + vprolq $61, %zmm22, %zmm22 + vprolq $56, %zmm23, %zmm23 + vprolq $14, %zmm24, %zmm24 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm6, %zmm0 + vpternlogq $0xd2, %zmm18, %zmm12, %zmm6 + vpternlogq $0xd2, %zmm24, %zmm18, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm9, %zmm3 + vpternlogq $0xd2, %zmm16, %zmm10, %zmm9 + vpternlogq $0xd2, %zmm22, %zmm16, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm7, %zmm1 + vpternlogq $0xd2, %zmm19, %zmm13, %zmm7 + vpternlogq $0xd2, %zmm20, %zmm19, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm5, %zmm4 + vpternlogq $0xd2, %zmm17, %zmm11, %zmm5 + vpternlogq $0xd2, %zmm23, %zmm17, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm8, %zmm2 + vpternlogq $0xd2, %zmm15, %zmm14, %zmm8 + vpternlogq $0xd2, %zmm21, %zmm15, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + # Iota + vpxorq (%rdx), %zmm0, %zmm0 + # Round 1 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm1, %zmm3, %zmm25 + vpternlogq $0x96, %zmm2, %zmm4, %zmm25 + vmovdqu64 %zmm6, %zmm26 + vpternlogq $0x96, %zmm7, %zmm9, %zmm26 + vpternlogq $0x96, %zmm8, %zmm5, %zmm26 + vmovdqu64 %zmm12, %zmm27 + vpternlogq $0x96, %zmm13, %zmm10, %zmm27 + vpternlogq $0x96, %zmm14, %zmm11, %zmm27 + vmovdqu64 %zmm18, %zmm28 + vpternlogq $0x96, %zmm19, %zmm16, %zmm28 + vpternlogq $0x96, %zmm15, %zmm17, %zmm28 + vmovdqu64 %zmm24, %zmm29 + vpternlogq $0x96, %zmm20, %zmm22, %zmm29 + vpternlogq $0x96, %zmm21, %zmm23, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm21, %zmm21 + # Rho - rotate each lane in place + vprolq $0x01, %zmm6, %zmm6 + vprolq $62, %zmm12, %zmm12 + vprolq $28, %zmm18, %zmm18 + vprolq $27, %zmm24, %zmm24 + vprolq $36, %zmm3, %zmm3 + vprolq $44, %zmm9, %zmm9 + vprolq $6, %zmm10, %zmm10 + vprolq $55, %zmm16, %zmm16 + vprolq $20, %zmm22, %zmm22 + vprolq $3, %zmm1, %zmm1 + vprolq $10, %zmm7, %zmm7 + vprolq $43, %zmm13, %zmm13 + vprolq $25, %zmm19, %zmm19 + vprolq $39, %zmm20, %zmm20 + vprolq $41, %zmm4, %zmm4 + vprolq $45, %zmm5, %zmm5 + vprolq $15, %zmm11, %zmm11 + vprolq $21, %zmm17, %zmm17 + vprolq $8, %zmm23, %zmm23 + vprolq $18, %zmm2, %zmm2 + vprolq $2, %zmm8, %zmm8 + vprolq $61, %zmm14, %zmm14 + vprolq $56, %zmm15, %zmm15 + vprolq $14, %zmm21, %zmm21 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm9, %zmm0 + vpternlogq $0xd2, %zmm17, %zmm13, %zmm9 + vpternlogq $0xd2, %zmm21, %zmm17, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm22, %zmm18 + vpternlogq $0xd2, %zmm5, %zmm1, %zmm22 + vpternlogq $0xd2, %zmm14, %zmm5, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm10, %zmm6 + vpternlogq $0xd2, %zmm23, %zmm19, %zmm10 + vpternlogq $0xd2, %zmm2, %zmm23, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm3, %zmm24 + vpternlogq $0xd2, %zmm11, %zmm7, %zmm3 + vpternlogq $0xd2, %zmm15, %zmm11, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm16, %zmm12 + vpternlogq $0xd2, %zmm4, %zmm20, %zmm16 + vpternlogq $0xd2, %zmm8, %zmm4, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + # Iota + vpxorq 64(%rdx), %zmm0, %zmm0 + # Round 2 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm6, %zmm18, %zmm25 + vpternlogq $0x96, %zmm12, %zmm24, %zmm25 + vmovdqu64 %zmm9, %zmm26 + vpternlogq $0x96, %zmm10, %zmm22, %zmm26 + vpternlogq $0x96, %zmm16, %zmm3, %zmm26 + vmovdqu64 %zmm13, %zmm27 + vpternlogq $0x96, %zmm19, %zmm1, %zmm27 + vpternlogq $0x96, %zmm20, %zmm7, %zmm27 + vmovdqu64 %zmm17, %zmm28 + vpternlogq $0x96, %zmm23, %zmm5, %zmm28 + vpternlogq $0x96, %zmm4, %zmm11, %zmm28 + vmovdqu64 %zmm21, %zmm29 + vpternlogq $0x96, %zmm2, %zmm14, %zmm29 + vpternlogq $0x96, %zmm8, %zmm15, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm8, %zmm8 + # Rho - rotate each lane in place + vprolq $0x01, %zmm9, %zmm9 + vprolq $62, %zmm13, %zmm13 + vprolq $28, %zmm17, %zmm17 + vprolq $27, %zmm21, %zmm21 + vprolq $36, %zmm18, %zmm18 + vprolq $44, %zmm22, %zmm22 + vprolq $6, %zmm1, %zmm1 + vprolq $55, %zmm5, %zmm5 + vprolq $20, %zmm14, %zmm14 + vprolq $3, %zmm6, %zmm6 + vprolq $10, %zmm10, %zmm10 + vprolq $43, %zmm19, %zmm19 + vprolq $25, %zmm23, %zmm23 + vprolq $39, %zmm2, %zmm2 + vprolq $41, %zmm24, %zmm24 + vprolq $45, %zmm3, %zmm3 + vprolq $15, %zmm7, %zmm7 + vprolq $21, %zmm11, %zmm11 + vprolq $8, %zmm15, %zmm15 + vprolq $18, %zmm12, %zmm12 + vprolq $2, %zmm16, %zmm16 + vprolq $61, %zmm20, %zmm20 + vprolq $56, %zmm4, %zmm4 + vprolq $14, %zmm8, %zmm8 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm22, %zmm0 + vpternlogq $0xd2, %zmm11, %zmm19, %zmm22 + vpternlogq $0xd2, %zmm8, %zmm11, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm14, %zmm17 + vpternlogq $0xd2, %zmm3, %zmm6, %zmm14 + vpternlogq $0xd2, %zmm20, %zmm3, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm1, %zmm9 + vpternlogq $0xd2, %zmm15, %zmm23, %zmm1 + vpternlogq $0xd2, %zmm12, %zmm15, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm18, %zmm21 + vpternlogq $0xd2, %zmm7, %zmm10, %zmm18 + vpternlogq $0xd2, %zmm4, %zmm7, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm5, %zmm13 + vpternlogq $0xd2, %zmm24, %zmm2, %zmm5 + vpternlogq $0xd2, %zmm16, %zmm24, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + # Iota + vpxorq 128(%rdx), %zmm0, %zmm0 + # Round 3 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm9, %zmm17, %zmm25 + vpternlogq $0x96, %zmm13, %zmm21, %zmm25 + vmovdqu64 %zmm22, %zmm26 + vpternlogq $0x96, %zmm1, %zmm14, %zmm26 + vpternlogq $0x96, %zmm5, %zmm18, %zmm26 + vmovdqu64 %zmm19, %zmm27 + vpternlogq $0x96, %zmm23, %zmm6, %zmm27 + vpternlogq $0x96, %zmm2, %zmm10, %zmm27 + vmovdqu64 %zmm11, %zmm28 + vpternlogq $0x96, %zmm15, %zmm3, %zmm28 + vpternlogq $0x96, %zmm24, %zmm7, %zmm28 + vmovdqu64 %zmm8, %zmm29 + vpternlogq $0x96, %zmm12, %zmm20, %zmm29 + vpternlogq $0x96, %zmm16, %zmm4, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm16, %zmm16 + # Rho - rotate each lane in place + vprolq $0x01, %zmm22, %zmm22 + vprolq $62, %zmm19, %zmm19 + vprolq $28, %zmm11, %zmm11 + vprolq $27, %zmm8, %zmm8 + vprolq $36, %zmm17, %zmm17 + vprolq $44, %zmm14, %zmm14 + vprolq $6, %zmm6, %zmm6 + vprolq $55, %zmm3, %zmm3 + vprolq $20, %zmm20, %zmm20 + vprolq $3, %zmm9, %zmm9 + vprolq $10, %zmm1, %zmm1 + vprolq $43, %zmm23, %zmm23 + vprolq $25, %zmm15, %zmm15 + vprolq $39, %zmm12, %zmm12 + vprolq $41, %zmm21, %zmm21 + vprolq $45, %zmm18, %zmm18 + vprolq $15, %zmm10, %zmm10 + vprolq $21, %zmm7, %zmm7 + vprolq $8, %zmm4, %zmm4 + vprolq $18, %zmm13, %zmm13 + vprolq $2, %zmm5, %zmm5 + vprolq $61, %zmm2, %zmm2 + vprolq $56, %zmm24, %zmm24 + vprolq $14, %zmm16, %zmm16 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm14, %zmm0 + vpternlogq $0xd2, %zmm7, %zmm23, %zmm14 + vpternlogq $0xd2, %zmm16, %zmm7, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm20, %zmm11 + vpternlogq $0xd2, %zmm18, %zmm9, %zmm20 + vpternlogq $0xd2, %zmm2, %zmm18, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm6, %zmm22 + vpternlogq $0xd2, %zmm4, %zmm15, %zmm6 + vpternlogq $0xd2, %zmm13, %zmm4, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm17, %zmm8 + vpternlogq $0xd2, %zmm10, %zmm1, %zmm17 + vpternlogq $0xd2, %zmm24, %zmm10, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm3, %zmm19 + vpternlogq $0xd2, %zmm21, %zmm12, %zmm3 + vpternlogq $0xd2, %zmm5, %zmm21, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + # Iota + vpxorq 192(%rdx), %zmm0, %zmm0 + # Round 4 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm22, %zmm11, %zmm25 + vpternlogq $0x96, %zmm19, %zmm8, %zmm25 + vmovdqu64 %zmm14, %zmm26 + vpternlogq $0x96, %zmm6, %zmm20, %zmm26 + vpternlogq $0x96, %zmm3, %zmm17, %zmm26 + vmovdqu64 %zmm23, %zmm27 + vpternlogq $0x96, %zmm15, %zmm9, %zmm27 + vpternlogq $0x96, %zmm12, %zmm1, %zmm27 + vmovdqu64 %zmm7, %zmm28 + vpternlogq $0x96, %zmm4, %zmm18, %zmm28 + vpternlogq $0x96, %zmm21, %zmm10, %zmm28 + vmovdqu64 %zmm16, %zmm29 + vpternlogq $0x96, %zmm13, %zmm2, %zmm29 + vpternlogq $0x96, %zmm5, %zmm24, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm5, %zmm5 + # Rho - rotate each lane in place + vprolq $0x01, %zmm14, %zmm14 + vprolq $62, %zmm23, %zmm23 + vprolq $28, %zmm7, %zmm7 + vprolq $27, %zmm16, %zmm16 + vprolq $36, %zmm11, %zmm11 + vprolq $44, %zmm20, %zmm20 + vprolq $6, %zmm9, %zmm9 + vprolq $55, %zmm18, %zmm18 + vprolq $20, %zmm2, %zmm2 + vprolq $3, %zmm22, %zmm22 + vprolq $10, %zmm6, %zmm6 + vprolq $43, %zmm15, %zmm15 + vprolq $25, %zmm4, %zmm4 + vprolq $39, %zmm13, %zmm13 + vprolq $41, %zmm8, %zmm8 + vprolq $45, %zmm17, %zmm17 + vprolq $15, %zmm1, %zmm1 + vprolq $21, %zmm10, %zmm10 + vprolq $8, %zmm24, %zmm24 + vprolq $18, %zmm19, %zmm19 + vprolq $2, %zmm3, %zmm3 + vprolq $61, %zmm12, %zmm12 + vprolq $56, %zmm21, %zmm21 + vprolq $14, %zmm5, %zmm5 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm20, %zmm0 + vpternlogq $0xd2, %zmm10, %zmm15, %zmm20 + vpternlogq $0xd2, %zmm5, %zmm10, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm2, %zmm7 + vpternlogq $0xd2, %zmm17, %zmm22, %zmm2 + vpternlogq $0xd2, %zmm12, %zmm17, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm9, %zmm14 + vpternlogq $0xd2, %zmm24, %zmm4, %zmm9 + vpternlogq $0xd2, %zmm19, %zmm24, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm11, %zmm16 + vpternlogq $0xd2, %zmm1, %zmm6, %zmm11 + vpternlogq $0xd2, %zmm21, %zmm1, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm18, %zmm23 + vpternlogq $0xd2, %zmm8, %zmm13, %zmm18 + vpternlogq $0xd2, %zmm3, %zmm8, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + # Iota + vpxorq 256(%rdx), %zmm0, %zmm0 + # Round 5 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm14, %zmm7, %zmm25 + vpternlogq $0x96, %zmm23, %zmm16, %zmm25 + vmovdqu64 %zmm20, %zmm26 + vpternlogq $0x96, %zmm9, %zmm2, %zmm26 + vpternlogq $0x96, %zmm18, %zmm11, %zmm26 + vmovdqu64 %zmm15, %zmm27 + vpternlogq $0x96, %zmm4, %zmm22, %zmm27 + vpternlogq $0x96, %zmm13, %zmm6, %zmm27 + vmovdqu64 %zmm10, %zmm28 + vpternlogq $0x96, %zmm24, %zmm17, %zmm28 + vpternlogq $0x96, %zmm8, %zmm1, %zmm28 + vmovdqu64 %zmm5, %zmm29 + vpternlogq $0x96, %zmm19, %zmm12, %zmm29 + vpternlogq $0x96, %zmm3, %zmm21, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm3, %zmm3 + # Rho - rotate each lane in place + vprolq $0x01, %zmm20, %zmm20 + vprolq $62, %zmm15, %zmm15 + vprolq $28, %zmm10, %zmm10 + vprolq $27, %zmm5, %zmm5 + vprolq $36, %zmm7, %zmm7 + vprolq $44, %zmm2, %zmm2 + vprolq $6, %zmm22, %zmm22 + vprolq $55, %zmm17, %zmm17 + vprolq $20, %zmm12, %zmm12 + vprolq $3, %zmm14, %zmm14 + vprolq $10, %zmm9, %zmm9 + vprolq $43, %zmm4, %zmm4 + vprolq $25, %zmm24, %zmm24 + vprolq $39, %zmm19, %zmm19 + vprolq $41, %zmm16, %zmm16 + vprolq $45, %zmm11, %zmm11 + vprolq $15, %zmm6, %zmm6 + vprolq $21, %zmm1, %zmm1 + vprolq $8, %zmm21, %zmm21 + vprolq $18, %zmm23, %zmm23 + vprolq $2, %zmm18, %zmm18 + vprolq $61, %zmm13, %zmm13 + vprolq $56, %zmm8, %zmm8 + vprolq $14, %zmm3, %zmm3 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm2, %zmm0 + vpternlogq $0xd2, %zmm1, %zmm4, %zmm2 + vpternlogq $0xd2, %zmm3, %zmm1, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm12, %zmm10 + vpternlogq $0xd2, %zmm11, %zmm14, %zmm12 + vpternlogq $0xd2, %zmm13, %zmm11, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm22, %zmm20 + vpternlogq $0xd2, %zmm21, %zmm24, %zmm22 + vpternlogq $0xd2, %zmm23, %zmm21, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm7, %zmm5 + vpternlogq $0xd2, %zmm6, %zmm9, %zmm7 + vpternlogq $0xd2, %zmm8, %zmm6, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm17, %zmm15 + vpternlogq $0xd2, %zmm16, %zmm19, %zmm17 + vpternlogq $0xd2, %zmm18, %zmm16, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + # Iota + vpxorq 320(%rdx), %zmm0, %zmm0 + # Round 6 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm20, %zmm10, %zmm25 + vpternlogq $0x96, %zmm15, %zmm5, %zmm25 + vmovdqu64 %zmm2, %zmm26 + vpternlogq $0x96, %zmm22, %zmm12, %zmm26 + vpternlogq $0x96, %zmm17, %zmm7, %zmm26 + vmovdqu64 %zmm4, %zmm27 + vpternlogq $0x96, %zmm24, %zmm14, %zmm27 + vpternlogq $0x96, %zmm19, %zmm9, %zmm27 + vmovdqu64 %zmm1, %zmm28 + vpternlogq $0x96, %zmm21, %zmm11, %zmm28 + vpternlogq $0x96, %zmm16, %zmm6, %zmm28 + vmovdqu64 %zmm3, %zmm29 + vpternlogq $0x96, %zmm23, %zmm13, %zmm29 + vpternlogq $0x96, %zmm18, %zmm8, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm18, %zmm18 + # Rho - rotate each lane in place + vprolq $0x01, %zmm2, %zmm2 + vprolq $62, %zmm4, %zmm4 + vprolq $28, %zmm1, %zmm1 + vprolq $27, %zmm3, %zmm3 + vprolq $36, %zmm10, %zmm10 + vprolq $44, %zmm12, %zmm12 + vprolq $6, %zmm14, %zmm14 + vprolq $55, %zmm11, %zmm11 + vprolq $20, %zmm13, %zmm13 + vprolq $3, %zmm20, %zmm20 + vprolq $10, %zmm22, %zmm22 + vprolq $43, %zmm24, %zmm24 + vprolq $25, %zmm21, %zmm21 + vprolq $39, %zmm23, %zmm23 + vprolq $41, %zmm5, %zmm5 + vprolq $45, %zmm7, %zmm7 + vprolq $15, %zmm9, %zmm9 + vprolq $21, %zmm6, %zmm6 + vprolq $8, %zmm8, %zmm8 + vprolq $18, %zmm15, %zmm15 + vprolq $2, %zmm17, %zmm17 + vprolq $61, %zmm19, %zmm19 + vprolq $56, %zmm16, %zmm16 + vprolq $14, %zmm18, %zmm18 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm12, %zmm0 + vpternlogq $0xd2, %zmm6, %zmm24, %zmm12 + vpternlogq $0xd2, %zmm18, %zmm6, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm13, %zmm1 + vpternlogq $0xd2, %zmm7, %zmm20, %zmm13 + vpternlogq $0xd2, %zmm19, %zmm7, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm14, %zmm2 + vpternlogq $0xd2, %zmm8, %zmm21, %zmm14 + vpternlogq $0xd2, %zmm15, %zmm8, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm10, %zmm3 + vpternlogq $0xd2, %zmm9, %zmm22, %zmm10 + vpternlogq $0xd2, %zmm16, %zmm9, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm11, %zmm4 + vpternlogq $0xd2, %zmm5, %zmm23, %zmm11 + vpternlogq $0xd2, %zmm17, %zmm5, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + # Iota + vpxorq 384(%rdx), %zmm0, %zmm0 + # Round 7 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm2, %zmm1, %zmm25 + vpternlogq $0x96, %zmm4, %zmm3, %zmm25 + vmovdqu64 %zmm12, %zmm26 + vpternlogq $0x96, %zmm14, %zmm13, %zmm26 + vpternlogq $0x96, %zmm11, %zmm10, %zmm26 + vmovdqu64 %zmm24, %zmm27 + vpternlogq $0x96, %zmm21, %zmm20, %zmm27 + vpternlogq $0x96, %zmm23, %zmm22, %zmm27 + vmovdqu64 %zmm6, %zmm28 + vpternlogq $0x96, %zmm8, %zmm7, %zmm28 + vpternlogq $0x96, %zmm5, %zmm9, %zmm28 + vmovdqu64 %zmm18, %zmm29 + vpternlogq $0x96, %zmm15, %zmm19, %zmm29 + vpternlogq $0x96, %zmm17, %zmm16, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm17, %zmm17 + # Rho - rotate each lane in place + vprolq $0x01, %zmm12, %zmm12 + vprolq $62, %zmm24, %zmm24 + vprolq $28, %zmm6, %zmm6 + vprolq $27, %zmm18, %zmm18 + vprolq $36, %zmm1, %zmm1 + vprolq $44, %zmm13, %zmm13 + vprolq $6, %zmm20, %zmm20 + vprolq $55, %zmm7, %zmm7 + vprolq $20, %zmm19, %zmm19 + vprolq $3, %zmm2, %zmm2 + vprolq $10, %zmm14, %zmm14 + vprolq $43, %zmm21, %zmm21 + vprolq $25, %zmm8, %zmm8 + vprolq $39, %zmm15, %zmm15 + vprolq $41, %zmm3, %zmm3 + vprolq $45, %zmm10, %zmm10 + vprolq $15, %zmm22, %zmm22 + vprolq $21, %zmm9, %zmm9 + vprolq $8, %zmm16, %zmm16 + vprolq $18, %zmm4, %zmm4 + vprolq $2, %zmm11, %zmm11 + vprolq $61, %zmm23, %zmm23 + vprolq $56, %zmm5, %zmm5 + vprolq $14, %zmm17, %zmm17 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm13, %zmm0 + vpternlogq $0xd2, %zmm9, %zmm21, %zmm13 + vpternlogq $0xd2, %zmm17, %zmm9, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm19, %zmm6 + vpternlogq $0xd2, %zmm10, %zmm2, %zmm19 + vpternlogq $0xd2, %zmm23, %zmm10, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm20, %zmm12 + vpternlogq $0xd2, %zmm16, %zmm8, %zmm20 + vpternlogq $0xd2, %zmm4, %zmm16, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm1, %zmm18 + vpternlogq $0xd2, %zmm22, %zmm14, %zmm1 + vpternlogq $0xd2, %zmm5, %zmm22, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm7, %zmm24 + vpternlogq $0xd2, %zmm3, %zmm15, %zmm7 + vpternlogq $0xd2, %zmm11, %zmm3, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + # Iota + vpxorq 448(%rdx), %zmm0, %zmm0 + # Round 8 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm12, %zmm6, %zmm25 + vpternlogq $0x96, %zmm24, %zmm18, %zmm25 + vmovdqu64 %zmm13, %zmm26 + vpternlogq $0x96, %zmm20, %zmm19, %zmm26 + vpternlogq $0x96, %zmm7, %zmm1, %zmm26 + vmovdqu64 %zmm21, %zmm27 + vpternlogq $0x96, %zmm8, %zmm2, %zmm27 + vpternlogq $0x96, %zmm15, %zmm14, %zmm27 + vmovdqu64 %zmm9, %zmm28 + vpternlogq $0x96, %zmm16, %zmm10, %zmm28 + vpternlogq $0x96, %zmm3, %zmm22, %zmm28 + vmovdqu64 %zmm17, %zmm29 + vpternlogq $0x96, %zmm4, %zmm23, %zmm29 + vpternlogq $0x96, %zmm11, %zmm5, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm11, %zmm11 + # Rho - rotate each lane in place + vprolq $0x01, %zmm13, %zmm13 + vprolq $62, %zmm21, %zmm21 + vprolq $28, %zmm9, %zmm9 + vprolq $27, %zmm17, %zmm17 + vprolq $36, %zmm6, %zmm6 + vprolq $44, %zmm19, %zmm19 + vprolq $6, %zmm2, %zmm2 + vprolq $55, %zmm10, %zmm10 + vprolq $20, %zmm23, %zmm23 + vprolq $3, %zmm12, %zmm12 + vprolq $10, %zmm20, %zmm20 + vprolq $43, %zmm8, %zmm8 + vprolq $25, %zmm16, %zmm16 + vprolq $39, %zmm4, %zmm4 + vprolq $41, %zmm18, %zmm18 + vprolq $45, %zmm1, %zmm1 + vprolq $15, %zmm14, %zmm14 + vprolq $21, %zmm22, %zmm22 + vprolq $8, %zmm5, %zmm5 + vprolq $18, %zmm24, %zmm24 + vprolq $2, %zmm7, %zmm7 + vprolq $61, %zmm15, %zmm15 + vprolq $56, %zmm3, %zmm3 + vprolq $14, %zmm11, %zmm11 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm19, %zmm0 + vpternlogq $0xd2, %zmm22, %zmm8, %zmm19 + vpternlogq $0xd2, %zmm11, %zmm22, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm23, %zmm9 + vpternlogq $0xd2, %zmm1, %zmm12, %zmm23 + vpternlogq $0xd2, %zmm15, %zmm1, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm2, %zmm13 + vpternlogq $0xd2, %zmm5, %zmm16, %zmm2 + vpternlogq $0xd2, %zmm24, %zmm5, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm6, %zmm17 + vpternlogq $0xd2, %zmm14, %zmm20, %zmm6 + vpternlogq $0xd2, %zmm3, %zmm14, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm10, %zmm21 + vpternlogq $0xd2, %zmm18, %zmm4, %zmm10 + vpternlogq $0xd2, %zmm7, %zmm18, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + # Iota + vpxorq 512(%rdx), %zmm0, %zmm0 + # Round 9 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm13, %zmm9, %zmm25 + vpternlogq $0x96, %zmm21, %zmm17, %zmm25 + vmovdqu64 %zmm19, %zmm26 + vpternlogq $0x96, %zmm2, %zmm23, %zmm26 + vpternlogq $0x96, %zmm10, %zmm6, %zmm26 + vmovdqu64 %zmm8, %zmm27 + vpternlogq $0x96, %zmm16, %zmm12, %zmm27 + vpternlogq $0x96, %zmm4, %zmm20, %zmm27 + vmovdqu64 %zmm22, %zmm28 + vpternlogq $0x96, %zmm5, %zmm1, %zmm28 + vpternlogq $0x96, %zmm18, %zmm14, %zmm28 + vmovdqu64 %zmm11, %zmm29 + vpternlogq $0x96, %zmm24, %zmm15, %zmm29 + vpternlogq $0x96, %zmm7, %zmm3, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm7, %zmm7 + # Rho - rotate each lane in place + vprolq $0x01, %zmm19, %zmm19 + vprolq $62, %zmm8, %zmm8 + vprolq $28, %zmm22, %zmm22 + vprolq $27, %zmm11, %zmm11 + vprolq $36, %zmm9, %zmm9 + vprolq $44, %zmm23, %zmm23 + vprolq $6, %zmm12, %zmm12 + vprolq $55, %zmm1, %zmm1 + vprolq $20, %zmm15, %zmm15 + vprolq $3, %zmm13, %zmm13 + vprolq $10, %zmm2, %zmm2 + vprolq $43, %zmm16, %zmm16 + vprolq $25, %zmm5, %zmm5 + vprolq $39, %zmm24, %zmm24 + vprolq $41, %zmm17, %zmm17 + vprolq $45, %zmm6, %zmm6 + vprolq $15, %zmm20, %zmm20 + vprolq $21, %zmm14, %zmm14 + vprolq $8, %zmm3, %zmm3 + vprolq $18, %zmm21, %zmm21 + vprolq $2, %zmm10, %zmm10 + vprolq $61, %zmm4, %zmm4 + vprolq $56, %zmm18, %zmm18 + vprolq $14, %zmm7, %zmm7 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm23, %zmm0 + vpternlogq $0xd2, %zmm14, %zmm16, %zmm23 + vpternlogq $0xd2, %zmm7, %zmm14, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm15, %zmm22 + vpternlogq $0xd2, %zmm6, %zmm13, %zmm15 + vpternlogq $0xd2, %zmm4, %zmm6, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm12, %zmm19 + vpternlogq $0xd2, %zmm3, %zmm5, %zmm12 + vpternlogq $0xd2, %zmm21, %zmm3, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm9, %zmm11 + vpternlogq $0xd2, %zmm20, %zmm2, %zmm9 + vpternlogq $0xd2, %zmm18, %zmm20, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm1, %zmm8 + vpternlogq $0xd2, %zmm17, %zmm24, %zmm1 + vpternlogq $0xd2, %zmm10, %zmm17, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + # Iota + vpxorq 576(%rdx), %zmm0, %zmm0 + # Round 10 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm19, %zmm22, %zmm25 + vpternlogq $0x96, %zmm8, %zmm11, %zmm25 + vmovdqu64 %zmm23, %zmm26 + vpternlogq $0x96, %zmm12, %zmm15, %zmm26 + vpternlogq $0x96, %zmm1, %zmm9, %zmm26 + vmovdqu64 %zmm16, %zmm27 + vpternlogq $0x96, %zmm5, %zmm13, %zmm27 + vpternlogq $0x96, %zmm24, %zmm2, %zmm27 + vmovdqu64 %zmm14, %zmm28 + vpternlogq $0x96, %zmm3, %zmm6, %zmm28 + vpternlogq $0x96, %zmm17, %zmm20, %zmm28 + vmovdqu64 %zmm7, %zmm29 + vpternlogq $0x96, %zmm21, %zmm4, %zmm29 + vpternlogq $0x96, %zmm10, %zmm18, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm10, %zmm10 + # Rho - rotate each lane in place + vprolq $0x01, %zmm23, %zmm23 + vprolq $62, %zmm16, %zmm16 + vprolq $28, %zmm14, %zmm14 + vprolq $27, %zmm7, %zmm7 + vprolq $36, %zmm22, %zmm22 + vprolq $44, %zmm15, %zmm15 + vprolq $6, %zmm13, %zmm13 + vprolq $55, %zmm6, %zmm6 + vprolq $20, %zmm4, %zmm4 + vprolq $3, %zmm19, %zmm19 + vprolq $10, %zmm12, %zmm12 + vprolq $43, %zmm5, %zmm5 + vprolq $25, %zmm3, %zmm3 + vprolq $39, %zmm21, %zmm21 + vprolq $41, %zmm11, %zmm11 + vprolq $45, %zmm9, %zmm9 + vprolq $15, %zmm2, %zmm2 + vprolq $21, %zmm20, %zmm20 + vprolq $8, %zmm18, %zmm18 + vprolq $18, %zmm8, %zmm8 + vprolq $2, %zmm1, %zmm1 + vprolq $61, %zmm24, %zmm24 + vprolq $56, %zmm17, %zmm17 + vprolq $14, %zmm10, %zmm10 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm15, %zmm0 + vpternlogq $0xd2, %zmm20, %zmm5, %zmm15 + vpternlogq $0xd2, %zmm10, %zmm20, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm4, %zmm14 + vpternlogq $0xd2, %zmm9, %zmm19, %zmm4 + vpternlogq $0xd2, %zmm24, %zmm9, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm13, %zmm23 + vpternlogq $0xd2, %zmm18, %zmm3, %zmm13 + vpternlogq $0xd2, %zmm8, %zmm18, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm22, %zmm7 + vpternlogq $0xd2, %zmm2, %zmm12, %zmm22 + vpternlogq $0xd2, %zmm17, %zmm2, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm6, %zmm16 + vpternlogq $0xd2, %zmm11, %zmm21, %zmm6 + vpternlogq $0xd2, %zmm1, %zmm11, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + # Iota + vpxorq 640(%rdx), %zmm0, %zmm0 + # Round 11 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm23, %zmm14, %zmm25 + vpternlogq $0x96, %zmm16, %zmm7, %zmm25 + vmovdqu64 %zmm15, %zmm26 + vpternlogq $0x96, %zmm13, %zmm4, %zmm26 + vpternlogq $0x96, %zmm6, %zmm22, %zmm26 + vmovdqu64 %zmm5, %zmm27 + vpternlogq $0x96, %zmm3, %zmm19, %zmm27 + vpternlogq $0x96, %zmm21, %zmm12, %zmm27 + vmovdqu64 %zmm20, %zmm28 + vpternlogq $0x96, %zmm18, %zmm9, %zmm28 + vpternlogq $0x96, %zmm11, %zmm2, %zmm28 + vmovdqu64 %zmm10, %zmm29 + vpternlogq $0x96, %zmm8, %zmm24, %zmm29 + vpternlogq $0x96, %zmm1, %zmm17, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm1, %zmm1 + # Rho - rotate each lane in place + vprolq $0x01, %zmm15, %zmm15 + vprolq $62, %zmm5, %zmm5 + vprolq $28, %zmm20, %zmm20 + vprolq $27, %zmm10, %zmm10 + vprolq $36, %zmm14, %zmm14 + vprolq $44, %zmm4, %zmm4 + vprolq $6, %zmm19, %zmm19 + vprolq $55, %zmm9, %zmm9 + vprolq $20, %zmm24, %zmm24 + vprolq $3, %zmm23, %zmm23 + vprolq $10, %zmm13, %zmm13 + vprolq $43, %zmm3, %zmm3 + vprolq $25, %zmm18, %zmm18 + vprolq $39, %zmm8, %zmm8 + vprolq $41, %zmm7, %zmm7 + vprolq $45, %zmm22, %zmm22 + vprolq $15, %zmm12, %zmm12 + vprolq $21, %zmm2, %zmm2 + vprolq $8, %zmm17, %zmm17 + vprolq $18, %zmm16, %zmm16 + vprolq $2, %zmm6, %zmm6 + vprolq $61, %zmm21, %zmm21 + vprolq $56, %zmm11, %zmm11 + vprolq $14, %zmm1, %zmm1 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm4, %zmm0 + vpternlogq $0xd2, %zmm2, %zmm3, %zmm4 + vpternlogq $0xd2, %zmm1, %zmm2, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm24, %zmm20 + vpternlogq $0xd2, %zmm22, %zmm23, %zmm24 + vpternlogq $0xd2, %zmm21, %zmm22, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm19, %zmm15 + vpternlogq $0xd2, %zmm17, %zmm18, %zmm19 + vpternlogq $0xd2, %zmm16, %zmm17, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm14, %zmm10 + vpternlogq $0xd2, %zmm12, %zmm13, %zmm14 + vpternlogq $0xd2, %zmm11, %zmm12, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm9, %zmm5 + vpternlogq $0xd2, %zmm7, %zmm8, %zmm9 + vpternlogq $0xd2, %zmm6, %zmm7, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + # Iota + vpxorq 704(%rdx), %zmm0, %zmm0 + # Round 12 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm15, %zmm20, %zmm25 + vpternlogq $0x96, %zmm5, %zmm10, %zmm25 + vmovdqu64 %zmm4, %zmm26 + vpternlogq $0x96, %zmm19, %zmm24, %zmm26 + vpternlogq $0x96, %zmm9, %zmm14, %zmm26 + vmovdqu64 %zmm3, %zmm27 + vpternlogq $0x96, %zmm18, %zmm23, %zmm27 + vpternlogq $0x96, %zmm8, %zmm13, %zmm27 + vmovdqu64 %zmm2, %zmm28 + vpternlogq $0x96, %zmm17, %zmm22, %zmm28 + vpternlogq $0x96, %zmm7, %zmm12, %zmm28 + vmovdqu64 %zmm1, %zmm29 + vpternlogq $0x96, %zmm16, %zmm21, %zmm29 + vpternlogq $0x96, %zmm6, %zmm11, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm6, %zmm6 + # Rho - rotate each lane in place + vprolq $0x01, %zmm4, %zmm4 + vprolq $62, %zmm3, %zmm3 + vprolq $28, %zmm2, %zmm2 + vprolq $27, %zmm1, %zmm1 + vprolq $36, %zmm20, %zmm20 + vprolq $44, %zmm24, %zmm24 + vprolq $6, %zmm23, %zmm23 + vprolq $55, %zmm22, %zmm22 + vprolq $20, %zmm21, %zmm21 + vprolq $3, %zmm15, %zmm15 + vprolq $10, %zmm19, %zmm19 + vprolq $43, %zmm18, %zmm18 + vprolq $25, %zmm17, %zmm17 + vprolq $39, %zmm16, %zmm16 + vprolq $41, %zmm10, %zmm10 + vprolq $45, %zmm14, %zmm14 + vprolq $15, %zmm13, %zmm13 + vprolq $21, %zmm12, %zmm12 + vprolq $8, %zmm11, %zmm11 + vprolq $18, %zmm5, %zmm5 + vprolq $2, %zmm9, %zmm9 + vprolq $61, %zmm8, %zmm8 + vprolq $56, %zmm7, %zmm7 + vprolq $14, %zmm6, %zmm6 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm24, %zmm0 + vpternlogq $0xd2, %zmm12, %zmm18, %zmm24 + vpternlogq $0xd2, %zmm6, %zmm12, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm21, %zmm2 + vpternlogq $0xd2, %zmm14, %zmm15, %zmm21 + vpternlogq $0xd2, %zmm8, %zmm14, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm23, %zmm4 + vpternlogq $0xd2, %zmm11, %zmm17, %zmm23 + vpternlogq $0xd2, %zmm5, %zmm11, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm20, %zmm1 + vpternlogq $0xd2, %zmm13, %zmm19, %zmm20 + vpternlogq $0xd2, %zmm7, %zmm13, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm22, %zmm3 + vpternlogq $0xd2, %zmm10, %zmm16, %zmm22 + vpternlogq $0xd2, %zmm9, %zmm10, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + # Iota + vpxorq 768(%rdx), %zmm0, %zmm0 + # Round 13 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm4, %zmm2, %zmm25 + vpternlogq $0x96, %zmm3, %zmm1, %zmm25 + vmovdqu64 %zmm24, %zmm26 + vpternlogq $0x96, %zmm23, %zmm21, %zmm26 + vpternlogq $0x96, %zmm22, %zmm20, %zmm26 + vmovdqu64 %zmm18, %zmm27 + vpternlogq $0x96, %zmm17, %zmm15, %zmm27 + vpternlogq $0x96, %zmm16, %zmm19, %zmm27 + vmovdqu64 %zmm12, %zmm28 + vpternlogq $0x96, %zmm11, %zmm14, %zmm28 + vpternlogq $0x96, %zmm10, %zmm13, %zmm28 + vmovdqu64 %zmm6, %zmm29 + vpternlogq $0x96, %zmm5, %zmm8, %zmm29 + vpternlogq $0x96, %zmm9, %zmm7, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm9, %zmm9 + # Rho - rotate each lane in place + vprolq $0x01, %zmm24, %zmm24 + vprolq $62, %zmm18, %zmm18 + vprolq $28, %zmm12, %zmm12 + vprolq $27, %zmm6, %zmm6 + vprolq $36, %zmm2, %zmm2 + vprolq $44, %zmm21, %zmm21 + vprolq $6, %zmm15, %zmm15 + vprolq $55, %zmm14, %zmm14 + vprolq $20, %zmm8, %zmm8 + vprolq $3, %zmm4, %zmm4 + vprolq $10, %zmm23, %zmm23 + vprolq $43, %zmm17, %zmm17 + vprolq $25, %zmm11, %zmm11 + vprolq $39, %zmm5, %zmm5 + vprolq $41, %zmm1, %zmm1 + vprolq $45, %zmm20, %zmm20 + vprolq $15, %zmm19, %zmm19 + vprolq $21, %zmm13, %zmm13 + vprolq $8, %zmm7, %zmm7 + vprolq $18, %zmm3, %zmm3 + vprolq $2, %zmm22, %zmm22 + vprolq $61, %zmm16, %zmm16 + vprolq $56, %zmm10, %zmm10 + vprolq $14, %zmm9, %zmm9 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm21, %zmm0 + vpternlogq $0xd2, %zmm13, %zmm17, %zmm21 + vpternlogq $0xd2, %zmm9, %zmm13, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm8, %zmm12 + vpternlogq $0xd2, %zmm20, %zmm4, %zmm8 + vpternlogq $0xd2, %zmm16, %zmm20, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm15, %zmm24 + vpternlogq $0xd2, %zmm7, %zmm11, %zmm15 + vpternlogq $0xd2, %zmm3, %zmm7, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm2, %zmm6 + vpternlogq $0xd2, %zmm19, %zmm23, %zmm2 + vpternlogq $0xd2, %zmm10, %zmm19, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm14, %zmm18 + vpternlogq $0xd2, %zmm1, %zmm5, %zmm14 + vpternlogq $0xd2, %zmm22, %zmm1, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + # Iota + vpxorq 832(%rdx), %zmm0, %zmm0 + # Round 14 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm24, %zmm12, %zmm25 + vpternlogq $0x96, %zmm18, %zmm6, %zmm25 + vmovdqu64 %zmm21, %zmm26 + vpternlogq $0x96, %zmm15, %zmm8, %zmm26 + vpternlogq $0x96, %zmm14, %zmm2, %zmm26 + vmovdqu64 %zmm17, %zmm27 + vpternlogq $0x96, %zmm11, %zmm4, %zmm27 + vpternlogq $0x96, %zmm5, %zmm23, %zmm27 + vmovdqu64 %zmm13, %zmm28 + vpternlogq $0x96, %zmm7, %zmm20, %zmm28 + vpternlogq $0x96, %zmm1, %zmm19, %zmm28 + vmovdqu64 %zmm9, %zmm29 + vpternlogq $0x96, %zmm3, %zmm16, %zmm29 + vpternlogq $0x96, %zmm22, %zmm10, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm22, %zmm22 + # Rho - rotate each lane in place + vprolq $0x01, %zmm21, %zmm21 + vprolq $62, %zmm17, %zmm17 + vprolq $28, %zmm13, %zmm13 + vprolq $27, %zmm9, %zmm9 + vprolq $36, %zmm12, %zmm12 + vprolq $44, %zmm8, %zmm8 + vprolq $6, %zmm4, %zmm4 + vprolq $55, %zmm20, %zmm20 + vprolq $20, %zmm16, %zmm16 + vprolq $3, %zmm24, %zmm24 + vprolq $10, %zmm15, %zmm15 + vprolq $43, %zmm11, %zmm11 + vprolq $25, %zmm7, %zmm7 + vprolq $39, %zmm3, %zmm3 + vprolq $41, %zmm6, %zmm6 + vprolq $45, %zmm2, %zmm2 + vprolq $15, %zmm23, %zmm23 + vprolq $21, %zmm19, %zmm19 + vprolq $8, %zmm10, %zmm10 + vprolq $18, %zmm18, %zmm18 + vprolq $2, %zmm14, %zmm14 + vprolq $61, %zmm5, %zmm5 + vprolq $56, %zmm1, %zmm1 + vprolq $14, %zmm22, %zmm22 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm8, %zmm0 + vpternlogq $0xd2, %zmm19, %zmm11, %zmm8 + vpternlogq $0xd2, %zmm22, %zmm19, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm16, %zmm13 + vpternlogq $0xd2, %zmm2, %zmm24, %zmm16 + vpternlogq $0xd2, %zmm5, %zmm2, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm4, %zmm21 + vpternlogq $0xd2, %zmm10, %zmm7, %zmm4 + vpternlogq $0xd2, %zmm18, %zmm10, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm12, %zmm9 + vpternlogq $0xd2, %zmm23, %zmm15, %zmm12 + vpternlogq $0xd2, %zmm1, %zmm23, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm20, %zmm17 + vpternlogq $0xd2, %zmm6, %zmm3, %zmm20 + vpternlogq $0xd2, %zmm14, %zmm6, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + # Iota + vpxorq 896(%rdx), %zmm0, %zmm0 + # Round 15 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm21, %zmm13, %zmm25 + vpternlogq $0x96, %zmm17, %zmm9, %zmm25 + vmovdqu64 %zmm8, %zmm26 + vpternlogq $0x96, %zmm4, %zmm16, %zmm26 + vpternlogq $0x96, %zmm20, %zmm12, %zmm26 + vmovdqu64 %zmm11, %zmm27 + vpternlogq $0x96, %zmm7, %zmm24, %zmm27 + vpternlogq $0x96, %zmm3, %zmm15, %zmm27 + vmovdqu64 %zmm19, %zmm28 + vpternlogq $0x96, %zmm10, %zmm2, %zmm28 + vpternlogq $0x96, %zmm6, %zmm23, %zmm28 + vmovdqu64 %zmm22, %zmm29 + vpternlogq $0x96, %zmm18, %zmm5, %zmm29 + vpternlogq $0x96, %zmm14, %zmm1, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm14, %zmm14 + # Rho - rotate each lane in place + vprolq $0x01, %zmm8, %zmm8 + vprolq $62, %zmm11, %zmm11 + vprolq $28, %zmm19, %zmm19 + vprolq $27, %zmm22, %zmm22 + vprolq $36, %zmm13, %zmm13 + vprolq $44, %zmm16, %zmm16 + vprolq $6, %zmm24, %zmm24 + vprolq $55, %zmm2, %zmm2 + vprolq $20, %zmm5, %zmm5 + vprolq $3, %zmm21, %zmm21 + vprolq $10, %zmm4, %zmm4 + vprolq $43, %zmm7, %zmm7 + vprolq $25, %zmm10, %zmm10 + vprolq $39, %zmm18, %zmm18 + vprolq $41, %zmm9, %zmm9 + vprolq $45, %zmm12, %zmm12 + vprolq $15, %zmm15, %zmm15 + vprolq $21, %zmm23, %zmm23 + vprolq $8, %zmm1, %zmm1 + vprolq $18, %zmm17, %zmm17 + vprolq $2, %zmm20, %zmm20 + vprolq $61, %zmm3, %zmm3 + vprolq $56, %zmm6, %zmm6 + vprolq $14, %zmm14, %zmm14 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm16, %zmm0 + vpternlogq $0xd2, %zmm23, %zmm7, %zmm16 + vpternlogq $0xd2, %zmm14, %zmm23, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm5, %zmm19 + vpternlogq $0xd2, %zmm12, %zmm21, %zmm5 + vpternlogq $0xd2, %zmm3, %zmm12, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm24, %zmm8 + vpternlogq $0xd2, %zmm1, %zmm10, %zmm24 + vpternlogq $0xd2, %zmm17, %zmm1, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm13, %zmm22 + vpternlogq $0xd2, %zmm15, %zmm4, %zmm13 + vpternlogq $0xd2, %zmm6, %zmm15, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm2, %zmm11 + vpternlogq $0xd2, %zmm9, %zmm18, %zmm2 + vpternlogq $0xd2, %zmm20, %zmm9, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + # Iota + vpxorq 960(%rdx), %zmm0, %zmm0 + # Round 16 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm8, %zmm19, %zmm25 + vpternlogq $0x96, %zmm11, %zmm22, %zmm25 + vmovdqu64 %zmm16, %zmm26 + vpternlogq $0x96, %zmm24, %zmm5, %zmm26 + vpternlogq $0x96, %zmm2, %zmm13, %zmm26 + vmovdqu64 %zmm7, %zmm27 + vpternlogq $0x96, %zmm10, %zmm21, %zmm27 + vpternlogq $0x96, %zmm18, %zmm4, %zmm27 + vmovdqu64 %zmm23, %zmm28 + vpternlogq $0x96, %zmm1, %zmm12, %zmm28 + vpternlogq $0x96, %zmm9, %zmm15, %zmm28 + vmovdqu64 %zmm14, %zmm29 + vpternlogq $0x96, %zmm17, %zmm3, %zmm29 + vpternlogq $0x96, %zmm20, %zmm6, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm20, %zmm20 + # Rho - rotate each lane in place + vprolq $0x01, %zmm16, %zmm16 + vprolq $62, %zmm7, %zmm7 + vprolq $28, %zmm23, %zmm23 + vprolq $27, %zmm14, %zmm14 + vprolq $36, %zmm19, %zmm19 + vprolq $44, %zmm5, %zmm5 + vprolq $6, %zmm21, %zmm21 + vprolq $55, %zmm12, %zmm12 + vprolq $20, %zmm3, %zmm3 + vprolq $3, %zmm8, %zmm8 + vprolq $10, %zmm24, %zmm24 + vprolq $43, %zmm10, %zmm10 + vprolq $25, %zmm1, %zmm1 + vprolq $39, %zmm17, %zmm17 + vprolq $41, %zmm22, %zmm22 + vprolq $45, %zmm13, %zmm13 + vprolq $15, %zmm4, %zmm4 + vprolq $21, %zmm15, %zmm15 + vprolq $8, %zmm6, %zmm6 + vprolq $18, %zmm11, %zmm11 + vprolq $2, %zmm2, %zmm2 + vprolq $61, %zmm18, %zmm18 + vprolq $56, %zmm9, %zmm9 + vprolq $14, %zmm20, %zmm20 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm5, %zmm0 + vpternlogq $0xd2, %zmm15, %zmm10, %zmm5 + vpternlogq $0xd2, %zmm20, %zmm15, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm3, %zmm23 + vpternlogq $0xd2, %zmm13, %zmm8, %zmm3 + vpternlogq $0xd2, %zmm18, %zmm13, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm21, %zmm16 + vpternlogq $0xd2, %zmm6, %zmm1, %zmm21 + vpternlogq $0xd2, %zmm11, %zmm6, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm19, %zmm14 + vpternlogq $0xd2, %zmm4, %zmm24, %zmm19 + vpternlogq $0xd2, %zmm9, %zmm4, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm12, %zmm7 + vpternlogq $0xd2, %zmm22, %zmm17, %zmm12 + vpternlogq $0xd2, %zmm2, %zmm22, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + # Iota + vpxorq 1024(%rdx), %zmm0, %zmm0 + # Round 17 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm16, %zmm23, %zmm25 + vpternlogq $0x96, %zmm7, %zmm14, %zmm25 + vmovdqu64 %zmm5, %zmm26 + vpternlogq $0x96, %zmm21, %zmm3, %zmm26 + vpternlogq $0x96, %zmm12, %zmm19, %zmm26 + vmovdqu64 %zmm10, %zmm27 + vpternlogq $0x96, %zmm1, %zmm8, %zmm27 + vpternlogq $0x96, %zmm17, %zmm24, %zmm27 + vmovdqu64 %zmm15, %zmm28 + vpternlogq $0x96, %zmm6, %zmm13, %zmm28 + vpternlogq $0x96, %zmm22, %zmm4, %zmm28 + vmovdqu64 %zmm20, %zmm29 + vpternlogq $0x96, %zmm11, %zmm18, %zmm29 + vpternlogq $0x96, %zmm2, %zmm9, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm2, %zmm2 + # Rho - rotate each lane in place + vprolq $0x01, %zmm5, %zmm5 + vprolq $62, %zmm10, %zmm10 + vprolq $28, %zmm15, %zmm15 + vprolq $27, %zmm20, %zmm20 + vprolq $36, %zmm23, %zmm23 + vprolq $44, %zmm3, %zmm3 + vprolq $6, %zmm8, %zmm8 + vprolq $55, %zmm13, %zmm13 + vprolq $20, %zmm18, %zmm18 + vprolq $3, %zmm16, %zmm16 + vprolq $10, %zmm21, %zmm21 + vprolq $43, %zmm1, %zmm1 + vprolq $25, %zmm6, %zmm6 + vprolq $39, %zmm11, %zmm11 + vprolq $41, %zmm14, %zmm14 + vprolq $45, %zmm19, %zmm19 + vprolq $15, %zmm24, %zmm24 + vprolq $21, %zmm4, %zmm4 + vprolq $8, %zmm9, %zmm9 + vprolq $18, %zmm7, %zmm7 + vprolq $2, %zmm12, %zmm12 + vprolq $61, %zmm17, %zmm17 + vprolq $56, %zmm22, %zmm22 + vprolq $14, %zmm2, %zmm2 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm3, %zmm0 + vpternlogq $0xd2, %zmm4, %zmm1, %zmm3 + vpternlogq $0xd2, %zmm2, %zmm4, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm18, %zmm15 + vpternlogq $0xd2, %zmm19, %zmm16, %zmm18 + vpternlogq $0xd2, %zmm17, %zmm19, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm8, %zmm5 + vpternlogq $0xd2, %zmm9, %zmm6, %zmm8 + vpternlogq $0xd2, %zmm7, %zmm9, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm23, %zmm20 + vpternlogq $0xd2, %zmm24, %zmm21, %zmm23 + vpternlogq $0xd2, %zmm22, %zmm24, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm13, %zmm10 + vpternlogq $0xd2, %zmm14, %zmm11, %zmm13 + vpternlogq $0xd2, %zmm12, %zmm14, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + # Iota + vpxorq 1088(%rdx), %zmm0, %zmm0 + # Round 18 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm5, %zmm15, %zmm25 + vpternlogq $0x96, %zmm10, %zmm20, %zmm25 + vmovdqu64 %zmm3, %zmm26 + vpternlogq $0x96, %zmm8, %zmm18, %zmm26 + vpternlogq $0x96, %zmm13, %zmm23, %zmm26 + vmovdqu64 %zmm1, %zmm27 + vpternlogq $0x96, %zmm6, %zmm16, %zmm27 + vpternlogq $0x96, %zmm11, %zmm21, %zmm27 + vmovdqu64 %zmm4, %zmm28 + vpternlogq $0x96, %zmm9, %zmm19, %zmm28 + vpternlogq $0x96, %zmm14, %zmm24, %zmm28 + vmovdqu64 %zmm2, %zmm29 + vpternlogq $0x96, %zmm7, %zmm17, %zmm29 + vpternlogq $0x96, %zmm12, %zmm22, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm12, %zmm12 + # Rho - rotate each lane in place + vprolq $0x01, %zmm3, %zmm3 + vprolq $62, %zmm1, %zmm1 + vprolq $28, %zmm4, %zmm4 + vprolq $27, %zmm2, %zmm2 + vprolq $36, %zmm15, %zmm15 + vprolq $44, %zmm18, %zmm18 + vprolq $6, %zmm16, %zmm16 + vprolq $55, %zmm19, %zmm19 + vprolq $20, %zmm17, %zmm17 + vprolq $3, %zmm5, %zmm5 + vprolq $10, %zmm8, %zmm8 + vprolq $43, %zmm6, %zmm6 + vprolq $25, %zmm9, %zmm9 + vprolq $39, %zmm7, %zmm7 + vprolq $41, %zmm20, %zmm20 + vprolq $45, %zmm23, %zmm23 + vprolq $15, %zmm21, %zmm21 + vprolq $21, %zmm24, %zmm24 + vprolq $8, %zmm22, %zmm22 + vprolq $18, %zmm10, %zmm10 + vprolq $2, %zmm13, %zmm13 + vprolq $61, %zmm11, %zmm11 + vprolq $56, %zmm14, %zmm14 + vprolq $14, %zmm12, %zmm12 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm18, %zmm0 + vpternlogq $0xd2, %zmm24, %zmm6, %zmm18 + vpternlogq $0xd2, %zmm12, %zmm24, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm17, %zmm4 + vpternlogq $0xd2, %zmm23, %zmm5, %zmm17 + vpternlogq $0xd2, %zmm11, %zmm23, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm16, %zmm3 + vpternlogq $0xd2, %zmm22, %zmm9, %zmm16 + vpternlogq $0xd2, %zmm10, %zmm22, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm15, %zmm2 + vpternlogq $0xd2, %zmm21, %zmm8, %zmm15 + vpternlogq $0xd2, %zmm14, %zmm21, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm19, %zmm1 + vpternlogq $0xd2, %zmm20, %zmm7, %zmm19 + vpternlogq $0xd2, %zmm13, %zmm20, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + # Iota + vpxorq 1152(%rdx), %zmm0, %zmm0 + # Round 19 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm3, %zmm4, %zmm25 + vpternlogq $0x96, %zmm1, %zmm2, %zmm25 + vmovdqu64 %zmm18, %zmm26 + vpternlogq $0x96, %zmm16, %zmm17, %zmm26 + vpternlogq $0x96, %zmm19, %zmm15, %zmm26 + vmovdqu64 %zmm6, %zmm27 + vpternlogq $0x96, %zmm9, %zmm5, %zmm27 + vpternlogq $0x96, %zmm7, %zmm8, %zmm27 + vmovdqu64 %zmm24, %zmm28 + vpternlogq $0x96, %zmm22, %zmm23, %zmm28 + vpternlogq $0x96, %zmm20, %zmm21, %zmm28 + vmovdqu64 %zmm12, %zmm29 + vpternlogq $0x96, %zmm10, %zmm11, %zmm29 + vpternlogq $0x96, %zmm13, %zmm14, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm13, %zmm13 + # Rho - rotate each lane in place + vprolq $0x01, %zmm18, %zmm18 + vprolq $62, %zmm6, %zmm6 + vprolq $28, %zmm24, %zmm24 + vprolq $27, %zmm12, %zmm12 + vprolq $36, %zmm4, %zmm4 + vprolq $44, %zmm17, %zmm17 + vprolq $6, %zmm5, %zmm5 + vprolq $55, %zmm23, %zmm23 + vprolq $20, %zmm11, %zmm11 + vprolq $3, %zmm3, %zmm3 + vprolq $10, %zmm16, %zmm16 + vprolq $43, %zmm9, %zmm9 + vprolq $25, %zmm22, %zmm22 + vprolq $39, %zmm10, %zmm10 + vprolq $41, %zmm2, %zmm2 + vprolq $45, %zmm15, %zmm15 + vprolq $15, %zmm8, %zmm8 + vprolq $21, %zmm21, %zmm21 + vprolq $8, %zmm14, %zmm14 + vprolq $18, %zmm1, %zmm1 + vprolq $2, %zmm19, %zmm19 + vprolq $61, %zmm7, %zmm7 + vprolq $56, %zmm20, %zmm20 + vprolq $14, %zmm13, %zmm13 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm17, %zmm0 + vpternlogq $0xd2, %zmm21, %zmm9, %zmm17 + vpternlogq $0xd2, %zmm13, %zmm21, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm11, %zmm24 + vpternlogq $0xd2, %zmm15, %zmm3, %zmm11 + vpternlogq $0xd2, %zmm7, %zmm15, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm5, %zmm18 + vpternlogq $0xd2, %zmm14, %zmm22, %zmm5 + vpternlogq $0xd2, %zmm1, %zmm14, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm4, %zmm12 + vpternlogq $0xd2, %zmm8, %zmm16, %zmm4 + vpternlogq $0xd2, %zmm20, %zmm8, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm23, %zmm6 + vpternlogq $0xd2, %zmm2, %zmm10, %zmm23 + vpternlogq $0xd2, %zmm19, %zmm2, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + # Iota + vpxorq 1216(%rdx), %zmm0, %zmm0 + # Round 20 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm18, %zmm24, %zmm25 + vpternlogq $0x96, %zmm6, %zmm12, %zmm25 + vmovdqu64 %zmm17, %zmm26 + vpternlogq $0x96, %zmm5, %zmm11, %zmm26 + vpternlogq $0x96, %zmm23, %zmm4, %zmm26 + vmovdqu64 %zmm9, %zmm27 + vpternlogq $0x96, %zmm22, %zmm3, %zmm27 + vpternlogq $0x96, %zmm10, %zmm16, %zmm27 + vmovdqu64 %zmm21, %zmm28 + vpternlogq $0x96, %zmm14, %zmm15, %zmm28 + vpternlogq $0x96, %zmm2, %zmm8, %zmm28 + vmovdqu64 %zmm13, %zmm29 + vpternlogq $0x96, %zmm1, %zmm7, %zmm29 + vpternlogq $0x96, %zmm19, %zmm20, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm19, %zmm19 + # Rho - rotate each lane in place + vprolq $0x01, %zmm17, %zmm17 + vprolq $62, %zmm9, %zmm9 + vprolq $28, %zmm21, %zmm21 + vprolq $27, %zmm13, %zmm13 + vprolq $36, %zmm24, %zmm24 + vprolq $44, %zmm11, %zmm11 + vprolq $6, %zmm3, %zmm3 + vprolq $55, %zmm15, %zmm15 + vprolq $20, %zmm7, %zmm7 + vprolq $3, %zmm18, %zmm18 + vprolq $10, %zmm5, %zmm5 + vprolq $43, %zmm22, %zmm22 + vprolq $25, %zmm14, %zmm14 + vprolq $39, %zmm1, %zmm1 + vprolq $41, %zmm12, %zmm12 + vprolq $45, %zmm4, %zmm4 + vprolq $15, %zmm16, %zmm16 + vprolq $21, %zmm8, %zmm8 + vprolq $8, %zmm20, %zmm20 + vprolq $18, %zmm6, %zmm6 + vprolq $2, %zmm23, %zmm23 + vprolq $61, %zmm10, %zmm10 + vprolq $56, %zmm2, %zmm2 + vprolq $14, %zmm19, %zmm19 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm11, %zmm0 + vpternlogq $0xd2, %zmm8, %zmm22, %zmm11 + vpternlogq $0xd2, %zmm19, %zmm8, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm7, %zmm21 + vpternlogq $0xd2, %zmm4, %zmm18, %zmm7 + vpternlogq $0xd2, %zmm10, %zmm4, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm3, %zmm17 + vpternlogq $0xd2, %zmm20, %zmm14, %zmm3 + vpternlogq $0xd2, %zmm6, %zmm20, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm24, %zmm13 + vpternlogq $0xd2, %zmm16, %zmm5, %zmm24 + vpternlogq $0xd2, %zmm2, %zmm16, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm15, %zmm9 + vpternlogq $0xd2, %zmm12, %zmm1, %zmm15 + vpternlogq $0xd2, %zmm23, %zmm12, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + # Iota + vpxorq 1280(%rdx), %zmm0, %zmm0 + # Round 21 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm17, %zmm21, %zmm25 + vpternlogq $0x96, %zmm9, %zmm13, %zmm25 + vmovdqu64 %zmm11, %zmm26 + vpternlogq $0x96, %zmm3, %zmm7, %zmm26 + vpternlogq $0x96, %zmm15, %zmm24, %zmm26 + vmovdqu64 %zmm22, %zmm27 + vpternlogq $0x96, %zmm14, %zmm18, %zmm27 + vpternlogq $0x96, %zmm1, %zmm5, %zmm27 + vmovdqu64 %zmm8, %zmm28 + vpternlogq $0x96, %zmm20, %zmm4, %zmm28 + vpternlogq $0x96, %zmm12, %zmm16, %zmm28 + vmovdqu64 %zmm19, %zmm29 + vpternlogq $0x96, %zmm6, %zmm10, %zmm29 + vpternlogq $0x96, %zmm23, %zmm2, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm23, %zmm23 + # Rho - rotate each lane in place + vprolq $0x01, %zmm11, %zmm11 + vprolq $62, %zmm22, %zmm22 + vprolq $28, %zmm8, %zmm8 + vprolq $27, %zmm19, %zmm19 + vprolq $36, %zmm21, %zmm21 + vprolq $44, %zmm7, %zmm7 + vprolq $6, %zmm18, %zmm18 + vprolq $55, %zmm4, %zmm4 + vprolq $20, %zmm10, %zmm10 + vprolq $3, %zmm17, %zmm17 + vprolq $10, %zmm3, %zmm3 + vprolq $43, %zmm14, %zmm14 + vprolq $25, %zmm20, %zmm20 + vprolq $39, %zmm6, %zmm6 + vprolq $41, %zmm13, %zmm13 + vprolq $45, %zmm24, %zmm24 + vprolq $15, %zmm5, %zmm5 + vprolq $21, %zmm16, %zmm16 + vprolq $8, %zmm2, %zmm2 + vprolq $18, %zmm9, %zmm9 + vprolq $2, %zmm15, %zmm15 + vprolq $61, %zmm1, %zmm1 + vprolq $56, %zmm12, %zmm12 + vprolq $14, %zmm23, %zmm23 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm7, %zmm0 + vpternlogq $0xd2, %zmm16, %zmm14, %zmm7 + vpternlogq $0xd2, %zmm23, %zmm16, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm10, %zmm8 + vpternlogq $0xd2, %zmm24, %zmm17, %zmm10 + vpternlogq $0xd2, %zmm1, %zmm24, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm18, %zmm11 + vpternlogq $0xd2, %zmm2, %zmm20, %zmm18 + vpternlogq $0xd2, %zmm9, %zmm2, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm21, %zmm19 + vpternlogq $0xd2, %zmm5, %zmm3, %zmm21 + vpternlogq $0xd2, %zmm12, %zmm5, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm4, %zmm22 + vpternlogq $0xd2, %zmm13, %zmm6, %zmm4 + vpternlogq $0xd2, %zmm15, %zmm13, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + # Iota + vpxorq 1344(%rdx), %zmm0, %zmm0 + # Round 22 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm11, %zmm8, %zmm25 + vpternlogq $0x96, %zmm22, %zmm19, %zmm25 + vmovdqu64 %zmm7, %zmm26 + vpternlogq $0x96, %zmm18, %zmm10, %zmm26 + vpternlogq $0x96, %zmm4, %zmm21, %zmm26 + vmovdqu64 %zmm14, %zmm27 + vpternlogq $0x96, %zmm20, %zmm17, %zmm27 + vpternlogq $0x96, %zmm6, %zmm3, %zmm27 + vmovdqu64 %zmm16, %zmm28 + vpternlogq $0x96, %zmm2, %zmm24, %zmm28 + vpternlogq $0x96, %zmm13, %zmm5, %zmm28 + vmovdqu64 %zmm23, %zmm29 + vpternlogq $0x96, %zmm9, %zmm1, %zmm29 + vpternlogq $0x96, %zmm15, %zmm12, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm15, %zmm15 + # Rho - rotate each lane in place + vprolq $0x01, %zmm7, %zmm7 + vprolq $62, %zmm14, %zmm14 + vprolq $28, %zmm16, %zmm16 + vprolq $27, %zmm23, %zmm23 + vprolq $36, %zmm8, %zmm8 + vprolq $44, %zmm10, %zmm10 + vprolq $6, %zmm17, %zmm17 + vprolq $55, %zmm24, %zmm24 + vprolq $20, %zmm1, %zmm1 + vprolq $3, %zmm11, %zmm11 + vprolq $10, %zmm18, %zmm18 + vprolq $43, %zmm20, %zmm20 + vprolq $25, %zmm2, %zmm2 + vprolq $39, %zmm9, %zmm9 + vprolq $41, %zmm19, %zmm19 + vprolq $45, %zmm21, %zmm21 + vprolq $15, %zmm3, %zmm3 + vprolq $21, %zmm5, %zmm5 + vprolq $8, %zmm12, %zmm12 + vprolq $18, %zmm22, %zmm22 + vprolq $2, %zmm4, %zmm4 + vprolq $61, %zmm6, %zmm6 + vprolq $56, %zmm13, %zmm13 + vprolq $14, %zmm15, %zmm15 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm10, %zmm0 + vpternlogq $0xd2, %zmm5, %zmm20, %zmm10 + vpternlogq $0xd2, %zmm15, %zmm5, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm1, %zmm16 + vpternlogq $0xd2, %zmm21, %zmm11, %zmm1 + vpternlogq $0xd2, %zmm6, %zmm21, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm17, %zmm7 + vpternlogq $0xd2, %zmm12, %zmm2, %zmm17 + vpternlogq $0xd2, %zmm22, %zmm12, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm8, %zmm23 + vpternlogq $0xd2, %zmm3, %zmm18, %zmm8 + vpternlogq $0xd2, %zmm13, %zmm3, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm24, %zmm14 + vpternlogq $0xd2, %zmm19, %zmm9, %zmm24 + vpternlogq $0xd2, %zmm4, %zmm19, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + # Iota + vpxorq 1408(%rdx), %zmm0, %zmm0 + # Round 23 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm7, %zmm16, %zmm25 + vpternlogq $0x96, %zmm14, %zmm23, %zmm25 + vmovdqu64 %zmm10, %zmm26 + vpternlogq $0x96, %zmm17, %zmm1, %zmm26 + vpternlogq $0x96, %zmm24, %zmm8, %zmm26 + vmovdqu64 %zmm20, %zmm27 + vpternlogq $0x96, %zmm2, %zmm11, %zmm27 + vpternlogq $0x96, %zmm9, %zmm18, %zmm27 + vmovdqu64 %zmm5, %zmm28 + vpternlogq $0x96, %zmm12, %zmm21, %zmm28 + vpternlogq $0x96, %zmm19, %zmm3, %zmm28 + vmovdqu64 %zmm15, %zmm29 + vpternlogq $0x96, %zmm22, %zmm6, %zmm29 + vpternlogq $0x96, %zmm4, %zmm13, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm4, %zmm4 + # Rho - rotate each lane in place + vprolq $0x01, %zmm10, %zmm10 + vprolq $62, %zmm20, %zmm20 + vprolq $28, %zmm5, %zmm5 + vprolq $27, %zmm15, %zmm15 + vprolq $36, %zmm16, %zmm16 + vprolq $44, %zmm1, %zmm1 + vprolq $6, %zmm11, %zmm11 + vprolq $55, %zmm21, %zmm21 + vprolq $20, %zmm6, %zmm6 + vprolq $3, %zmm7, %zmm7 + vprolq $10, %zmm17, %zmm17 + vprolq $43, %zmm2, %zmm2 + vprolq $25, %zmm12, %zmm12 + vprolq $39, %zmm22, %zmm22 + vprolq $41, %zmm23, %zmm23 + vprolq $45, %zmm8, %zmm8 + vprolq $15, %zmm18, %zmm18 + vprolq $21, %zmm3, %zmm3 + vprolq $8, %zmm13, %zmm13 + vprolq $18, %zmm14, %zmm14 + vprolq $2, %zmm24, %zmm24 + vprolq $61, %zmm9, %zmm9 + vprolq $56, %zmm19, %zmm19 + vprolq $14, %zmm4, %zmm4 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm1, %zmm0 + vpternlogq $0xd2, %zmm3, %zmm2, %zmm1 + vpternlogq $0xd2, %zmm4, %zmm3, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm6, %zmm5 + vpternlogq $0xd2, %zmm8, %zmm7, %zmm6 + vpternlogq $0xd2, %zmm9, %zmm8, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm11, %zmm10 + vpternlogq $0xd2, %zmm13, %zmm12, %zmm11 + vpternlogq $0xd2, %zmm14, %zmm13, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm16, %zmm15 + vpternlogq $0xd2, %zmm18, %zmm17, %zmm16 + vpternlogq $0xd2, %zmm19, %zmm18, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm21, %zmm20 + vpternlogq $0xd2, %zmm23, %zmm22, %zmm21 + vpternlogq $0xd2, %zmm24, %zmm23, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + # Iota + vpxorq 1472(%rdx), %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vmovdqu64 %zmm16, 1024(%rdi) + vmovdqu64 %zmm17, 1088(%rdi) + vmovdqu64 %zmm18, 1152(%rdi) + vmovdqu64 %zmm19, 1216(%rdi) + vmovdqu64 %zmm20, 1280(%rdi) + vmovdqu64 %zmm21, 1344(%rdi) + vmovdqu64 %zmm22, 1408(%rdi) + vmovdqu64 %zmm23, 1472(%rdi) + vmovdqu64 %zmm24, 1536(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size sha3_256_blocksx8_seed_64_avx512,.-sha3_256_blocksx8_seed_64_avx512 +#endif /* __APPLE__ */ +#endif /* WOLFSSL_HAVE_MLDSA */ #endif /* HAVE_INTEL_AVX512 */ #endif /* HAVE_INTEL_AVX2 */ diff --git a/wolfcrypt/src/sha3_asm.asm b/wolfcrypt/src/sha3_asm.asm index e6731c7f0c..1f023db1ed 100644 --- a/wolfcrypt/src/sha3_asm.asm +++ b/wolfcrypt/src/sha3_asm.asm @@ -36886,6 +36886,9 @@ ENDIF IFDEF WOLFSSL_HAVE_MLKEM wc_masm_cond_2 = 1 ENDIF +IFDEF WOLFSSL_HAVE_MLDSA +wc_masm_cond_2 = 1 +ENDIF IF wc_masm_cond_2 _DATA SEGMENT ALIGN 16 @@ -39944,7 +39947,14 @@ L_sha3_blocksx8_out_avx512_done: sha3_blocksx8_out_avx512 ENDP _TEXT ENDS ENDIF +wc_masm_cond_3 = 0 IFDEF WOLFSSL_HAVE_MLKEM +wc_masm_cond_3 = 1 +ENDIF +IFDEF WOLFSSL_HAVE_MLDSA +wc_masm_cond_3 = 1 +ENDIF +IF wc_masm_cond_3 _TEXT SEGMENT READONLY PARA sha3_blocksx8_avx512 PROC sub rsp, 168 @@ -45727,6 +45737,8 @@ sha3_128_blocksx8_seed_avx512 PROC ret sha3_128_blocksx8_seed_avx512 ENDP _TEXT ENDS +ENDIF +IFDEF WOLFSSL_HAVE_MLKEM _DATA SEGMENT ALIGN 16 L_sha3_256_blocksx8_seed_avx512_end_mark QWORD 8000000000000000h, 8000000000000000h @@ -48623,6 +48635,2903 @@ sha3_256_blocksx8_seed_avx512 PROC sha3_256_blocksx8_seed_avx512 ENDP _TEXT ENDS ENDIF +IFDEF WOLFSSL_HAVE_MLDSA +_DATA SEGMENT +ALIGN 16 +L_sha3_256_blocksx8_seed_64_avx512_end_mark QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h +ptr_L_sha3_256_blocksx8_seed_64_avx512_end_mark QWORD L_sha3_256_blocksx8_seed_64_avx512_end_mark +_DATA ENDS +_TEXT SEGMENT READONLY PARA +sha3_256_blocksx8_seed_64_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, QWORD PTR [ptr_L_sha3_x8_avx512_r] + vpbroadcastq zmm0, QWORD PTR [rdx] + vpbroadcastq zmm1, QWORD PTR [rdx+8] + vpbroadcastq zmm2, QWORD PTR [rdx+16] + vpbroadcastq zmm3, QWORD PTR [rdx+24] + vpbroadcastq zmm4, QWORD PTR [rdx+32] + vpbroadcastq zmm5, QWORD PTR [rdx+40] + vpbroadcastq zmm6, QWORD PTR [rdx+48] + vpbroadcastq zmm7, QWORD PTR [rdx+56] + vmovdqu64 zmm8, [rcx+512] + vpxorq zmm9, zmm9, zmm9 + vmovdqu64 zmm10, zmm9 + vmovdqu64 zmm11, zmm9 + vmovdqu64 zmm12, zmm9 + vmovdqu64 zmm13, zmm9 + vmovdqu64 zmm14, zmm9 + vmovdqu64 zmm15, zmm9 + vmovdqu64 zmm16, ZMMWORD PTR L_sha3_256_blocksx8_seed_64_avx512_end_mark + vmovdqu64 zmm17, zmm9 + vmovdqu64 zmm18, zmm9 + vmovdqu64 zmm19, zmm9 + vmovdqu64 zmm20, zmm9 + vmovdqu64 zmm21, zmm9 + vmovdqu64 zmm22, zmm9 + vmovdqu64 zmm23, zmm9 + vmovdqu64 zmm24, zmm9 + ; Round 0 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm5, zmm10, 150 + vpternlogq zmm25, zmm15, zmm20, 150 + vmovdqu64 zmm26, zmm1 + vpternlogq zmm26, zmm6, zmm11, 150 + vpternlogq zmm26, zmm16, zmm21, 150 + vmovdqu64 zmm27, zmm2 + vpternlogq zmm27, zmm7, zmm12, 150 + vpternlogq zmm27, zmm17, zmm22, 150 + vmovdqu64 zmm28, zmm3 + vpternlogq zmm28, zmm8, zmm13, 150 + vpternlogq zmm28, zmm18, zmm23, 150 + vmovdqu64 zmm29, zmm4 + vpternlogq zmm29, zmm9, zmm14, 150 + vpternlogq zmm29, zmm19, zmm24, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm24, zmm24, zmm30 + ; Rho - rotate each lane in place + vprolq zmm1, zmm1, 1 + vprolq zmm2, zmm2, 62 + vprolq zmm3, zmm3, 28 + vprolq zmm4, zmm4, 27 + vprolq zmm5, zmm5, 36 + vprolq zmm6, zmm6, 44 + vprolq zmm7, zmm7, 6 + vprolq zmm8, zmm8, 55 + vprolq zmm9, zmm9, 20 + vprolq zmm10, zmm10, 3 + vprolq zmm11, zmm11, 10 + vprolq zmm12, zmm12, 43 + vprolq zmm13, zmm13, 25 + vprolq zmm14, zmm14, 39 + vprolq zmm15, zmm15, 41 + vprolq zmm16, zmm16, 45 + vprolq zmm17, zmm17, 15 + vprolq zmm18, zmm18, 21 + vprolq zmm19, zmm19, 8 + vprolq zmm20, zmm20, 18 + vprolq zmm21, zmm21, 2 + vprolq zmm22, zmm22, 61 + vprolq zmm23, zmm23, 56 + vprolq zmm24, zmm24, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm0, zmm6, zmm12, 210 + vpternlogq zmm6, zmm12, zmm18, 210 + vpternlogq zmm12, zmm18, zmm24, 210 + vpternlogq zmm18, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm3, zmm9, zmm10, 210 + vpternlogq zmm9, zmm10, zmm16, 210 + vpternlogq zmm10, zmm16, zmm22, 210 + vpternlogq zmm16, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm1, zmm7, zmm13, 210 + vpternlogq zmm7, zmm13, zmm19, 210 + vpternlogq zmm13, zmm19, zmm20, 210 + vpternlogq zmm19, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm4, zmm5, zmm11, 210 + vpternlogq zmm5, zmm11, zmm17, 210 + vpternlogq zmm11, zmm17, zmm23, 210 + vpternlogq zmm17, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm2, zmm8, zmm14, 210 + vpternlogq zmm8, zmm14, zmm15, 210 + vpternlogq zmm14, zmm15, zmm21, 210 + vpternlogq zmm15, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax] + ; Round 1 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm3, zmm1, 150 + vpternlogq zmm25, zmm4, zmm2, 150 + vmovdqu64 zmm26, zmm6 + vpternlogq zmm26, zmm9, zmm7, 150 + vpternlogq zmm26, zmm5, zmm8, 150 + vmovdqu64 zmm27, zmm12 + vpternlogq zmm27, zmm10, zmm13, 150 + vpternlogq zmm27, zmm11, zmm14, 150 + vmovdqu64 zmm28, zmm18 + vpternlogq zmm28, zmm16, zmm19, 150 + vpternlogq zmm28, zmm17, zmm15, 150 + vmovdqu64 zmm29, zmm24 + vpternlogq zmm29, zmm22, zmm20, 150 + vpternlogq zmm29, zmm23, zmm21, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm21, zmm21, zmm30 + ; Rho - rotate each lane in place + vprolq zmm6, zmm6, 1 + vprolq zmm12, zmm12, 62 + vprolq zmm18, zmm18, 28 + vprolq zmm24, zmm24, 27 + vprolq zmm3, zmm3, 36 + vprolq zmm9, zmm9, 44 + vprolq zmm10, zmm10, 6 + vprolq zmm16, zmm16, 55 + vprolq zmm22, zmm22, 20 + vprolq zmm1, zmm1, 3 + vprolq zmm7, zmm7, 10 + vprolq zmm13, zmm13, 43 + vprolq zmm19, zmm19, 25 + vprolq zmm20, zmm20, 39 + vprolq zmm4, zmm4, 41 + vprolq zmm5, zmm5, 45 + vprolq zmm11, zmm11, 15 + vprolq zmm17, zmm17, 21 + vprolq zmm23, zmm23, 8 + vprolq zmm2, zmm2, 18 + vprolq zmm8, zmm8, 2 + vprolq zmm14, zmm14, 61 + vprolq zmm15, zmm15, 56 + vprolq zmm21, zmm21, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm0, zmm9, zmm13, 210 + vpternlogq zmm9, zmm13, zmm17, 210 + vpternlogq zmm13, zmm17, zmm21, 210 + vpternlogq zmm17, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm18, zmm22, zmm1, 210 + vpternlogq zmm22, zmm1, zmm5, 210 + vpternlogq zmm1, zmm5, zmm14, 210 + vpternlogq zmm5, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm6, zmm10, zmm19, 210 + vpternlogq zmm10, zmm19, zmm23, 210 + vpternlogq zmm19, zmm23, zmm2, 210 + vpternlogq zmm23, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm24, zmm3, zmm7, 210 + vpternlogq zmm3, zmm7, zmm11, 210 + vpternlogq zmm7, zmm11, zmm15, 210 + vpternlogq zmm11, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm12, zmm16, zmm20, 210 + vpternlogq zmm16, zmm20, zmm4, 210 + vpternlogq zmm20, zmm4, zmm8, 210 + vpternlogq zmm4, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+64] + ; Round 2 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm18, zmm6, 150 + vpternlogq zmm25, zmm24, zmm12, 150 + vmovdqu64 zmm26, zmm9 + vpternlogq zmm26, zmm22, zmm10, 150 + vpternlogq zmm26, zmm3, zmm16, 150 + vmovdqu64 zmm27, zmm13 + vpternlogq zmm27, zmm1, zmm19, 150 + vpternlogq zmm27, zmm7, zmm20, 150 + vmovdqu64 zmm28, zmm17 + vpternlogq zmm28, zmm5, zmm23, 150 + vpternlogq zmm28, zmm11, zmm4, 150 + vmovdqu64 zmm29, zmm21 + vpternlogq zmm29, zmm14, zmm2, 150 + vpternlogq zmm29, zmm15, zmm8, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm8, zmm8, zmm30 + ; Rho - rotate each lane in place + vprolq zmm9, zmm9, 1 + vprolq zmm13, zmm13, 62 + vprolq zmm17, zmm17, 28 + vprolq zmm21, zmm21, 27 + vprolq zmm18, zmm18, 36 + vprolq zmm22, zmm22, 44 + vprolq zmm1, zmm1, 6 + vprolq zmm5, zmm5, 55 + vprolq zmm14, zmm14, 20 + vprolq zmm6, zmm6, 3 + vprolq zmm10, zmm10, 10 + vprolq zmm19, zmm19, 43 + vprolq zmm23, zmm23, 25 + vprolq zmm2, zmm2, 39 + vprolq zmm24, zmm24, 41 + vprolq zmm3, zmm3, 45 + vprolq zmm7, zmm7, 15 + vprolq zmm11, zmm11, 21 + vprolq zmm15, zmm15, 8 + vprolq zmm12, zmm12, 18 + vprolq zmm16, zmm16, 2 + vprolq zmm20, zmm20, 61 + vprolq zmm4, zmm4, 56 + vprolq zmm8, zmm8, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm0, zmm22, zmm19, 210 + vpternlogq zmm22, zmm19, zmm11, 210 + vpternlogq zmm19, zmm11, zmm8, 210 + vpternlogq zmm11, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm17, zmm14, zmm6, 210 + vpternlogq zmm14, zmm6, zmm3, 210 + vpternlogq zmm6, zmm3, zmm20, 210 + vpternlogq zmm3, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm9, zmm1, zmm23, 210 + vpternlogq zmm1, zmm23, zmm15, 210 + vpternlogq zmm23, zmm15, zmm12, 210 + vpternlogq zmm15, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm21, zmm18, zmm10, 210 + vpternlogq zmm18, zmm10, zmm7, 210 + vpternlogq zmm10, zmm7, zmm4, 210 + vpternlogq zmm7, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm13, zmm5, zmm2, 210 + vpternlogq zmm5, zmm2, zmm24, 210 + vpternlogq zmm2, zmm24, zmm16, 210 + vpternlogq zmm24, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+128] + ; Round 3 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm17, zmm9, 150 + vpternlogq zmm25, zmm21, zmm13, 150 + vmovdqu64 zmm26, zmm22 + vpternlogq zmm26, zmm14, zmm1, 150 + vpternlogq zmm26, zmm18, zmm5, 150 + vmovdqu64 zmm27, zmm19 + vpternlogq zmm27, zmm6, zmm23, 150 + vpternlogq zmm27, zmm10, zmm2, 150 + vmovdqu64 zmm28, zmm11 + vpternlogq zmm28, zmm3, zmm15, 150 + vpternlogq zmm28, zmm7, zmm24, 150 + vmovdqu64 zmm29, zmm8 + vpternlogq zmm29, zmm20, zmm12, 150 + vpternlogq zmm29, zmm4, zmm16, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm16, zmm16, zmm30 + ; Rho - rotate each lane in place + vprolq zmm22, zmm22, 1 + vprolq zmm19, zmm19, 62 + vprolq zmm11, zmm11, 28 + vprolq zmm8, zmm8, 27 + vprolq zmm17, zmm17, 36 + vprolq zmm14, zmm14, 44 + vprolq zmm6, zmm6, 6 + vprolq zmm3, zmm3, 55 + vprolq zmm20, zmm20, 20 + vprolq zmm9, zmm9, 3 + vprolq zmm1, zmm1, 10 + vprolq zmm23, zmm23, 43 + vprolq zmm15, zmm15, 25 + vprolq zmm12, zmm12, 39 + vprolq zmm21, zmm21, 41 + vprolq zmm18, zmm18, 45 + vprolq zmm10, zmm10, 15 + vprolq zmm7, zmm7, 21 + vprolq zmm4, zmm4, 8 + vprolq zmm13, zmm13, 18 + vprolq zmm5, zmm5, 2 + vprolq zmm2, zmm2, 61 + vprolq zmm24, zmm24, 56 + vprolq zmm16, zmm16, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm0, zmm14, zmm23, 210 + vpternlogq zmm14, zmm23, zmm7, 210 + vpternlogq zmm23, zmm7, zmm16, 210 + vpternlogq zmm7, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm11, zmm20, zmm9, 210 + vpternlogq zmm20, zmm9, zmm18, 210 + vpternlogq zmm9, zmm18, zmm2, 210 + vpternlogq zmm18, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm22, zmm6, zmm15, 210 + vpternlogq zmm6, zmm15, zmm4, 210 + vpternlogq zmm15, zmm4, zmm13, 210 + vpternlogq zmm4, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm8, zmm17, zmm1, 210 + vpternlogq zmm17, zmm1, zmm10, 210 + vpternlogq zmm1, zmm10, zmm24, 210 + vpternlogq zmm10, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm19, zmm3, zmm12, 210 + vpternlogq zmm3, zmm12, zmm21, 210 + vpternlogq zmm12, zmm21, zmm5, 210 + vpternlogq zmm21, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+192] + ; Round 4 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm11, zmm22, 150 + vpternlogq zmm25, zmm8, zmm19, 150 + vmovdqu64 zmm26, zmm14 + vpternlogq zmm26, zmm20, zmm6, 150 + vpternlogq zmm26, zmm17, zmm3, 150 + vmovdqu64 zmm27, zmm23 + vpternlogq zmm27, zmm9, zmm15, 150 + vpternlogq zmm27, zmm1, zmm12, 150 + vmovdqu64 zmm28, zmm7 + vpternlogq zmm28, zmm18, zmm4, 150 + vpternlogq zmm28, zmm10, zmm21, 150 + vmovdqu64 zmm29, zmm16 + vpternlogq zmm29, zmm2, zmm13, 150 + vpternlogq zmm29, zmm24, zmm5, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm5, zmm5, zmm30 + ; Rho - rotate each lane in place + vprolq zmm14, zmm14, 1 + vprolq zmm23, zmm23, 62 + vprolq zmm7, zmm7, 28 + vprolq zmm16, zmm16, 27 + vprolq zmm11, zmm11, 36 + vprolq zmm20, zmm20, 44 + vprolq zmm9, zmm9, 6 + vprolq zmm18, zmm18, 55 + vprolq zmm2, zmm2, 20 + vprolq zmm22, zmm22, 3 + vprolq zmm6, zmm6, 10 + vprolq zmm15, zmm15, 43 + vprolq zmm4, zmm4, 25 + vprolq zmm13, zmm13, 39 + vprolq zmm8, zmm8, 41 + vprolq zmm17, zmm17, 45 + vprolq zmm1, zmm1, 15 + vprolq zmm10, zmm10, 21 + vprolq zmm24, zmm24, 8 + vprolq zmm19, zmm19, 18 + vprolq zmm3, zmm3, 2 + vprolq zmm12, zmm12, 61 + vprolq zmm21, zmm21, 56 + vprolq zmm5, zmm5, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm0, zmm20, zmm15, 210 + vpternlogq zmm20, zmm15, zmm10, 210 + vpternlogq zmm15, zmm10, zmm5, 210 + vpternlogq zmm10, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm7, zmm2, zmm22, 210 + vpternlogq zmm2, zmm22, zmm17, 210 + vpternlogq zmm22, zmm17, zmm12, 210 + vpternlogq zmm17, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm14, zmm9, zmm4, 210 + vpternlogq zmm9, zmm4, zmm24, 210 + vpternlogq zmm4, zmm24, zmm19, 210 + vpternlogq zmm24, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm16, zmm11, zmm6, 210 + vpternlogq zmm11, zmm6, zmm1, 210 + vpternlogq zmm6, zmm1, zmm21, 210 + vpternlogq zmm1, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm23, zmm18, zmm13, 210 + vpternlogq zmm18, zmm13, zmm8, 210 + vpternlogq zmm13, zmm8, zmm3, 210 + vpternlogq zmm8, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+256] + ; Round 5 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm7, zmm14, 150 + vpternlogq zmm25, zmm16, zmm23, 150 + vmovdqu64 zmm26, zmm20 + vpternlogq zmm26, zmm2, zmm9, 150 + vpternlogq zmm26, zmm11, zmm18, 150 + vmovdqu64 zmm27, zmm15 + vpternlogq zmm27, zmm22, zmm4, 150 + vpternlogq zmm27, zmm6, zmm13, 150 + vmovdqu64 zmm28, zmm10 + vpternlogq zmm28, zmm17, zmm24, 150 + vpternlogq zmm28, zmm1, zmm8, 150 + vmovdqu64 zmm29, zmm5 + vpternlogq zmm29, zmm12, zmm19, 150 + vpternlogq zmm29, zmm21, zmm3, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm3, zmm3, zmm30 + ; Rho - rotate each lane in place + vprolq zmm20, zmm20, 1 + vprolq zmm15, zmm15, 62 + vprolq zmm10, zmm10, 28 + vprolq zmm5, zmm5, 27 + vprolq zmm7, zmm7, 36 + vprolq zmm2, zmm2, 44 + vprolq zmm22, zmm22, 6 + vprolq zmm17, zmm17, 55 + vprolq zmm12, zmm12, 20 + vprolq zmm14, zmm14, 3 + vprolq zmm9, zmm9, 10 + vprolq zmm4, zmm4, 43 + vprolq zmm24, zmm24, 25 + vprolq zmm19, zmm19, 39 + vprolq zmm16, zmm16, 41 + vprolq zmm11, zmm11, 45 + vprolq zmm6, zmm6, 15 + vprolq zmm1, zmm1, 21 + vprolq zmm21, zmm21, 8 + vprolq zmm23, zmm23, 18 + vprolq zmm18, zmm18, 2 + vprolq zmm13, zmm13, 61 + vprolq zmm8, zmm8, 56 + vprolq zmm3, zmm3, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm0, zmm2, zmm4, 210 + vpternlogq zmm2, zmm4, zmm1, 210 + vpternlogq zmm4, zmm1, zmm3, 210 + vpternlogq zmm1, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm10, zmm12, zmm14, 210 + vpternlogq zmm12, zmm14, zmm11, 210 + vpternlogq zmm14, zmm11, zmm13, 210 + vpternlogq zmm11, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm20, zmm22, zmm24, 210 + vpternlogq zmm22, zmm24, zmm21, 210 + vpternlogq zmm24, zmm21, zmm23, 210 + vpternlogq zmm21, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm5, zmm7, zmm9, 210 + vpternlogq zmm7, zmm9, zmm6, 210 + vpternlogq zmm9, zmm6, zmm8, 210 + vpternlogq zmm6, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm15, zmm17, zmm19, 210 + vpternlogq zmm17, zmm19, zmm16, 210 + vpternlogq zmm19, zmm16, zmm18, 210 + vpternlogq zmm16, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+320] + ; Round 6 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm10, zmm20, 150 + vpternlogq zmm25, zmm5, zmm15, 150 + vmovdqu64 zmm26, zmm2 + vpternlogq zmm26, zmm12, zmm22, 150 + vpternlogq zmm26, zmm7, zmm17, 150 + vmovdqu64 zmm27, zmm4 + vpternlogq zmm27, zmm14, zmm24, 150 + vpternlogq zmm27, zmm9, zmm19, 150 + vmovdqu64 zmm28, zmm1 + vpternlogq zmm28, zmm11, zmm21, 150 + vpternlogq zmm28, zmm6, zmm16, 150 + vmovdqu64 zmm29, zmm3 + vpternlogq zmm29, zmm13, zmm23, 150 + vpternlogq zmm29, zmm8, zmm18, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm18, zmm18, zmm30 + ; Rho - rotate each lane in place + vprolq zmm2, zmm2, 1 + vprolq zmm4, zmm4, 62 + vprolq zmm1, zmm1, 28 + vprolq zmm3, zmm3, 27 + vprolq zmm10, zmm10, 36 + vprolq zmm12, zmm12, 44 + vprolq zmm14, zmm14, 6 + vprolq zmm11, zmm11, 55 + vprolq zmm13, zmm13, 20 + vprolq zmm20, zmm20, 3 + vprolq zmm22, zmm22, 10 + vprolq zmm24, zmm24, 43 + vprolq zmm21, zmm21, 25 + vprolq zmm23, zmm23, 39 + vprolq zmm5, zmm5, 41 + vprolq zmm7, zmm7, 45 + vprolq zmm9, zmm9, 15 + vprolq zmm6, zmm6, 21 + vprolq zmm8, zmm8, 8 + vprolq zmm15, zmm15, 18 + vprolq zmm17, zmm17, 2 + vprolq zmm19, zmm19, 61 + vprolq zmm16, zmm16, 56 + vprolq zmm18, zmm18, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm0, zmm12, zmm24, 210 + vpternlogq zmm12, zmm24, zmm6, 210 + vpternlogq zmm24, zmm6, zmm18, 210 + vpternlogq zmm6, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm1, zmm13, zmm20, 210 + vpternlogq zmm13, zmm20, zmm7, 210 + vpternlogq zmm20, zmm7, zmm19, 210 + vpternlogq zmm7, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm2, zmm14, zmm21, 210 + vpternlogq zmm14, zmm21, zmm8, 210 + vpternlogq zmm21, zmm8, zmm15, 210 + vpternlogq zmm8, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm3, zmm10, zmm22, 210 + vpternlogq zmm10, zmm22, zmm9, 210 + vpternlogq zmm22, zmm9, zmm16, 210 + vpternlogq zmm9, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm4, zmm11, zmm23, 210 + vpternlogq zmm11, zmm23, zmm5, 210 + vpternlogq zmm23, zmm5, zmm17, 210 + vpternlogq zmm5, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+384] + ; Round 7 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm1, zmm2, 150 + vpternlogq zmm25, zmm3, zmm4, 150 + vmovdqu64 zmm26, zmm12 + vpternlogq zmm26, zmm13, zmm14, 150 + vpternlogq zmm26, zmm10, zmm11, 150 + vmovdqu64 zmm27, zmm24 + vpternlogq zmm27, zmm20, zmm21, 150 + vpternlogq zmm27, zmm22, zmm23, 150 + vmovdqu64 zmm28, zmm6 + vpternlogq zmm28, zmm7, zmm8, 150 + vpternlogq zmm28, zmm9, zmm5, 150 + vmovdqu64 zmm29, zmm18 + vpternlogq zmm29, zmm19, zmm15, 150 + vpternlogq zmm29, zmm16, zmm17, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm17, zmm17, zmm30 + ; Rho - rotate each lane in place + vprolq zmm12, zmm12, 1 + vprolq zmm24, zmm24, 62 + vprolq zmm6, zmm6, 28 + vprolq zmm18, zmm18, 27 + vprolq zmm1, zmm1, 36 + vprolq zmm13, zmm13, 44 + vprolq zmm20, zmm20, 6 + vprolq zmm7, zmm7, 55 + vprolq zmm19, zmm19, 20 + vprolq zmm2, zmm2, 3 + vprolq zmm14, zmm14, 10 + vprolq zmm21, zmm21, 43 + vprolq zmm8, zmm8, 25 + vprolq zmm15, zmm15, 39 + vprolq zmm3, zmm3, 41 + vprolq zmm10, zmm10, 45 + vprolq zmm22, zmm22, 15 + vprolq zmm9, zmm9, 21 + vprolq zmm16, zmm16, 8 + vprolq zmm4, zmm4, 18 + vprolq zmm11, zmm11, 2 + vprolq zmm23, zmm23, 61 + vprolq zmm5, zmm5, 56 + vprolq zmm17, zmm17, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm0, zmm13, zmm21, 210 + vpternlogq zmm13, zmm21, zmm9, 210 + vpternlogq zmm21, zmm9, zmm17, 210 + vpternlogq zmm9, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm6, zmm19, zmm2, 210 + vpternlogq zmm19, zmm2, zmm10, 210 + vpternlogq zmm2, zmm10, zmm23, 210 + vpternlogq zmm10, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm12, zmm20, zmm8, 210 + vpternlogq zmm20, zmm8, zmm16, 210 + vpternlogq zmm8, zmm16, zmm4, 210 + vpternlogq zmm16, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm18, zmm1, zmm14, 210 + vpternlogq zmm1, zmm14, zmm22, 210 + vpternlogq zmm14, zmm22, zmm5, 210 + vpternlogq zmm22, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm24, zmm7, zmm15, 210 + vpternlogq zmm7, zmm15, zmm3, 210 + vpternlogq zmm15, zmm3, zmm11, 210 + vpternlogq zmm3, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+448] + ; Round 8 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm6, zmm12, 150 + vpternlogq zmm25, zmm18, zmm24, 150 + vmovdqu64 zmm26, zmm13 + vpternlogq zmm26, zmm19, zmm20, 150 + vpternlogq zmm26, zmm1, zmm7, 150 + vmovdqu64 zmm27, zmm21 + vpternlogq zmm27, zmm2, zmm8, 150 + vpternlogq zmm27, zmm14, zmm15, 150 + vmovdqu64 zmm28, zmm9 + vpternlogq zmm28, zmm10, zmm16, 150 + vpternlogq zmm28, zmm22, zmm3, 150 + vmovdqu64 zmm29, zmm17 + vpternlogq zmm29, zmm23, zmm4, 150 + vpternlogq zmm29, zmm5, zmm11, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm11, zmm11, zmm30 + ; Rho - rotate each lane in place + vprolq zmm13, zmm13, 1 + vprolq zmm21, zmm21, 62 + vprolq zmm9, zmm9, 28 + vprolq zmm17, zmm17, 27 + vprolq zmm6, zmm6, 36 + vprolq zmm19, zmm19, 44 + vprolq zmm2, zmm2, 6 + vprolq zmm10, zmm10, 55 + vprolq zmm23, zmm23, 20 + vprolq zmm12, zmm12, 3 + vprolq zmm20, zmm20, 10 + vprolq zmm8, zmm8, 43 + vprolq zmm16, zmm16, 25 + vprolq zmm4, zmm4, 39 + vprolq zmm18, zmm18, 41 + vprolq zmm1, zmm1, 45 + vprolq zmm14, zmm14, 15 + vprolq zmm22, zmm22, 21 + vprolq zmm5, zmm5, 8 + vprolq zmm24, zmm24, 18 + vprolq zmm7, zmm7, 2 + vprolq zmm15, zmm15, 61 + vprolq zmm3, zmm3, 56 + vprolq zmm11, zmm11, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm0, zmm19, zmm8, 210 + vpternlogq zmm19, zmm8, zmm22, 210 + vpternlogq zmm8, zmm22, zmm11, 210 + vpternlogq zmm22, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm9, zmm23, zmm12, 210 + vpternlogq zmm23, zmm12, zmm1, 210 + vpternlogq zmm12, zmm1, zmm15, 210 + vpternlogq zmm1, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm13, zmm2, zmm16, 210 + vpternlogq zmm2, zmm16, zmm5, 210 + vpternlogq zmm16, zmm5, zmm24, 210 + vpternlogq zmm5, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm17, zmm6, zmm20, 210 + vpternlogq zmm6, zmm20, zmm14, 210 + vpternlogq zmm20, zmm14, zmm3, 210 + vpternlogq zmm14, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm21, zmm10, zmm4, 210 + vpternlogq zmm10, zmm4, zmm18, 210 + vpternlogq zmm4, zmm18, zmm7, 210 + vpternlogq zmm18, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+512] + ; Round 9 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm9, zmm13, 150 + vpternlogq zmm25, zmm17, zmm21, 150 + vmovdqu64 zmm26, zmm19 + vpternlogq zmm26, zmm23, zmm2, 150 + vpternlogq zmm26, zmm6, zmm10, 150 + vmovdqu64 zmm27, zmm8 + vpternlogq zmm27, zmm12, zmm16, 150 + vpternlogq zmm27, zmm20, zmm4, 150 + vmovdqu64 zmm28, zmm22 + vpternlogq zmm28, zmm1, zmm5, 150 + vpternlogq zmm28, zmm14, zmm18, 150 + vmovdqu64 zmm29, zmm11 + vpternlogq zmm29, zmm15, zmm24, 150 + vpternlogq zmm29, zmm3, zmm7, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm7, zmm7, zmm30 + ; Rho - rotate each lane in place + vprolq zmm19, zmm19, 1 + vprolq zmm8, zmm8, 62 + vprolq zmm22, zmm22, 28 + vprolq zmm11, zmm11, 27 + vprolq zmm9, zmm9, 36 + vprolq zmm23, zmm23, 44 + vprolq zmm12, zmm12, 6 + vprolq zmm1, zmm1, 55 + vprolq zmm15, zmm15, 20 + vprolq zmm13, zmm13, 3 + vprolq zmm2, zmm2, 10 + vprolq zmm16, zmm16, 43 + vprolq zmm5, zmm5, 25 + vprolq zmm24, zmm24, 39 + vprolq zmm17, zmm17, 41 + vprolq zmm6, zmm6, 45 + vprolq zmm20, zmm20, 15 + vprolq zmm14, zmm14, 21 + vprolq zmm3, zmm3, 8 + vprolq zmm21, zmm21, 18 + vprolq zmm10, zmm10, 2 + vprolq zmm4, zmm4, 61 + vprolq zmm18, zmm18, 56 + vprolq zmm7, zmm7, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm0, zmm23, zmm16, 210 + vpternlogq zmm23, zmm16, zmm14, 210 + vpternlogq zmm16, zmm14, zmm7, 210 + vpternlogq zmm14, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm22, zmm15, zmm13, 210 + vpternlogq zmm15, zmm13, zmm6, 210 + vpternlogq zmm13, zmm6, zmm4, 210 + vpternlogq zmm6, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm19, zmm12, zmm5, 210 + vpternlogq zmm12, zmm5, zmm3, 210 + vpternlogq zmm5, zmm3, zmm21, 210 + vpternlogq zmm3, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm11, zmm9, zmm2, 210 + vpternlogq zmm9, zmm2, zmm20, 210 + vpternlogq zmm2, zmm20, zmm18, 210 + vpternlogq zmm20, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm8, zmm1, zmm24, 210 + vpternlogq zmm1, zmm24, zmm17, 210 + vpternlogq zmm24, zmm17, zmm10, 210 + vpternlogq zmm17, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+576] + ; Round 10 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm22, zmm19, 150 + vpternlogq zmm25, zmm11, zmm8, 150 + vmovdqu64 zmm26, zmm23 + vpternlogq zmm26, zmm15, zmm12, 150 + vpternlogq zmm26, zmm9, zmm1, 150 + vmovdqu64 zmm27, zmm16 + vpternlogq zmm27, zmm13, zmm5, 150 + vpternlogq zmm27, zmm2, zmm24, 150 + vmovdqu64 zmm28, zmm14 + vpternlogq zmm28, zmm6, zmm3, 150 + vpternlogq zmm28, zmm20, zmm17, 150 + vmovdqu64 zmm29, zmm7 + vpternlogq zmm29, zmm4, zmm21, 150 + vpternlogq zmm29, zmm18, zmm10, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm10, zmm10, zmm30 + ; Rho - rotate each lane in place + vprolq zmm23, zmm23, 1 + vprolq zmm16, zmm16, 62 + vprolq zmm14, zmm14, 28 + vprolq zmm7, zmm7, 27 + vprolq zmm22, zmm22, 36 + vprolq zmm15, zmm15, 44 + vprolq zmm13, zmm13, 6 + vprolq zmm6, zmm6, 55 + vprolq zmm4, zmm4, 20 + vprolq zmm19, zmm19, 3 + vprolq zmm12, zmm12, 10 + vprolq zmm5, zmm5, 43 + vprolq zmm3, zmm3, 25 + vprolq zmm21, zmm21, 39 + vprolq zmm11, zmm11, 41 + vprolq zmm9, zmm9, 45 + vprolq zmm2, zmm2, 15 + vprolq zmm20, zmm20, 21 + vprolq zmm18, zmm18, 8 + vprolq zmm8, zmm8, 18 + vprolq zmm1, zmm1, 2 + vprolq zmm24, zmm24, 61 + vprolq zmm17, zmm17, 56 + vprolq zmm10, zmm10, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm0, zmm15, zmm5, 210 + vpternlogq zmm15, zmm5, zmm20, 210 + vpternlogq zmm5, zmm20, zmm10, 210 + vpternlogq zmm20, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm14, zmm4, zmm19, 210 + vpternlogq zmm4, zmm19, zmm9, 210 + vpternlogq zmm19, zmm9, zmm24, 210 + vpternlogq zmm9, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm23, zmm13, zmm3, 210 + vpternlogq zmm13, zmm3, zmm18, 210 + vpternlogq zmm3, zmm18, zmm8, 210 + vpternlogq zmm18, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm7, zmm22, zmm12, 210 + vpternlogq zmm22, zmm12, zmm2, 210 + vpternlogq zmm12, zmm2, zmm17, 210 + vpternlogq zmm2, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm16, zmm6, zmm21, 210 + vpternlogq zmm6, zmm21, zmm11, 210 + vpternlogq zmm21, zmm11, zmm1, 210 + vpternlogq zmm11, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+640] + ; Round 11 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm14, zmm23, 150 + vpternlogq zmm25, zmm7, zmm16, 150 + vmovdqu64 zmm26, zmm15 + vpternlogq zmm26, zmm4, zmm13, 150 + vpternlogq zmm26, zmm22, zmm6, 150 + vmovdqu64 zmm27, zmm5 + vpternlogq zmm27, zmm19, zmm3, 150 + vpternlogq zmm27, zmm12, zmm21, 150 + vmovdqu64 zmm28, zmm20 + vpternlogq zmm28, zmm9, zmm18, 150 + vpternlogq zmm28, zmm2, zmm11, 150 + vmovdqu64 zmm29, zmm10 + vpternlogq zmm29, zmm24, zmm8, 150 + vpternlogq zmm29, zmm17, zmm1, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm1, zmm1, zmm30 + ; Rho - rotate each lane in place + vprolq zmm15, zmm15, 1 + vprolq zmm5, zmm5, 62 + vprolq zmm20, zmm20, 28 + vprolq zmm10, zmm10, 27 + vprolq zmm14, zmm14, 36 + vprolq zmm4, zmm4, 44 + vprolq zmm19, zmm19, 6 + vprolq zmm9, zmm9, 55 + vprolq zmm24, zmm24, 20 + vprolq zmm23, zmm23, 3 + vprolq zmm13, zmm13, 10 + vprolq zmm3, zmm3, 43 + vprolq zmm18, zmm18, 25 + vprolq zmm8, zmm8, 39 + vprolq zmm7, zmm7, 41 + vprolq zmm22, zmm22, 45 + vprolq zmm12, zmm12, 15 + vprolq zmm2, zmm2, 21 + vprolq zmm17, zmm17, 8 + vprolq zmm16, zmm16, 18 + vprolq zmm6, zmm6, 2 + vprolq zmm21, zmm21, 61 + vprolq zmm11, zmm11, 56 + vprolq zmm1, zmm1, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm0, zmm4, zmm3, 210 + vpternlogq zmm4, zmm3, zmm2, 210 + vpternlogq zmm3, zmm2, zmm1, 210 + vpternlogq zmm2, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm20, zmm24, zmm23, 210 + vpternlogq zmm24, zmm23, zmm22, 210 + vpternlogq zmm23, zmm22, zmm21, 210 + vpternlogq zmm22, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm15, zmm19, zmm18, 210 + vpternlogq zmm19, zmm18, zmm17, 210 + vpternlogq zmm18, zmm17, zmm16, 210 + vpternlogq zmm17, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm10, zmm14, zmm13, 210 + vpternlogq zmm14, zmm13, zmm12, 210 + vpternlogq zmm13, zmm12, zmm11, 210 + vpternlogq zmm12, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm5, zmm9, zmm8, 210 + vpternlogq zmm9, zmm8, zmm7, 210 + vpternlogq zmm8, zmm7, zmm6, 210 + vpternlogq zmm7, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+704] + ; Round 12 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm20, zmm15, 150 + vpternlogq zmm25, zmm10, zmm5, 150 + vmovdqu64 zmm26, zmm4 + vpternlogq zmm26, zmm24, zmm19, 150 + vpternlogq zmm26, zmm14, zmm9, 150 + vmovdqu64 zmm27, zmm3 + vpternlogq zmm27, zmm23, zmm18, 150 + vpternlogq zmm27, zmm13, zmm8, 150 + vmovdqu64 zmm28, zmm2 + vpternlogq zmm28, zmm22, zmm17, 150 + vpternlogq zmm28, zmm12, zmm7, 150 + vmovdqu64 zmm29, zmm1 + vpternlogq zmm29, zmm21, zmm16, 150 + vpternlogq zmm29, zmm11, zmm6, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm6, zmm6, zmm30 + ; Rho - rotate each lane in place + vprolq zmm4, zmm4, 1 + vprolq zmm3, zmm3, 62 + vprolq zmm2, zmm2, 28 + vprolq zmm1, zmm1, 27 + vprolq zmm20, zmm20, 36 + vprolq zmm24, zmm24, 44 + vprolq zmm23, zmm23, 6 + vprolq zmm22, zmm22, 55 + vprolq zmm21, zmm21, 20 + vprolq zmm15, zmm15, 3 + vprolq zmm19, zmm19, 10 + vprolq zmm18, zmm18, 43 + vprolq zmm17, zmm17, 25 + vprolq zmm16, zmm16, 39 + vprolq zmm10, zmm10, 41 + vprolq zmm14, zmm14, 45 + vprolq zmm13, zmm13, 15 + vprolq zmm12, zmm12, 21 + vprolq zmm11, zmm11, 8 + vprolq zmm5, zmm5, 18 + vprolq zmm9, zmm9, 2 + vprolq zmm8, zmm8, 61 + vprolq zmm7, zmm7, 56 + vprolq zmm6, zmm6, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm0, zmm24, zmm18, 210 + vpternlogq zmm24, zmm18, zmm12, 210 + vpternlogq zmm18, zmm12, zmm6, 210 + vpternlogq zmm12, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm2, zmm21, zmm15, 210 + vpternlogq zmm21, zmm15, zmm14, 210 + vpternlogq zmm15, zmm14, zmm8, 210 + vpternlogq zmm14, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm4, zmm23, zmm17, 210 + vpternlogq zmm23, zmm17, zmm11, 210 + vpternlogq zmm17, zmm11, zmm5, 210 + vpternlogq zmm11, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm1, zmm20, zmm19, 210 + vpternlogq zmm20, zmm19, zmm13, 210 + vpternlogq zmm19, zmm13, zmm7, 210 + vpternlogq zmm13, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm3, zmm22, zmm16, 210 + vpternlogq zmm22, zmm16, zmm10, 210 + vpternlogq zmm16, zmm10, zmm9, 210 + vpternlogq zmm10, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+768] + ; Round 13 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm2, zmm4, 150 + vpternlogq zmm25, zmm1, zmm3, 150 + vmovdqu64 zmm26, zmm24 + vpternlogq zmm26, zmm21, zmm23, 150 + vpternlogq zmm26, zmm20, zmm22, 150 + vmovdqu64 zmm27, zmm18 + vpternlogq zmm27, zmm15, zmm17, 150 + vpternlogq zmm27, zmm19, zmm16, 150 + vmovdqu64 zmm28, zmm12 + vpternlogq zmm28, zmm14, zmm11, 150 + vpternlogq zmm28, zmm13, zmm10, 150 + vmovdqu64 zmm29, zmm6 + vpternlogq zmm29, zmm8, zmm5, 150 + vpternlogq zmm29, zmm7, zmm9, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm9, zmm9, zmm30 + ; Rho - rotate each lane in place + vprolq zmm24, zmm24, 1 + vprolq zmm18, zmm18, 62 + vprolq zmm12, zmm12, 28 + vprolq zmm6, zmm6, 27 + vprolq zmm2, zmm2, 36 + vprolq zmm21, zmm21, 44 + vprolq zmm15, zmm15, 6 + vprolq zmm14, zmm14, 55 + vprolq zmm8, zmm8, 20 + vprolq zmm4, zmm4, 3 + vprolq zmm23, zmm23, 10 + vprolq zmm17, zmm17, 43 + vprolq zmm11, zmm11, 25 + vprolq zmm5, zmm5, 39 + vprolq zmm1, zmm1, 41 + vprolq zmm20, zmm20, 45 + vprolq zmm19, zmm19, 15 + vprolq zmm13, zmm13, 21 + vprolq zmm7, zmm7, 8 + vprolq zmm3, zmm3, 18 + vprolq zmm22, zmm22, 2 + vprolq zmm16, zmm16, 61 + vprolq zmm10, zmm10, 56 + vprolq zmm9, zmm9, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm0, zmm21, zmm17, 210 + vpternlogq zmm21, zmm17, zmm13, 210 + vpternlogq zmm17, zmm13, zmm9, 210 + vpternlogq zmm13, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm12, zmm8, zmm4, 210 + vpternlogq zmm8, zmm4, zmm20, 210 + vpternlogq zmm4, zmm20, zmm16, 210 + vpternlogq zmm20, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm24, zmm15, zmm11, 210 + vpternlogq zmm15, zmm11, zmm7, 210 + vpternlogq zmm11, zmm7, zmm3, 210 + vpternlogq zmm7, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm6, zmm2, zmm23, 210 + vpternlogq zmm2, zmm23, zmm19, 210 + vpternlogq zmm23, zmm19, zmm10, 210 + vpternlogq zmm19, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm18, zmm14, zmm5, 210 + vpternlogq zmm14, zmm5, zmm1, 210 + vpternlogq zmm5, zmm1, zmm22, 210 + vpternlogq zmm1, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+832] + ; Round 14 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm12, zmm24, 150 + vpternlogq zmm25, zmm6, zmm18, 150 + vmovdqu64 zmm26, zmm21 + vpternlogq zmm26, zmm8, zmm15, 150 + vpternlogq zmm26, zmm2, zmm14, 150 + vmovdqu64 zmm27, zmm17 + vpternlogq zmm27, zmm4, zmm11, 150 + vpternlogq zmm27, zmm23, zmm5, 150 + vmovdqu64 zmm28, zmm13 + vpternlogq zmm28, zmm20, zmm7, 150 + vpternlogq zmm28, zmm19, zmm1, 150 + vmovdqu64 zmm29, zmm9 + vpternlogq zmm29, zmm16, zmm3, 150 + vpternlogq zmm29, zmm10, zmm22, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm22, zmm22, zmm30 + ; Rho - rotate each lane in place + vprolq zmm21, zmm21, 1 + vprolq zmm17, zmm17, 62 + vprolq zmm13, zmm13, 28 + vprolq zmm9, zmm9, 27 + vprolq zmm12, zmm12, 36 + vprolq zmm8, zmm8, 44 + vprolq zmm4, zmm4, 6 + vprolq zmm20, zmm20, 55 + vprolq zmm16, zmm16, 20 + vprolq zmm24, zmm24, 3 + vprolq zmm15, zmm15, 10 + vprolq zmm11, zmm11, 43 + vprolq zmm7, zmm7, 25 + vprolq zmm3, zmm3, 39 + vprolq zmm6, zmm6, 41 + vprolq zmm2, zmm2, 45 + vprolq zmm23, zmm23, 15 + vprolq zmm19, zmm19, 21 + vprolq zmm10, zmm10, 8 + vprolq zmm18, zmm18, 18 + vprolq zmm14, zmm14, 2 + vprolq zmm5, zmm5, 61 + vprolq zmm1, zmm1, 56 + vprolq zmm22, zmm22, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm0, zmm8, zmm11, 210 + vpternlogq zmm8, zmm11, zmm19, 210 + vpternlogq zmm11, zmm19, zmm22, 210 + vpternlogq zmm19, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm13, zmm16, zmm24, 210 + vpternlogq zmm16, zmm24, zmm2, 210 + vpternlogq zmm24, zmm2, zmm5, 210 + vpternlogq zmm2, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm21, zmm4, zmm7, 210 + vpternlogq zmm4, zmm7, zmm10, 210 + vpternlogq zmm7, zmm10, zmm18, 210 + vpternlogq zmm10, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm9, zmm12, zmm15, 210 + vpternlogq zmm12, zmm15, zmm23, 210 + vpternlogq zmm15, zmm23, zmm1, 210 + vpternlogq zmm23, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm17, zmm20, zmm3, 210 + vpternlogq zmm20, zmm3, zmm6, 210 + vpternlogq zmm3, zmm6, zmm14, 210 + vpternlogq zmm6, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+896] + ; Round 15 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm13, zmm21, 150 + vpternlogq zmm25, zmm9, zmm17, 150 + vmovdqu64 zmm26, zmm8 + vpternlogq zmm26, zmm16, zmm4, 150 + vpternlogq zmm26, zmm12, zmm20, 150 + vmovdqu64 zmm27, zmm11 + vpternlogq zmm27, zmm24, zmm7, 150 + vpternlogq zmm27, zmm15, zmm3, 150 + vmovdqu64 zmm28, zmm19 + vpternlogq zmm28, zmm2, zmm10, 150 + vpternlogq zmm28, zmm23, zmm6, 150 + vmovdqu64 zmm29, zmm22 + vpternlogq zmm29, zmm5, zmm18, 150 + vpternlogq zmm29, zmm1, zmm14, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm14, zmm14, zmm30 + ; Rho - rotate each lane in place + vprolq zmm8, zmm8, 1 + vprolq zmm11, zmm11, 62 + vprolq zmm19, zmm19, 28 + vprolq zmm22, zmm22, 27 + vprolq zmm13, zmm13, 36 + vprolq zmm16, zmm16, 44 + vprolq zmm24, zmm24, 6 + vprolq zmm2, zmm2, 55 + vprolq zmm5, zmm5, 20 + vprolq zmm21, zmm21, 3 + vprolq zmm4, zmm4, 10 + vprolq zmm7, zmm7, 43 + vprolq zmm10, zmm10, 25 + vprolq zmm18, zmm18, 39 + vprolq zmm9, zmm9, 41 + vprolq zmm12, zmm12, 45 + vprolq zmm15, zmm15, 15 + vprolq zmm23, zmm23, 21 + vprolq zmm1, zmm1, 8 + vprolq zmm17, zmm17, 18 + vprolq zmm20, zmm20, 2 + vprolq zmm3, zmm3, 61 + vprolq zmm6, zmm6, 56 + vprolq zmm14, zmm14, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm0, zmm16, zmm7, 210 + vpternlogq zmm16, zmm7, zmm23, 210 + vpternlogq zmm7, zmm23, zmm14, 210 + vpternlogq zmm23, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm19, zmm5, zmm21, 210 + vpternlogq zmm5, zmm21, zmm12, 210 + vpternlogq zmm21, zmm12, zmm3, 210 + vpternlogq zmm12, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm8, zmm24, zmm10, 210 + vpternlogq zmm24, zmm10, zmm1, 210 + vpternlogq zmm10, zmm1, zmm17, 210 + vpternlogq zmm1, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm22, zmm13, zmm4, 210 + vpternlogq zmm13, zmm4, zmm15, 210 + vpternlogq zmm4, zmm15, zmm6, 210 + vpternlogq zmm15, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm11, zmm2, zmm18, 210 + vpternlogq zmm2, zmm18, zmm9, 210 + vpternlogq zmm18, zmm9, zmm20, 210 + vpternlogq zmm9, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+960] + ; Round 16 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm19, zmm8, 150 + vpternlogq zmm25, zmm22, zmm11, 150 + vmovdqu64 zmm26, zmm16 + vpternlogq zmm26, zmm5, zmm24, 150 + vpternlogq zmm26, zmm13, zmm2, 150 + vmovdqu64 zmm27, zmm7 + vpternlogq zmm27, zmm21, zmm10, 150 + vpternlogq zmm27, zmm4, zmm18, 150 + vmovdqu64 zmm28, zmm23 + vpternlogq zmm28, zmm12, zmm1, 150 + vpternlogq zmm28, zmm15, zmm9, 150 + vmovdqu64 zmm29, zmm14 + vpternlogq zmm29, zmm3, zmm17, 150 + vpternlogq zmm29, zmm6, zmm20, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm20, zmm20, zmm30 + ; Rho - rotate each lane in place + vprolq zmm16, zmm16, 1 + vprolq zmm7, zmm7, 62 + vprolq zmm23, zmm23, 28 + vprolq zmm14, zmm14, 27 + vprolq zmm19, zmm19, 36 + vprolq zmm5, zmm5, 44 + vprolq zmm21, zmm21, 6 + vprolq zmm12, zmm12, 55 + vprolq zmm3, zmm3, 20 + vprolq zmm8, zmm8, 3 + vprolq zmm24, zmm24, 10 + vprolq zmm10, zmm10, 43 + vprolq zmm1, zmm1, 25 + vprolq zmm17, zmm17, 39 + vprolq zmm22, zmm22, 41 + vprolq zmm13, zmm13, 45 + vprolq zmm4, zmm4, 15 + vprolq zmm15, zmm15, 21 + vprolq zmm6, zmm6, 8 + vprolq zmm11, zmm11, 18 + vprolq zmm2, zmm2, 2 + vprolq zmm18, zmm18, 61 + vprolq zmm9, zmm9, 56 + vprolq zmm20, zmm20, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm0, zmm5, zmm10, 210 + vpternlogq zmm5, zmm10, zmm15, 210 + vpternlogq zmm10, zmm15, zmm20, 210 + vpternlogq zmm15, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm23, zmm3, zmm8, 210 + vpternlogq zmm3, zmm8, zmm13, 210 + vpternlogq zmm8, zmm13, zmm18, 210 + vpternlogq zmm13, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm16, zmm21, zmm1, 210 + vpternlogq zmm21, zmm1, zmm6, 210 + vpternlogq zmm1, zmm6, zmm11, 210 + vpternlogq zmm6, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm14, zmm19, zmm24, 210 + vpternlogq zmm19, zmm24, zmm4, 210 + vpternlogq zmm24, zmm4, zmm9, 210 + vpternlogq zmm4, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm7, zmm12, zmm17, 210 + vpternlogq zmm12, zmm17, zmm22, 210 + vpternlogq zmm17, zmm22, zmm2, 210 + vpternlogq zmm22, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1024] + ; Round 17 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm23, zmm16, 150 + vpternlogq zmm25, zmm14, zmm7, 150 + vmovdqu64 zmm26, zmm5 + vpternlogq zmm26, zmm3, zmm21, 150 + vpternlogq zmm26, zmm19, zmm12, 150 + vmovdqu64 zmm27, zmm10 + vpternlogq zmm27, zmm8, zmm1, 150 + vpternlogq zmm27, zmm24, zmm17, 150 + vmovdqu64 zmm28, zmm15 + vpternlogq zmm28, zmm13, zmm6, 150 + vpternlogq zmm28, zmm4, zmm22, 150 + vmovdqu64 zmm29, zmm20 + vpternlogq zmm29, zmm18, zmm11, 150 + vpternlogq zmm29, zmm9, zmm2, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm2, zmm2, zmm30 + ; Rho - rotate each lane in place + vprolq zmm5, zmm5, 1 + vprolq zmm10, zmm10, 62 + vprolq zmm15, zmm15, 28 + vprolq zmm20, zmm20, 27 + vprolq zmm23, zmm23, 36 + vprolq zmm3, zmm3, 44 + vprolq zmm8, zmm8, 6 + vprolq zmm13, zmm13, 55 + vprolq zmm18, zmm18, 20 + vprolq zmm16, zmm16, 3 + vprolq zmm21, zmm21, 10 + vprolq zmm1, zmm1, 43 + vprolq zmm6, zmm6, 25 + vprolq zmm11, zmm11, 39 + vprolq zmm14, zmm14, 41 + vprolq zmm19, zmm19, 45 + vprolq zmm24, zmm24, 15 + vprolq zmm4, zmm4, 21 + vprolq zmm9, zmm9, 8 + vprolq zmm7, zmm7, 18 + vprolq zmm12, zmm12, 2 + vprolq zmm17, zmm17, 61 + vprolq zmm22, zmm22, 56 + vprolq zmm2, zmm2, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm0, zmm3, zmm1, 210 + vpternlogq zmm3, zmm1, zmm4, 210 + vpternlogq zmm1, zmm4, zmm2, 210 + vpternlogq zmm4, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm15, zmm18, zmm16, 210 + vpternlogq zmm18, zmm16, zmm19, 210 + vpternlogq zmm16, zmm19, zmm17, 210 + vpternlogq zmm19, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm5, zmm8, zmm6, 210 + vpternlogq zmm8, zmm6, zmm9, 210 + vpternlogq zmm6, zmm9, zmm7, 210 + vpternlogq zmm9, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm20, zmm23, zmm21, 210 + vpternlogq zmm23, zmm21, zmm24, 210 + vpternlogq zmm21, zmm24, zmm22, 210 + vpternlogq zmm24, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm10, zmm13, zmm11, 210 + vpternlogq zmm13, zmm11, zmm14, 210 + vpternlogq zmm11, zmm14, zmm12, 210 + vpternlogq zmm14, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1088] + ; Round 18 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm15, zmm5, 150 + vpternlogq zmm25, zmm20, zmm10, 150 + vmovdqu64 zmm26, zmm3 + vpternlogq zmm26, zmm18, zmm8, 150 + vpternlogq zmm26, zmm23, zmm13, 150 + vmovdqu64 zmm27, zmm1 + vpternlogq zmm27, zmm16, zmm6, 150 + vpternlogq zmm27, zmm21, zmm11, 150 + vmovdqu64 zmm28, zmm4 + vpternlogq zmm28, zmm19, zmm9, 150 + vpternlogq zmm28, zmm24, zmm14, 150 + vmovdqu64 zmm29, zmm2 + vpternlogq zmm29, zmm17, zmm7, 150 + vpternlogq zmm29, zmm22, zmm12, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm12, zmm12, zmm30 + ; Rho - rotate each lane in place + vprolq zmm3, zmm3, 1 + vprolq zmm1, zmm1, 62 + vprolq zmm4, zmm4, 28 + vprolq zmm2, zmm2, 27 + vprolq zmm15, zmm15, 36 + vprolq zmm18, zmm18, 44 + vprolq zmm16, zmm16, 6 + vprolq zmm19, zmm19, 55 + vprolq zmm17, zmm17, 20 + vprolq zmm5, zmm5, 3 + vprolq zmm8, zmm8, 10 + vprolq zmm6, zmm6, 43 + vprolq zmm9, zmm9, 25 + vprolq zmm7, zmm7, 39 + vprolq zmm20, zmm20, 41 + vprolq zmm23, zmm23, 45 + vprolq zmm21, zmm21, 15 + vprolq zmm24, zmm24, 21 + vprolq zmm22, zmm22, 8 + vprolq zmm10, zmm10, 18 + vprolq zmm13, zmm13, 2 + vprolq zmm11, zmm11, 61 + vprolq zmm14, zmm14, 56 + vprolq zmm12, zmm12, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm0, zmm18, zmm6, 210 + vpternlogq zmm18, zmm6, zmm24, 210 + vpternlogq zmm6, zmm24, zmm12, 210 + vpternlogq zmm24, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm4, zmm17, zmm5, 210 + vpternlogq zmm17, zmm5, zmm23, 210 + vpternlogq zmm5, zmm23, zmm11, 210 + vpternlogq zmm23, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm3, zmm16, zmm9, 210 + vpternlogq zmm16, zmm9, zmm22, 210 + vpternlogq zmm9, zmm22, zmm10, 210 + vpternlogq zmm22, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm2, zmm15, zmm8, 210 + vpternlogq zmm15, zmm8, zmm21, 210 + vpternlogq zmm8, zmm21, zmm14, 210 + vpternlogq zmm21, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm1, zmm19, zmm7, 210 + vpternlogq zmm19, zmm7, zmm20, 210 + vpternlogq zmm7, zmm20, zmm13, 210 + vpternlogq zmm20, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1152] + ; Round 19 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm4, zmm3, 150 + vpternlogq zmm25, zmm2, zmm1, 150 + vmovdqu64 zmm26, zmm18 + vpternlogq zmm26, zmm17, zmm16, 150 + vpternlogq zmm26, zmm15, zmm19, 150 + vmovdqu64 zmm27, zmm6 + vpternlogq zmm27, zmm5, zmm9, 150 + vpternlogq zmm27, zmm8, zmm7, 150 + vmovdqu64 zmm28, zmm24 + vpternlogq zmm28, zmm23, zmm22, 150 + vpternlogq zmm28, zmm21, zmm20, 150 + vmovdqu64 zmm29, zmm12 + vpternlogq zmm29, zmm11, zmm10, 150 + vpternlogq zmm29, zmm14, zmm13, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm13, zmm13, zmm30 + ; Rho - rotate each lane in place + vprolq zmm18, zmm18, 1 + vprolq zmm6, zmm6, 62 + vprolq zmm24, zmm24, 28 + vprolq zmm12, zmm12, 27 + vprolq zmm4, zmm4, 36 + vprolq zmm17, zmm17, 44 + vprolq zmm5, zmm5, 6 + vprolq zmm23, zmm23, 55 + vprolq zmm11, zmm11, 20 + vprolq zmm3, zmm3, 3 + vprolq zmm16, zmm16, 10 + vprolq zmm9, zmm9, 43 + vprolq zmm22, zmm22, 25 + vprolq zmm10, zmm10, 39 + vprolq zmm2, zmm2, 41 + vprolq zmm15, zmm15, 45 + vprolq zmm8, zmm8, 15 + vprolq zmm21, zmm21, 21 + vprolq zmm14, zmm14, 8 + vprolq zmm1, zmm1, 18 + vprolq zmm19, zmm19, 2 + vprolq zmm7, zmm7, 61 + vprolq zmm20, zmm20, 56 + vprolq zmm13, zmm13, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm0, zmm17, zmm9, 210 + vpternlogq zmm17, zmm9, zmm21, 210 + vpternlogq zmm9, zmm21, zmm13, 210 + vpternlogq zmm21, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm24, zmm11, zmm3, 210 + vpternlogq zmm11, zmm3, zmm15, 210 + vpternlogq zmm3, zmm15, zmm7, 210 + vpternlogq zmm15, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm18, zmm5, zmm22, 210 + vpternlogq zmm5, zmm22, zmm14, 210 + vpternlogq zmm22, zmm14, zmm1, 210 + vpternlogq zmm14, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm12, zmm4, zmm16, 210 + vpternlogq zmm4, zmm16, zmm8, 210 + vpternlogq zmm16, zmm8, zmm20, 210 + vpternlogq zmm8, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm6, zmm23, zmm10, 210 + vpternlogq zmm23, zmm10, zmm2, 210 + vpternlogq zmm10, zmm2, zmm19, 210 + vpternlogq zmm2, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1216] + ; Round 20 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm24, zmm18, 150 + vpternlogq zmm25, zmm12, zmm6, 150 + vmovdqu64 zmm26, zmm17 + vpternlogq zmm26, zmm11, zmm5, 150 + vpternlogq zmm26, zmm4, zmm23, 150 + vmovdqu64 zmm27, zmm9 + vpternlogq zmm27, zmm3, zmm22, 150 + vpternlogq zmm27, zmm16, zmm10, 150 + vmovdqu64 zmm28, zmm21 + vpternlogq zmm28, zmm15, zmm14, 150 + vpternlogq zmm28, zmm8, zmm2, 150 + vmovdqu64 zmm29, zmm13 + vpternlogq zmm29, zmm7, zmm1, 150 + vpternlogq zmm29, zmm20, zmm19, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm19, zmm19, zmm30 + ; Rho - rotate each lane in place + vprolq zmm17, zmm17, 1 + vprolq zmm9, zmm9, 62 + vprolq zmm21, zmm21, 28 + vprolq zmm13, zmm13, 27 + vprolq zmm24, zmm24, 36 + vprolq zmm11, zmm11, 44 + vprolq zmm3, zmm3, 6 + vprolq zmm15, zmm15, 55 + vprolq zmm7, zmm7, 20 + vprolq zmm18, zmm18, 3 + vprolq zmm5, zmm5, 10 + vprolq zmm22, zmm22, 43 + vprolq zmm14, zmm14, 25 + vprolq zmm1, zmm1, 39 + vprolq zmm12, zmm12, 41 + vprolq zmm4, zmm4, 45 + vprolq zmm16, zmm16, 15 + vprolq zmm8, zmm8, 21 + vprolq zmm20, zmm20, 8 + vprolq zmm6, zmm6, 18 + vprolq zmm23, zmm23, 2 + vprolq zmm10, zmm10, 61 + vprolq zmm2, zmm2, 56 + vprolq zmm19, zmm19, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm0, zmm11, zmm22, 210 + vpternlogq zmm11, zmm22, zmm8, 210 + vpternlogq zmm22, zmm8, zmm19, 210 + vpternlogq zmm8, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm21, zmm7, zmm18, 210 + vpternlogq zmm7, zmm18, zmm4, 210 + vpternlogq zmm18, zmm4, zmm10, 210 + vpternlogq zmm4, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm17, zmm3, zmm14, 210 + vpternlogq zmm3, zmm14, zmm20, 210 + vpternlogq zmm14, zmm20, zmm6, 210 + vpternlogq zmm20, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm13, zmm24, zmm5, 210 + vpternlogq zmm24, zmm5, zmm16, 210 + vpternlogq zmm5, zmm16, zmm2, 210 + vpternlogq zmm16, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm9, zmm15, zmm1, 210 + vpternlogq zmm15, zmm1, zmm12, 210 + vpternlogq zmm1, zmm12, zmm23, 210 + vpternlogq zmm12, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1280] + ; Round 21 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm21, zmm17, 150 + vpternlogq zmm25, zmm13, zmm9, 150 + vmovdqu64 zmm26, zmm11 + vpternlogq zmm26, zmm7, zmm3, 150 + vpternlogq zmm26, zmm24, zmm15, 150 + vmovdqu64 zmm27, zmm22 + vpternlogq zmm27, zmm18, zmm14, 150 + vpternlogq zmm27, zmm5, zmm1, 150 + vmovdqu64 zmm28, zmm8 + vpternlogq zmm28, zmm4, zmm20, 150 + vpternlogq zmm28, zmm16, zmm12, 150 + vmovdqu64 zmm29, zmm19 + vpternlogq zmm29, zmm10, zmm6, 150 + vpternlogq zmm29, zmm2, zmm23, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm23, zmm23, zmm30 + ; Rho - rotate each lane in place + vprolq zmm11, zmm11, 1 + vprolq zmm22, zmm22, 62 + vprolq zmm8, zmm8, 28 + vprolq zmm19, zmm19, 27 + vprolq zmm21, zmm21, 36 + vprolq zmm7, zmm7, 44 + vprolq zmm18, zmm18, 6 + vprolq zmm4, zmm4, 55 + vprolq zmm10, zmm10, 20 + vprolq zmm17, zmm17, 3 + vprolq zmm3, zmm3, 10 + vprolq zmm14, zmm14, 43 + vprolq zmm20, zmm20, 25 + vprolq zmm6, zmm6, 39 + vprolq zmm13, zmm13, 41 + vprolq zmm24, zmm24, 45 + vprolq zmm5, zmm5, 15 + vprolq zmm16, zmm16, 21 + vprolq zmm2, zmm2, 8 + vprolq zmm9, zmm9, 18 + vprolq zmm15, zmm15, 2 + vprolq zmm1, zmm1, 61 + vprolq zmm12, zmm12, 56 + vprolq zmm23, zmm23, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm0, zmm7, zmm14, 210 + vpternlogq zmm7, zmm14, zmm16, 210 + vpternlogq zmm14, zmm16, zmm23, 210 + vpternlogq zmm16, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm8, zmm10, zmm17, 210 + vpternlogq zmm10, zmm17, zmm24, 210 + vpternlogq zmm17, zmm24, zmm1, 210 + vpternlogq zmm24, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm11, zmm18, zmm20, 210 + vpternlogq zmm18, zmm20, zmm2, 210 + vpternlogq zmm20, zmm2, zmm9, 210 + vpternlogq zmm2, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm19, zmm21, zmm3, 210 + vpternlogq zmm21, zmm3, zmm5, 210 + vpternlogq zmm3, zmm5, zmm12, 210 + vpternlogq zmm5, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm22, zmm4, zmm6, 210 + vpternlogq zmm4, zmm6, zmm13, 210 + vpternlogq zmm6, zmm13, zmm15, 210 + vpternlogq zmm13, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1344] + ; Round 22 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm8, zmm11, 150 + vpternlogq zmm25, zmm19, zmm22, 150 + vmovdqu64 zmm26, zmm7 + vpternlogq zmm26, zmm10, zmm18, 150 + vpternlogq zmm26, zmm21, zmm4, 150 + vmovdqu64 zmm27, zmm14 + vpternlogq zmm27, zmm17, zmm20, 150 + vpternlogq zmm27, zmm3, zmm6, 150 + vmovdqu64 zmm28, zmm16 + vpternlogq zmm28, zmm24, zmm2, 150 + vpternlogq zmm28, zmm5, zmm13, 150 + vmovdqu64 zmm29, zmm23 + vpternlogq zmm29, zmm1, zmm9, 150 + vpternlogq zmm29, zmm12, zmm15, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm15, zmm15, zmm30 + ; Rho - rotate each lane in place + vprolq zmm7, zmm7, 1 + vprolq zmm14, zmm14, 62 + vprolq zmm16, zmm16, 28 + vprolq zmm23, zmm23, 27 + vprolq zmm8, zmm8, 36 + vprolq zmm10, zmm10, 44 + vprolq zmm17, zmm17, 6 + vprolq zmm24, zmm24, 55 + vprolq zmm1, zmm1, 20 + vprolq zmm11, zmm11, 3 + vprolq zmm18, zmm18, 10 + vprolq zmm20, zmm20, 43 + vprolq zmm2, zmm2, 25 + vprolq zmm9, zmm9, 39 + vprolq zmm19, zmm19, 41 + vprolq zmm21, zmm21, 45 + vprolq zmm3, zmm3, 15 + vprolq zmm5, zmm5, 21 + vprolq zmm12, zmm12, 8 + vprolq zmm22, zmm22, 18 + vprolq zmm4, zmm4, 2 + vprolq zmm6, zmm6, 61 + vprolq zmm13, zmm13, 56 + vprolq zmm15, zmm15, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm0, zmm10, zmm20, 210 + vpternlogq zmm10, zmm20, zmm5, 210 + vpternlogq zmm20, zmm5, zmm15, 210 + vpternlogq zmm5, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm16, zmm1, zmm11, 210 + vpternlogq zmm1, zmm11, zmm21, 210 + vpternlogq zmm11, zmm21, zmm6, 210 + vpternlogq zmm21, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm7, zmm17, zmm2, 210 + vpternlogq zmm17, zmm2, zmm12, 210 + vpternlogq zmm2, zmm12, zmm22, 210 + vpternlogq zmm12, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm23, zmm8, zmm18, 210 + vpternlogq zmm8, zmm18, zmm3, 210 + vpternlogq zmm18, zmm3, zmm13, 210 + vpternlogq zmm3, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm14, zmm24, zmm9, 210 + vpternlogq zmm24, zmm9, zmm19, 210 + vpternlogq zmm9, zmm19, zmm4, 210 + vpternlogq zmm19, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1408] + ; Round 23 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm16, zmm7, 150 + vpternlogq zmm25, zmm23, zmm14, 150 + vmovdqu64 zmm26, zmm10 + vpternlogq zmm26, zmm1, zmm17, 150 + vpternlogq zmm26, zmm8, zmm24, 150 + vmovdqu64 zmm27, zmm20 + vpternlogq zmm27, zmm11, zmm2, 150 + vpternlogq zmm27, zmm18, zmm9, 150 + vmovdqu64 zmm28, zmm5 + vpternlogq zmm28, zmm21, zmm12, 150 + vpternlogq zmm28, zmm3, zmm19, 150 + vmovdqu64 zmm29, zmm15 + vpternlogq zmm29, zmm6, zmm22, 150 + vpternlogq zmm29, zmm13, zmm4, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm4, zmm4, zmm30 + ; Rho - rotate each lane in place + vprolq zmm10, zmm10, 1 + vprolq zmm20, zmm20, 62 + vprolq zmm5, zmm5, 28 + vprolq zmm15, zmm15, 27 + vprolq zmm16, zmm16, 36 + vprolq zmm1, zmm1, 44 + vprolq zmm11, zmm11, 6 + vprolq zmm21, zmm21, 55 + vprolq zmm6, zmm6, 20 + vprolq zmm7, zmm7, 3 + vprolq zmm17, zmm17, 10 + vprolq zmm2, zmm2, 43 + vprolq zmm12, zmm12, 25 + vprolq zmm22, zmm22, 39 + vprolq zmm23, zmm23, 41 + vprolq zmm8, zmm8, 45 + vprolq zmm18, zmm18, 15 + vprolq zmm3, zmm3, 21 + vprolq zmm13, zmm13, 8 + vprolq zmm14, zmm14, 18 + vprolq zmm24, zmm24, 2 + vprolq zmm9, zmm9, 61 + vprolq zmm19, zmm19, 56 + vprolq zmm4, zmm4, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm0, zmm1, zmm2, 210 + vpternlogq zmm1, zmm2, zmm3, 210 + vpternlogq zmm2, zmm3, zmm4, 210 + vpternlogq zmm3, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm5, zmm6, zmm7, 210 + vpternlogq zmm6, zmm7, zmm8, 210 + vpternlogq zmm7, zmm8, zmm9, 210 + vpternlogq zmm8, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm10, zmm11, zmm12, 210 + vpternlogq zmm11, zmm12, zmm13, 210 + vpternlogq zmm12, zmm13, zmm14, 210 + vpternlogq zmm13, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm15, zmm16, zmm17, 210 + vpternlogq zmm16, zmm17, zmm18, 210 + vpternlogq zmm17, zmm18, zmm19, 210 + vpternlogq zmm18, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm20, zmm21, zmm22, 210 + vpternlogq zmm21, zmm22, zmm23, 210 + vpternlogq zmm22, zmm23, zmm24, 210 + vpternlogq zmm23, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1472] + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vmovdqu64 [rcx+1024], zmm16 + vmovdqu64 [rcx+1088], zmm17 + vmovdqu64 [rcx+1152], zmm18 + vmovdqu64 [rcx+1216], zmm19 + vmovdqu64 [rcx+1280], zmm20 + vmovdqu64 [rcx+1344], zmm21 + vmovdqu64 [rcx+1408], zmm22 + vmovdqu64 [rcx+1472], zmm23 + vmovdqu64 [rcx+1536], zmm24 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +sha3_256_blocksx8_seed_64_avx512 ENDP +_TEXT ENDS +ENDIF ENDIF ENDIF END diff --git a/wolfcrypt/src/wc_frodokem_mat.c b/wolfcrypt/src/wc_frodokem_mat.c index 7ef77cd5f4..348abe8438 100644 --- a/wolfcrypt/src/wc_frodokem_mat.c +++ b/wolfcrypt/src/wc_frodokem_mat.c @@ -41,6 +41,7 @@ #if defined(USE_INTEL_SPEEDUP) || defined(FRODOKEM_HAVE_SVE) || \ (defined(FRODOKEM_HAVE_NEON_ASM) && defined(__aarch64__)) #include + #endif #ifdef WOLFSSL_FRODOKEM_AES #include @@ -932,7 +933,7 @@ static void frodokem_sample_matrix(word16* mat, int cnt, const byte* r, else #endif #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { frodokem_sample_avx512(mat, cnt, p->cdf, p->cdfLen); RESTORE_VECTOR_REGISTERS(); } @@ -1727,7 +1728,7 @@ static int frodokem_mul_add_as_plus_e_aes(word16* out, const word16* s, /* Generate the A rows in batches matching the fused asm accumulate (eight * with AVX512, four with AVX2); n is a multiple of 8 for every set. */ #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if ((ret == 0) && IS_INTEL_AVX512(cpuid_flags) && + if ((ret == 0) && USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { for (i = 0; i < n; i += 8) { /* Widest matrix-A generator available at run time (cf. aes.c): @@ -1857,7 +1858,7 @@ static int frodokem_mul_add_as_plus_e_shake(word16* out, const word16* s, /* When AVX512 is available, generate and consume eight A rows at a time * with the 8-way SHAKE permutation. n is a multiple of 8 for every param * set, so there is no remainder loop. */ - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = 0; for (i = 0; i < n; i += 8) { ret = frodokem_gen_a_row_shake_x8(row, seedA, i, p); @@ -2031,7 +2032,7 @@ static int frodokem_mul_add_sa_plus_e_aes(word16* out, const word16* s, /* Generate the A rows in batches matching the fused asm accumulate (eight * with AVX512, four with AVX2); n is a multiple of 8 for every set. */ #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if ((ret == 0) && IS_INTEL_AVX512(cpuid_flags) && + if ((ret == 0) && USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { for (j = 0; j < n; j += 8) { /* Widest matrix-A generator available at run time (cf. aes.c): @@ -2165,7 +2166,7 @@ static int frodokem_mul_add_sa_plus_e_shake(word16* out, const word16* s, /* When AVX512 is available, generate and consume eight A rows at a time * with the 8-way SHAKE permutation. n is a multiple of 8 for every param * set, so there is no remainder loop. */ - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = 0; for (j = 0; j < n; j += 8) { ret = frodokem_gen_a_row_shake_x8(row, seedA, j, p); @@ -2331,7 +2332,7 @@ void frodokem_mul_add_sb_plus_e(word16* out, const word16* b, const word16* s, else #endif #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { frodokem_mul_add_sb_plus_e_avx512(out, b, s, n, qmask); RESTORE_VECTOR_REGISTERS(); } @@ -2609,7 +2610,7 @@ void frodokem_mul_bs(word16* out, const word16* b, const word16* s, else #endif #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { frodokem_mul_bs_avx512(out, b, s, n, qmask); RESTORE_VECTOR_REGISTERS(); } @@ -2870,7 +2871,7 @@ void frodokem_add(word16* a, const word16* b, int qmask) else #endif #ifdef FRODOKEM_HAVE_MATRIX_ASM_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { frodokem_add_avx512(a, b, qmask); RESTORE_VECTOR_REGISTERS(); } diff --git a/wolfcrypt/src/wc_mldsa.c b/wolfcrypt/src/wc_mldsa.c index 689a25ccd8..d2339517ca 100644 --- a/wolfcrypt/src/wc_mldsa.c +++ b/wolfcrypt/src/wc_mldsa.c @@ -483,7 +483,7 @@ static int mldsa_shake256(wc_Shake* shake256, const byte* data, dataLen -= WC_SHA3_256_COUNT * 8; data += WC_SHA3_256_COUNT * 8; #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); @@ -499,7 +499,7 @@ static int mldsa_shake256(wc_Shake* shake256, const byte* data, if (dataLen >= WC_SHA3_256_COUNT * 8) { #ifndef WC_SHA3_NO_ASM word32 n = dataLen / (WC_SHA3_256_COUNT * 8); - if (IS_INTEL_AVX2(cpuid_flags) && + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_n_avx2(state, data, n, WC_SHA3_256_COUNT * 8); RESTORE_VECTOR_REGISTERS(); @@ -538,7 +538,7 @@ static int mldsa_shake256(wc_Shake* shake256, const byte* data, } #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); } @@ -608,7 +608,7 @@ static int mldsa_hash256(wc_Shake* shake256, const byte* data1, data2Len -= WC_SHA3_256_COUNT * 8 - data1Len; data2 += WC_SHA3_256_COUNT * 8 - data1Len; #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); @@ -625,7 +625,7 @@ static int mldsa_hash256(wc_Shake* shake256, const byte* data1, if (data2Len >= WC_SHA3_256_COUNT * 8) { #ifndef WC_SHA3_NO_ASM word32 n = data2Len / (WC_SHA3_256_COUNT * 8); - if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_n_avx2(state, data2, n, WC_SHA3_256_COUNT * 8); RESTORE_VECTOR_REGISTERS(); n *= WC_SHA3_256_COUNT * 8; @@ -667,7 +667,7 @@ static int mldsa_hash256(wc_Shake* shake256, const byte* data1, } #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); } @@ -910,7 +910,7 @@ static int mldsa_get_hash_oid(int hash, byte* oidBuffer, word32* oidLen) * @param [in] in Block of data to hash. * @param [in] inLen Length of data in bytes. * @param [out] out Buffer to hold hash result. - * @param [in] outLen Number of hash blocks to return. + * @param [in] outBlocks Number of hash blocks to return. * @return 0 on success. * @return Negative on error. */ @@ -946,7 +946,7 @@ static int mldsa_squeeze128(wc_Shake* shake128, const byte* in, * @param [in] in Block of data to hash. * @param [in] inLen Length of data in bytes. * @param [out] out Buffer to hold hash result. - * @param [in] outLen Number of hash blocks to return. + * @param [in] outBlocks Number of hash blocks to return. * @return 0 on success. * @return Negative on hash error. */ @@ -965,7 +965,7 @@ static int mldsa_squeeze256(wc_Shake* shake256, const byte* in, for (; outBlocks > 0; outBlocks--) { #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); @@ -1120,6 +1120,33 @@ static void mldsa_vec_encode_eta_bits(const sword32* s, byte d, byte eta, byte* p) { #ifdef USE_INTEL_SPEEDUP +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* eta = 4 packs one polynomial per call - vpmovqb needs no lane pairing. + * eta = 2 still pairs, so an odd trailing polynomial is left to the C + * code: the AVX2 entry points take a whole vector, not one polynomial. */ + if (USE_INTEL_AVX512(cpuid_flags) && (eta == MLDSA_ETA_4) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + unsigned int i; + for (i = 0; i < d; i++) { + wc_mldsa_encode_eta_4_avx512(s, p); + s += MLDSA_N; + p += MLDSA_N / 2; + } + RESTORE_VECTOR_REGISTERS(); + } + else if (USE_INTEL_AVX512(cpuid_flags) && ((d & 1) == 0) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + unsigned int i; + unsigned int e = MLDSA_ETA_2_BITS * MLDSA_N / 8; + for (i = 0; i < d; i += 2) { + wc_mldsa_encode_eta_2_x2_avx512(s, s + MLDSA_N, p, p + e); + s += 2 * MLDSA_N; + p += 2 * e; + } + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { #if !defined(WOLFSSL_NO_ML_DSA_44) || !defined(WOLFSSL_NO_ML_DSA_87) /* -2..2 */ @@ -1309,11 +1336,24 @@ static void mldsa_vec_decode_eta_bits(const byte* p, byte eta, sword32* s, #if !defined(WOLFSSL_NO_ML_DSA_44) || !defined(WOLFSSL_NO_ML_DSA_87) /* -2..2 */ if (eta == MLDSA_ETA_2) { + unsigned int e = MLDSA_ETA_2_BITS * MLDSA_N / 8; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Two polynomials per call; an odd trailing one falls through. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < d; i += 2) { + wc_mldsa_decode_eta_2_x2_avx512(p, p + e, s, s + MLDSA_N); + p += 2 * e; + s += 2 * MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 5 or 8: For each polynomial of vector */ - for (i = 0; i < d; i++) { + for (; i < d; i++) { mldsa_decode_eta_2_bits(p, s); /* Move to next place to decode from. */ - p += MLDSA_ETA_2_BITS * MLDSA_N / 8; + p += e; /* Next polynomial. */ s += MLDSA_N; } @@ -1322,11 +1362,23 @@ static void mldsa_vec_decode_eta_bits(const byte* p, byte eta, sword32* s, #ifndef WOLFSSL_NO_ML_DSA_65 /* -4..4 */ if (eta == MLDSA_ETA_4) { + unsigned int e = MLDSA_N / 2; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < d; i += 2) { + wc_mldsa_decode_eta_4_x2_avx512(p, p + e, s, s + MLDSA_N); + p += 2 * e; + s += 2 * MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 5 or 8: For each polynomial of vector */ - for (i = 0; i < d; i++) { + for (; i < d; i++) { mldsa_decode_eta_4_bits(p, s); /* Move to next place to decode from. */ - p += MLDSA_N / 2; + p += e; /* Next polynomial. */ s += MLDSA_N; } @@ -1473,6 +1525,43 @@ static void mldsa_vec_encode_t0_t1(const sword32* t, byte d, byte* t0, byte* t1) { #ifdef USE_INTEL_SPEEDUP +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512_VBMI + /* vpermb gathers a whole register's encoded bytes, so this needs no + * polynomial pairing and takes any dimension. */ + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + unsigned int i; + unsigned int e0 = MLDSA_D * MLDSA_N / 8; + unsigned int e1 = MLDSA_U * MLDSA_N / 8; + for (i = 0; i < d; i++) { + wc_mldsa_encode_t0_t1_avx512_vbmi(t, t0, t1); + t += MLDSA_N; + t0 += e0; + t1 += e1; + } + RESTORE_VECTOR_REGISTERS(); + } + else +#endif + /* Two polynomials per call; the AVX2 entry takes a whole vector, so an + * odd dimension stays on it. */ + if (USE_INTEL_AVX512(cpuid_flags) && ((d & 1) == 0) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + unsigned int i; + unsigned int e0 = MLDSA_D * MLDSA_N / 8; + unsigned int e1 = MLDSA_U * MLDSA_N / 8; + for (i = 0; i < d; i += 2) { + wc_mldsa_encode_t0_t1_x2_avx512(t, t + MLDSA_N, t0, t0 + e0, t1, + t1 + e1); + t += 2 * MLDSA_N; + t0 += 2 * e0; + t1 += 2 * e1; + } + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_vec_encode_t0_t1_avx2(t, d, t0, t1); RESTORE_VECTOR_REGISTERS(); @@ -1494,7 +1583,6 @@ static void mldsa_vec_encode_t0_t1(const sword32* t, byte d, byte* t0, * ... * * @param [in] t0 Encoded values of t0. - * @param [in] d Dimensions of vector t0. * @param [out] t Vector of polynomials. */ static void mldsa_decode_t0_c(const byte* t0, sword32* t) @@ -1565,7 +1653,6 @@ static void mldsa_decode_t0_c(const byte* t0, sword32* t) /* Decode bottom D bits of t as t0. * * @param [in] t0 Encoded values of t0. - * @param [in] d Dimensions of vector t0. * @param [out] t Vector of polynomials. */ static void mldsa_decode_t0(const byte* t0, sword32* t) @@ -1603,8 +1690,21 @@ static void mldsa_vec_decode_t0(const byte* t0, byte d, sword32* t) { unsigned int i; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Two polynomials per call; an odd trailing one falls through. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < d; i += 2) { + wc_mldsa_decode_t0_x2_avx512(t0, t0 + MLDSA_D * MLDSA_N / 8, t, + t + MLDSA_N); + t0 += 2 * (MLDSA_D * MLDSA_N / 8); + t += 2 * MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 11. For each polynomial of vector. */ - for (i = 0; i < d; i++) { + for (; i < d; i++) { mldsa_decode_t0(t0, t); t0 += MLDSA_D * MLDSA_N / 8; /* Next polynomial. */ @@ -1734,8 +1834,21 @@ static void mldsa_vec_decode_t1(const byte* t1, byte d, sword32* t) { unsigned int i; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Two polynomials per call; an odd trailing one falls through. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < d; i += 2) { + wc_mldsa_decode_t1_x2_avx512(t1, t1 + MLDSA_U * MLDSA_N / 8, t, + t + MLDSA_N); + t1 += 2 * (MLDSA_U * MLDSA_N / 8); + t += 2 * MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 3. For each polynomial of vector. */ - for (i = 0; i < d; i++) { + for (; i < d; i++) { mldsa_decode_t1(t1, t); /* Next polynomial. */ t1 += MLDSA_U * MLDSA_N / 8; @@ -1801,6 +1914,13 @@ static void mldsa_encode_gamma1_17_bits_c(const sword32* z, byte* s) */ static void mldsa_encode_gamma1_17_bits(const sword32* z, byte* s) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_encode_gamma1_17_avx512(z, s); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_encode_gamma1_17_avx2(z, s); @@ -1870,6 +1990,13 @@ static void mldsa_encode_gamma1_19_bits_c(const sword32* z, byte* s) */ static void mldsa_encode_gamma1_19_bits(const sword32* z, byte* s) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_encode_gamma1_19_avx512(z, s); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_encode_gamma1_19_avx2(z, s); @@ -1907,6 +2034,9 @@ static void mldsa_vec_encode_gamma1(const sword32* z, byte l, int bits, #ifndef WOLFSSL_NO_ML_DSA_44 if (bits == MLDSA_GAMMA1_BITS_17) { + /* No AVX512 pair loop here: the gamma1 encoders pack a whole + * polynomial per call, so the dispatch is inside the per-polynomial + * function. */ /* Step 2. For each polynomial of vector. */ for (i = 0; i < PARAMS_ML_DSA_44_L; i++) { mldsa_encode_gamma1_17_bits(z, s); @@ -1919,11 +2049,12 @@ static void mldsa_vec_encode_gamma1(const sword32* z, byte l, int bits, #endif #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) if (bits == MLDSA_GAMMA1_BITS_19) { + unsigned int e = MLDSA_GAMMA1_19_ENC_BITS / 2 * MLDSA_N / 4; /* Step 2. For each polynomial of vector. */ for (i = 0; i < l; i++) { mldsa_encode_gamma1_19_bits(z, s); /* Move to next place to encode to. */ - s += MLDSA_GAMMA1_19_ENC_BITS / 2 * MLDSA_N / 4; + s += e; /* Next polynomial. */ z += MLDSA_N; } @@ -2254,12 +2385,31 @@ static void mldsa_vec_decode_gamma1(const byte* x, byte l, int bits, { unsigned int i; + unsigned int e = MLDSA_N / 8 * (unsigned int)(bits + 1); + + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Two polynomials per call; an odd trailing one falls through. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < l; i += 2) { + if (bits == MLDSA_GAMMA1_BITS_17) { + wc_mldsa_decode_gamma1_17_x2_avx512(x, x + e, z, z + MLDSA_N); + } + else { + wc_mldsa_decode_gamma1_19_x2_avx512(x, x + e, z, z + MLDSA_N); + } + x += 2 * e; + z += 2 * MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 3: For each polynomial of vector. */ - for (i = 0; i < l; i++) { + for (; i < l; i++) { /* Step 4: Unpack a polynomial. */ mldsa_decode_gamma1(x, bits, z); /* Move pointers on to next polynomial. */ - x += MLDSA_N / 8 * (bits + 1); + x += e; z += MLDSA_N; } } @@ -2276,7 +2426,6 @@ static void mldsa_vec_decode_gamma1(const byte* x, byte l, int bits, * ... * * @param [in] w1 Vector of polynomials to encode. - * @param [in] gamma2 Maximum value in range. * @param [out] w1e Buffer to encode into. */ static void mldsa_encode_w1_88_c(const sword32* w1, byte* w1e) @@ -2328,7 +2477,6 @@ static void mldsa_encode_w1_88_c(const sword32* w1, byte* w1e) /* Encode w1 with range of 0..((q-1)/(2*GAMMA2)-1). * * @param [in] w1 Vector of polynomials to encode. - * @param [in] gamma2 Maximum value in range. * @param [out] w1e Buffer to encode into. */ static void mldsa_encode_w1_88(const sword32* w1, byte* w1e) @@ -2361,7 +2509,6 @@ WOLFSSL_TEST_VIS void wc_mldsa_encode_w1_88(const sword32* w1, byte* w1e) * ... * * @param [in] w1 Vector of polynomials to encode. - * @param [in] gamma2 Maximum value in range. * @param [out] w1e Buffer to encode into. */ static void mldsa_encode_w1_32_c(const sword32* w1, byte* w1e) @@ -2407,7 +2554,6 @@ static void mldsa_encode_w1_32_c(const sword32* w1, byte* w1e) /* Encode w1 with range of 0..((q-1)/(2*GAMMA2)-1). * * @param [in] w1 Vector of polynomials to encode. - * @param [in] gamma2 Maximum value in range. * @param [out] w1e Buffer to encode into. */ static void mldsa_encode_w1_32(const sword32* w1, byte* w1e) @@ -2458,24 +2604,67 @@ static void mldsa_vec_encode_w1(const sword32* w1, byte k, sword32 gamma2, #ifndef WOLFSSL_NO_ML_DSA_44 if (gamma2 == MLDSA_Q_LOW_88) { + unsigned int e = MLDSA_Q_HI_88_ENC_BITS * 2 * MLDSA_N / 16; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && \ + defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512_VBMI) + /* vpermb gathers the encoded bytes of a whole register, so the VBMI + * encoder needs no polynomial pairing and does the entire vector. */ + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i < PARAMS_ML_DSA_44_K; i++) { + wc_mldsa_encode_w1_88_avx512_vbmi(w1, w1e); + w1 += MLDSA_N; + w1e += e; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Two polynomials per pass; an odd trailing one falls through. */ + if ((i == 0) && USE_INTEL_AVX512(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i + 1 < PARAMS_ML_DSA_44_K; i += 2) { + wc_mldsa_encode_w1_88_x2_avx512(w1, w1 + MLDSA_N, w1e, + w1e + e); + w1 += 2 * MLDSA_N; + w1e += 2 * e; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 2. For each polynomial of vector. */ - for (i = 0; i < PARAMS_ML_DSA_44_K; i++) { + for (; i < PARAMS_ML_DSA_44_K; i++) { mldsa_encode_w1_88(w1, w1e); /* Next polynomial. */ w1 += MLDSA_N; - w1e += MLDSA_Q_HI_88_ENC_BITS * 2 * MLDSA_N / 16; + w1e += e; } } else #endif #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) if (gamma2 == MLDSA_Q_LOW_32) { + unsigned int e = MLDSA_Q_HI_32_ENC_BITS * 2 * MLDSA_N / 16; + i = 0; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* One polynomial per pass - vpmovqb needs no lane pairing. */ + if (USE_INTEL_AVX512(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i < k; i++) { + wc_mldsa_encode_w1_32_avx512(w1, w1e); + w1 += MLDSA_N; + w1e += e; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif /* Step 2. For each polynomial of vector. */ - for (i = 0; i < k; i++) { + for (; i < k; i++) { mldsa_encode_w1_32(w1, w1e); /* Next polynomial. */ w1 += MLDSA_N; - w1e += MLDSA_Q_HI_32_ENC_BITS * 2 * MLDSA_N / 16; + w1e += e; } } else @@ -2795,6 +2984,14 @@ static int mldsa_rej_ntt_poly(wc_Shake* shake128, byte* seed, sword32* a, /* Number of bytes to generate for matrix. */ #define GEN_MATRIX_SIZE GEN_MATRIX_NBLOCKS * SHA3_128_BYTES +/* wc_mldsa_rej_uniform_n_avx2()'s wide path walks the buffer without + * rechecking rLen, so GEN_MATRIX_SIZE has to cover a whole polynomial: + * three bytes per candidate for MLDSA_N coefficients, before any are + * rejected. Five blocks leaves headroom for the rejections that do + * occur; drop GEN_MATRIX_NBLOCKS below that and the sampler reads past + * the end of the buffer. */ +wc_static_assert(GEN_MATRIX_SIZE >= MLDSA_N * 3); + #ifndef WOLFSSL_NO_ML_DSA_44 /* Deterministically generate a matrix (or transpose) of uniform integers mod q. * @@ -3156,6 +3353,124 @@ static int wc_mldsa_gen_matrix_8x7_avx2(sword32* a, byte* seed) } #endif +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 +/* Deterministically generate a matrix (or transpose) of uniform integers mod q. + * + * Squeezes eight SHAKE-128 instances at a time with the AVX512 Keccak, one per + * matrix entry, rather than the four of the AVX2 implementation. Entries are + * taken in row-major order, so entry n is row n / l and column n % l. A final + * batch with fewer than eight entries still runs all eight lanes - the surplus + * lanes are seeded with a harmless nonce and their output ignored, which is + * cheaper than dropping back to a narrower permutation. + * + * @param [out] a Matrix of uniform integers. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] k First dimension of matrix. + * @param [in] l Second dimension of matrix. + * @param [in] heap Dynamic memory allocation hint. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int wc_mldsa_gen_matrix_avx512(sword32* a, byte* seed, byte k, + byte l, void* heap) +{ + unsigned int i; + unsigned int n; + unsigned int cnt; + unsigned int done; + unsigned int entries = (unsigned int)k * l; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * GEN_MATRIX_SIZE + 2]; + word64 state[25 * 8]; +#endif + unsigned int ctr[8]; + + (void)heap; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * GEN_MATRIX_SIZE + 2, heap, + DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, heap, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + /* Loading 64 bits, only using 48 bits. Loading 2 bytes more than used. */ + rand[8 * GEN_MATRIX_SIZE + 0] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 1] = 0xff; + + for (n = 0; n < entries; n += 8) { + cnt = entries - n; + if (cnt > 8) { + cnt = 8; + } + + for (i = 0; i < 8; i++) { + if (i < cnt) { + unsigned int e = n + i; + state[4 * 8 + i] = 0x1f0000U + ((word32)(e / l) << 8) + + (word32)(e % l); + } + else { + /* Unused lane - any nonce will do, the output is discarded. */ + state[4 * 8 + i] = 0x1f0000U; + } + } + + sha3_128_blocksx8_seed_avx512(state, seed); + wc_mldsa_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { + sha3_blocksx8_avx512(state); + wc_mldsa_redistribute_21_rand_x8_avx512(state, rand + i, + GEN_MATRIX_SIZE); + } + + /* Sample random bytes to create a polynomial. */ + for (i = 0; i < cnt; i++) { + ctr[i] = (word32)wc_mldsa_rej_uniform_n_avx512( + a + (n + i) * MLDSA_N, MLDSA_N, rand + i * GEN_MATRIX_SIZE, + GEN_MATRIX_SIZE); + } + + /* Create more blocks if too many rejected. */ + do { + done = 1; + for (i = 0; i < cnt; i++) { + if (ctr[i] < MLDSA_N) { + done = 0; + } + } + if (done) { + break; + } + + sha3_blocksx8_avx512(state); + wc_mldsa_redistribute_21_rand_x8_avx512(state, rand, + GEN_MATRIX_SIZE); + for (i = 0; i < cnt; i++) { + ctr[i] += (word32)wc_mldsa_rej_uniform_avx512( + a + (n + i) * MLDSA_N + ctr[i], MLDSA_N - ctr[i], + rand + i * GEN_MATRIX_SIZE, SHA3_128_BYTES); + } + } + while (!done); + } + + WC_FREE_VAR_EX(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} +#endif /* WOLFSSL_MLDSA_HAVE_INTEL_AVX512 */ + #endif /* Expand the seed to create matrix a. @@ -3235,6 +3550,17 @@ static int mldsa_expand_a(wc_Shake* shake128, const byte* pub_seed, #endif #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + /* Eight SHAKE-128 instances per permutation instead of four. Handles any + * k x l, so it comes before the fixed-size AVX2 implementations. */ + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_BMI2(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + XMEMCPY(seed, pub_seed, MLDSA_PUB_SEED_SZ); + ret = wc_mldsa_gen_matrix_avx512(a, seed, k, l, heap); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifndef WOLFSSL_NO_ML_DSA_44 if ((k == 4) && (l == 4) && IS_INTEL_AVX2(cpuid_flags) && IS_INTEL_BMI2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { @@ -3346,7 +3672,7 @@ static const signed char mldsa_coeff_eta2[] = { * @return Value in range of -ETA..ETA on success. */ #define MLDSA_COEFF_S_VALID(b, eta) \ - (((eta) == MLDSA_ETA_2) ? MLDSA_COEFF_S_VALID_ETA2(b) \ + (((eta) == MLDSA_ETA_2) ? MLDSA_COEFF_S_VALID_ETA2(b) \ : MLDSA_COEFF_S_VALID_ETA4(b)) /* Convert random value 0..15 to a value in range of -ETA..ETA. @@ -3363,7 +3689,7 @@ static const signed char mldsa_coeff_eta2[] = { * @return Value in range of -ETA..ETA on success. */ #define MLDSA_COEFF_S(b, eta) \ - (((eta) == MLDSA_ETA_2) ? MLDSA_COEFF_S_ETA2(b) \ + (((eta) == MLDSA_ETA_2) ? MLDSA_COEFF_S_ETA2(b) \ : MLDSA_COEFF_S_ETA4(b)) #else @@ -3438,12 +3764,12 @@ static const signed char mldsa_coeff_eta2[] = { #define EXTRACT_COEFF_NIBBLE_CHECK_J(z, rs, t, eta) \ (t) = (sword8)(((z) >> (rs)) & 0xf); \ /* Step 7: Check we have a valid coefficient. */ \ - if (MLDSA_COEFF_S_VALID(t, eta)) { \ - (t) = (sword8)MLDSA_COEFF_S(t, eta); \ + if (MLDSA_COEFF_S_VALID(t, eta)) { \ + (t) = (sword8)MLDSA_COEFF_S(t, eta); \ /* Step 8: Store coefficient as next polynomial value. \ * Step 9: Increment count of polynomial values set. */ \ s[j++] = (sword32)(t); \ - if (j == MLDSA_N) { \ + if (j == MLDSA_N) { \ break; \ } \ } @@ -3460,8 +3786,8 @@ static const signed char mldsa_coeff_eta2[] = { #define EXTRACT_COEFF_NIBBLE(z, rs, t, eta) \ (t) = (sword8)(((z) >> (rs)) & 0xf); \ /* Step 7: Check we have a valid coefficient. */ \ - if (MLDSA_COEFF_S_VALID(t, eta)) { \ - (t) = (sword8)MLDSA_COEFF_S(t, eta); \ + if (MLDSA_COEFF_S_VALID(t, eta)) { \ + (t) = (sword8)MLDSA_COEFF_S(t, eta); \ /* Step 8: Store coefficient as next polynomial value. \ * Step 9: Increment count of polynomial values set. */ \ s[j++] = (sword32)(t); \ @@ -3598,6 +3924,7 @@ static void mldsa_extract_coeffs(const byte* z, unsigned int zLen, * * @param [in, out] shake256 SHAKE-256 object. * @param [in] seed Seed, rho, to hash to generate values. + * @param [out] s Polynomial with coefficients in -eta..eta. * @param [in] eta Range specifier of each value. * @return 0 on success. * @return Negative on hash error. @@ -3683,7 +4010,7 @@ static int mldsa_rej_bound_poly(wc_Shake* shake256, byte* seed, sword32* s, * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. + * @param [out] s Vectors s1 and s2 of small coefficients. * @param [in] seed Bytes to seed XOF generation. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when @@ -3791,7 +4118,7 @@ static int wc_mldsa_gen_s_4_4_avx2(sword32* s[2], byte* seed) * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. + * @param [out] s Vectors s1 and s2 of small coefficients. * @param [in] seed Bytes to seed XOF generation. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when @@ -3947,7 +4274,7 @@ static int wc_mldsa_gen_s_5_6_avx2(sword32* s[2], byte* seed) * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. + * @param [out] s Vectors s1 and s2 of small coefficients. * @param [in] seed Bytes to seed XOF generation. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when @@ -4099,6 +4426,128 @@ static int wc_mldsa_gen_s_7_8_avx2(sword32* s[2], byte* seed) return 0; } #endif + +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 +/* Deterministically generate the secret vectors s1 and s2. + * + * Squeezes eight SHAKE-256 instances at a time with the AVX512 Keccak rather + * than the four of the AVX2 implementation. The two vectors are sampled as one + * run of s1Len + s2Len polynomials, nonce n for polynomial n, so a batch may + * straddle the boundary between them. A final batch with fewer than eight + * polynomials still runs all eight lanes and discards the surplus. + * + * @param [out] s1 First vector of polynomials. + * @param [in] s1Len Dimension of first vector. + * @param [out] s2 Second vector of polynomials. + * @param [in] s2Len Dimension of second vector. + * @param [in] eta Range specifier of each value. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] heap Dynamic memory allocation hint. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int wc_mldsa_gen_s_avx512(sword32* s1, byte s1Len, sword32* s2, + byte s2Len, byte eta, byte* seed, void* heap) +{ + unsigned int i; + unsigned int n; + unsigned int cnt; + unsigned int done; + unsigned int total = (unsigned int)s1Len + s2Len; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * MLDSA_GEN_S_BLOCK_BYTES]; + word64 state[25 * 8]; +#endif + sword32* sp[8]; + unsigned int ctr[8]; + + (void)heap; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * MLDSA_GEN_S_BLOCK_BYTES, heap, + DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, heap, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + for (n = 0; n < total; n += 8) { + cnt = total - n; + if (cnt > 8) { + cnt = 8; + } + + for (i = 0; i < 8; i++) { + ctr[i] = 0; + if (i < cnt) { + unsigned int e = n + i; + if (e < s1Len) { + sp[i] = s1 + e * MLDSA_N; + } + else { + sp[i] = s2 + (e - s1Len) * MLDSA_N; + } + state[8 * 8 + i] = 0x1f0000U + e; + } + else { + /* Unused lane - any nonce will do, the output is discarded. */ + sp[i] = NULL; + state[8 * 8 + i] = 0x1f0000U; + } + } + + sha3_256_blocksx8_seed_64_avx512(state, seed); + wc_mldsa_redistribute_17_rand_x8_avx512(state, rand, + MLDSA_GEN_S_BLOCK_BYTES); + + do { + for (i = 0; i < cnt; i++) { + if (ctr[i] < MLDSA_N) { + byte* p = rand + i * MLDSA_GEN_S_BLOCK_BYTES; + if (eta == MLDSA_ETA_2) { + wc_mldsa_extract_coeffs_eta2_avx512(p, + MLDSA_GEN_S_BLOCK_BYTES, sp[i] + ctr[i], &ctr[i]); + } + else { + wc_mldsa_extract_coeffs_eta4_avx512(p, + MLDSA_GEN_S_BLOCK_BYTES, sp[i] + ctr[i], &ctr[i]); + } + } + } + + done = 1; + for (i = 0; i < cnt; i++) { + if (ctr[i] < MLDSA_N) { + done = 0; + } + } + if (!done) { + sha3_blocksx8_avx512(state); + wc_mldsa_redistribute_17_rand_x8_avx512(state, rand, + MLDSA_GEN_S_BLOCK_BYTES); + } + } + /* Create more blocks if too many rejected. */ + while (!done); + } + + /* rand/state hold secret s-vector material. */ + ForceZero(rand, 8 * MLDSA_GEN_S_BLOCK_BYTES); + ForceZero(state, sizeof(word64) * 25 * 8); + WC_FREE_VAR_EX(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} +#endif /* WOLFSSL_MLDSA_HAVE_INTEL_AVX512 */ #endif /* Expand private seed into vectors s1 and s2. @@ -4177,15 +4626,28 @@ static int mldsa_expand_s_c(wc_Shake* shake256, byte* priv_seed, byte eta, * @param [in] s1Len Dimension of first vector. * @param [out] s2 Second vector of polynomials. * @param [in] s2Len Dimension of second vector. + * @param [in] heap Dynamic memory allocation hint. * @return 0 on success. * @return Negative on hash error. */ static int mldsa_expand_s(wc_Shake* shake256, byte* priv_seed, byte eta, - sword32* s1, byte s1Len, sword32* s2, byte s2Len) + sword32* s1, byte s1Len, sword32* s2, byte s2Len, void* heap) { int ret = 0; + (void)heap; + #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + /* Eight SHAKE-256 instances per permutation instead of four. Handles any + * vector dimensions, so it comes before the fixed-size AVX2 code. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = wc_mldsa_gen_s_avx512(s1, s1Len, s2, s2Len, eta, priv_seed, + heap); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif #ifndef WOLFSSL_NO_ML_DSA_44 if ((s1Len == 4) && IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) @@ -4235,8 +4697,9 @@ static int mldsa_expand_s(wc_Shake* shake256, byte* priv_seed, byte eta, * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. + * @param [out] y Vector of masking polynomials. * @param [in] seed Bytes to seed XOF generation. + * @param [in] kappa Base value to append to seed. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. @@ -4305,8 +4768,10 @@ static int wc_mldsa_gen_y_4_avx2(sword32* y, byte* seed, word16 kappa) * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. - * @param [in] seed Bytes to seed XOF generation. + * @param [out] y Vector of masking polynomials. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] kappa Base value to append to seed. + * @param [in, out] shake256 SHAKE-256 object for the odd polynomial. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. @@ -4388,8 +4853,9 @@ static int wc_mldsa_gen_y_5_avx2(sword32* y, byte* seed, word16 kappa, * * Seed used with XOF to generate random bytes. * - * @param [out] a Vectos of uniform integers. + * @param [out] y Vector of masking polynomials. * @param [in] seed Bytes to seed XOF generation. + * @param [in] kappa Base value to append to seed. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. @@ -4480,6 +4946,98 @@ static int wc_mldsa_gen_y_7_avx2(sword32* y, byte* seed, word16 kappa) return 0; } #endif + +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 +/* Deterministically expand the private random seed into the vector y. + * + * Every dimension in use (4, 5 or 7) is at most eight, so the whole vector is + * squeezed in one eight-way AVX512 SHAKE-256 run - unlike the AVX2 code, which + * needs a second four-way run, or a scalar squeeze, for the polynomials past + * the fourth. There is no rejection here, so the block count is fixed and no + * lane can need a further permutation. Surplus lanes are squeezed with the + * nonces of the next kappa round and discarded. + * + * @param [out] y Vector of polynomials. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] kappa Base value to append to seed. + * @param [in] gamma1_bits Number of bits per value. + * @param [in] l Dimension of vector. + * @param [in] heap Dynamic memory allocation hint. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int wc_mldsa_gen_y_avx512(sword32* y, byte* seed, word16 kappa, + byte gamma1_bits, byte l, void* heap) +{ + unsigned int i; + unsigned int b; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * MLDSA_MAX_V]; + word64 state[25 * 8]; +#endif + + (void)heap; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * MLDSA_MAX_V, heap, DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, heap, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + for (i = 0; i < 8; i++) { + state[8 * 8 + i] = 0x1f0000U + (word32)kappa + i; + } + + sha3_256_blocksx8_seed_64_avx512(state, seed); + wc_mldsa_redistribute_17_rand_x8_avx512(state, rand, MLDSA_MAX_V); + for (b = 1; b < MLDSA_MAX_V_BLOCKS; b++) { + sha3_blocksx8_avx512(state); + wc_mldsa_redistribute_17_rand_x8_avx512(state, + rand + b * SHA3_256_BYTES, MLDSA_MAX_V); + } + + /* Two polynomials per call; an odd trailing one is done singly. */ + for (i = 0; i + 1 < l; i += 2) { + if (gamma1_bits == MLDSA_GAMMA1_BITS_17) { + wc_mldsa_decode_gamma1_17_x2_avx512(rand + i * MLDSA_MAX_V, + rand + (i + 1) * MLDSA_MAX_V, y + i * MLDSA_N, + y + (i + 1) * MLDSA_N); + } + else { + wc_mldsa_decode_gamma1_19_x2_avx512(rand + i * MLDSA_MAX_V, + rand + (i + 1) * MLDSA_MAX_V, y + i * MLDSA_N, + y + (i + 1) * MLDSA_N); + } + } + for (; i < l; i++) { + if (gamma1_bits == MLDSA_GAMMA1_BITS_17) { + wc_mldsa_decode_gamma1_17_avx2(rand + i * MLDSA_MAX_V, + y + i * MLDSA_N); + } + else { + wc_mldsa_decode_gamma1_19_avx2(rand + i * MLDSA_MAX_V, + y + i * MLDSA_N); + } + } + + /* rand/state hold the secret mask y. */ + ForceZero(rand, 8 * MLDSA_MAX_V); + ForceZero(state, sizeof(word64) * 25 * 8); + WC_FREE_VAR_EX(rand, heap, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, heap, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} +#endif /* WOLFSSL_MLDSA_HAVE_INTEL_AVX512 */ #endif /* Expand the private random seed into vector y. @@ -4547,15 +5105,27 @@ static int mldsa_vec_expand_mask_c(wc_Shake* shake256, byte* seed, * @param [in] gamma1_bits Number of bits per value. * @param [out] y Vector of polynomials. * @param [in] l Dimension of vector. + * @param [in] heap Dynamic memory allocation hint. * @return 0 on success. * @return Negative on hash error. */ static int mldsa_vec_expand_mask(wc_Shake* shake256, byte* seed, - word16 kappa, byte gamma1_bits, sword32* y, byte l) + word16 kappa, byte gamma1_bits, sword32* y, byte l, void* heap) { int ret = 0; + (void)heap; + #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + /* Whole vector in one eight-way run, whatever the dimension. */ + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_BMI2(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = wc_mldsa_gen_y_avx512(y, seed, kappa, gamma1_bits, l, heap); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && IS_INTEL_BMI2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { #ifndef WOLFSSL_NO_ML_DSA_44 @@ -4603,6 +5173,7 @@ static int mldsa_vec_expand_mask(wc_Shake* shake256, byte* seed, * 11: end for * 12: return c * + * @param [in] level Security level of the parameter set. * @param [in] shake256 SHAKE-256 object. * @param [in] seed Buffer containing seed to expand. * @param [in] seedLen Length of seed in bytes. @@ -4646,8 +5217,7 @@ static int mldsa_sample_in_ball_ex(int level, wc_Shake* shake256, } /* Step 3: Put in TAU +/- 1s. */ - for (i = (unsigned int)MLDSA_N - tau; - (ret == 0) && (i < MLDSA_N); i++) { + for (i = (unsigned int)MLDSA_N - tau; (ret == 0) && (i < MLDSA_N); i++) { unsigned int j; do { /* Check whether block is exhausted. */ @@ -4715,7 +5285,7 @@ static int mldsa_sample_in_ball_ex(int level, wc_Shake* shake256, if (k == MLDSA_GEN_C_BLOCK_BYTES) { /* Generate a new block. */ #ifndef WC_SHA3_NO_ASM - if (IS_INTEL_AVX2(cpuid_flags) && + if (SHA3_USE_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { sha3_block_avx2(state); RESTORE_VECTOR_REGISTERS(); @@ -4760,6 +5330,7 @@ static int mldsa_sample_in_ball_ex(int level, wc_Shake* shake256, !defined(WOLFSSL_MLDSA_VERIFY_SMALL_MEM)) /* Expand commit to a polynomial. * + * @param [in] level Security level of the parameter set. * @param [in] shake256 SHAKE-256 object. * @param [in] seed Buffer containing seed to expand. * @param [in] seedLen Length of seed in bytes. @@ -4989,6 +5560,22 @@ static void mldsa_vec_decompose(const sword32* r, byte k, sword32 gamma2, sword32* r0, sword32* r1) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + #ifndef WOLFSSL_NO_ML_DSA_44 + if (gamma2 == MLDSA_Q_LOW_88) { + wc_mldsa_decompose_q88_avx512(r, r0, r1); + } + #endif + #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) + if (gamma2 == MLDSA_Q_LOW_32) { + wc_mldsa_decompose_q32_avx512(r, k, r0, r1); + } + #endif + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { #ifndef WOLFSSL_NO_ML_DSA_44 if (gamma2 == MLDSA_Q_LOW_88) { @@ -5086,6 +5673,13 @@ static int mldsa_vec_check_low(const sword32* a, byte l, sword32 hi) { int ret; #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = wc_mldsa_vec_check_low_avx512(a, l, hi); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = wc_mldsa_vec_check_low_avx2(a, l, hi); RESTORE_VECTOR_REGISTERS(); @@ -5149,7 +5743,18 @@ static int mldsa_make_hint_88(const sword32* s, const sword32* w1, byte* h, byte *idxp) { unsigned int j; - byte idx = *idxp; + byte idx; + +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int ret = wc_mldsa_make_hint_88_avx512(s, w1, PARAMS_ML_DSA_44_OMEGA, + h, idxp); + RESTORE_VECTOR_REGISTERS(); + return ret; + } +#endif + + idx = *idxp; /* Alg 14, Step 3: For each value of polynomial. */ for (j = 0; j < MLDSA_N; j++) { @@ -5221,10 +5826,20 @@ static int mldsa_make_hint_32(const sword32* s, const sword32* w1, byte omega, byte* h, byte *idxp) { unsigned int j; - byte idx = *idxp; + byte idx; (void)omega; +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int ret = wc_mldsa_make_hint_32_avx512(s, w1, omega, h, idxp); + RESTORE_VECTOR_REGISTERS(); + return ret; + } +#endif + + idx = *idxp; + /* Alg 14, Step 3: For each value of polynomial. */ for (j = 0; j < MLDSA_N; j++) { /* Alg 14, Step 4: Check whether hint is required. @@ -5576,6 +6191,14 @@ static void mldsa_vec_use_hint(sword32* w1, byte k, sword32 gamma2, #ifndef WOLFSSL_NO_ML_DSA_44 if (gamma2 == MLDSA_Q_LOW_88) { #ifdef USE_INTEL_SPEEDUP + #ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_use_hint_88_avx512(w1, h); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_use_hint_88_avx2(w1, h); RESTORE_VECTOR_REGISTERS(); @@ -5594,6 +6217,14 @@ static void mldsa_vec_use_hint(sword32* w1, byte k, sword32 gamma2, #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) if (gamma2 == MLDSA_Q_LOW_32) { #ifdef USE_INTEL_SPEEDUP + #ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_use_hint_32_avx512(w1, k, h); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_use_hint_32_avx2(w1, k, h); RESTORE_VECTOR_REGISTERS(); @@ -5749,11 +6380,11 @@ static const sword32 zetas_inv[MLDSA_N] = { */ #define NTT(len) \ do { \ - for (start = 0; start < MLDSA_N; start += 2 * (len)) { \ + for (start = 0; start < MLDSA_N; start += 2 * (len)) { \ zeta = zetas[++k]; \ for (j = 0; j < (len); ++j) { \ sword32 t = \ - mldsa_mont_red((sword64)zeta * r[start + j + (len)]); \ + mldsa_mont_red((sword64)zeta * r[start + j + (len)]); \ sword32 rj = r[start + j]; \ r[start + j + (len)] = rj - t; \ r[start + j] = rj + t; \ @@ -6140,6 +6771,13 @@ static void mldsa_ntt_c(sword32* r) */ static void mldsa_ntt(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_ntt_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_ntt_avx2(r); @@ -6166,6 +6804,13 @@ static void mldsa_ntt(sword32* r) */ static void mldsa_ntt_full(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_ntt_full_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_ntt_full_avx2(r); @@ -6190,9 +6835,20 @@ static void mldsa_ntt_full(sword32* r) */ static void mldsa_vec_ntt(sword32* r, byte l) { - unsigned int i; + unsigned int i = 0; - for (i = 0; i < l; i++) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* One polynomial per call, so there is no odd trailing polynomial to + * hand back to mldsa_ntt() below. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i < l; i++) { + wc_mldsa_ntt_1p_avx512(r); + r += MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif + for (; i < l; i++) { mldsa_ntt(r); r += MLDSA_N; } @@ -6228,9 +6884,15 @@ static void mldsa_vec_ntt_full(sword32* r, byte l) /* Zeta index value 1 not in montgomery form. */ #define MLDSA_NTT_ZETA_1 ((sword32)-3572223) -/* Number-Theoretic Transform with small initial values. +/* Number-Theoretic Transform of a polynomial with small coefficients. * - * @param [in, out] r Polynomial to transform. + * Level 1 uses a plain multiply and Barrett reduction rather than a + * Montgomery one. That is only equivalent while the coefficients are small: + * the two agree exactly for any |coefficient| up to 26, and diverge silently + * above that. Callers pass the challenge polynomial, whose coefficients are + * -1, 0 or 1, or a noise vector bounded by eta, which is at most 4. + * + * @param [in, out] r Polynomial to transform, coefficients in -26..26. */ static void mldsa_ntt_small_c(sword32* r) { @@ -6574,15 +7236,28 @@ static void mldsa_ntt_small_c(sword32* r) #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ defined(WC_MLDSA_CACHE_PRIV_VECTORS) -/* Number-Theoretic Transform. +/* Number-Theoretic Transform of a polynomial with small coefficients. * - * @param [in, out] r Polynomial to transform. + * Level 1 uses a plain multiply and Barrett reduction rather than a + * Montgomery one. That is only equivalent while the coefficients are small: + * the two agree exactly for any |coefficient| up to 26, and diverge silently + * above that. Callers pass the challenge polynomial, whose coefficients are + * -1, 0 or 1, or a noise vector bounded by eta, which is at most 4. + * + * @param [in, out] r Polynomial to transform, coefficients in -26..26. */ static void mldsa_ntt_small(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_ntt_small_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - wc_mldsa_ntt_avx2(r); + wc_mldsa_ntt_small_avx2(r); RESTORE_VECTOR_REGISTERS(); } else @@ -6596,15 +7271,28 @@ static void mldsa_ntt_small(sword32* r) #if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ !defined(WOLFSSL_MLDSA_NO_VERIFY) || \ defined(WOLFSSL_MLDSA_CHECK_KEY) -/* Number-Theoretic Transform. +/* Number-Theoretic Transform of a polynomial with small coefficients. * - * @param [in, out] r Polynomial to transform. + * Level 1 uses a plain multiply and Barrett reduction rather than a + * Montgomery one. That is only equivalent while the coefficients are small: + * the two agree exactly for any |coefficient| up to 26, and diverge silently + * above that. Callers pass the challenge polynomial, whose coefficients are + * -1, 0 or 1, or a noise vector bounded by eta, which is at most 4. + * + * @param [in, out] r Polynomial to transform, coefficients in -26..26. */ static void mldsa_ntt_small_full(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_ntt_small_full_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - wc_mldsa_ntt_full_avx2(r); + wc_mldsa_ntt_small_full_avx2(r); RESTORE_VECTOR_REGISTERS(); } else @@ -6688,7 +7376,7 @@ static void mldsa_vec_ntt_small_full(sword32* r, byte l) */ #define INVNTT(len) \ do { \ - for (start = 0; start < MLDSA_N; start += 2 * (len)) { \ + for (start = 0; start < MLDSA_N; start += 2 * (len)) { \ zeta = zetas_inv[k++]; \ for (j = 0; j < (len); ++j) { \ sword32 rj = r[start + j]; \ @@ -6696,7 +7384,7 @@ do { \ sword32 t = rj + rjl; \ r[start + j] = t; \ rjl = rj - rjl; \ - r[start + j + (len)] = mldsa_mont_red((sword64)zeta * rjl); \ + r[start + j + (len)] = mldsa_mont_red((sword64)zeta * rjl); \ } \ } \ } \ @@ -7107,6 +7795,13 @@ static void mldsa_invntt_c(sword32* r) */ static void mldsa_invntt(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_invntt_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_invntt_avx2(r); @@ -7126,6 +7821,13 @@ static void mldsa_invntt(sword32* r) */ static void mldsa_invntt_full(sword32* r) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_invntt_full_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_invntt_full_avx2(r); @@ -7151,9 +7853,20 @@ static void mldsa_invntt_full(sword32* r) */ static void mldsa_vec_invntt_full(sword32* r, byte l) { - unsigned int i; + unsigned int i = 0; - for (i = 0; i < l; i++) { +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* One polynomial per call, so there is no odd trailing polynomial to + * hand back to mldsa_invntt_full() below. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (; i < l; i++) { + wc_mldsa_invntt_full_1p_avx512(r); + r += MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } +#endif + for (; i < l; i++) { mldsa_invntt_full(r); r += MLDSA_N; } @@ -7340,6 +8053,34 @@ static void mldsa_matrix_mul(sword32* r, const sword32* m, const sword32* v, byte k, byte l) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int i; + if (l == 4) { + for (i = 0; i < k; i++) { + wc_mldsa_mul_vec_4_avx512(r, m, v); + m += l * MLDSA_N; + r += MLDSA_N; + } + } + else if (l == 5) { + for (i = 0; i < k; i++) { + wc_mldsa_mul_vec_5_avx512(r, m, v); + m += l * MLDSA_N; + r += MLDSA_N; + } + } + else { + for (i = 0; i < k; i++) { + wc_mldsa_mul_vec_7_avx512(r, m, v); + m += l * MLDSA_N; + r += MLDSA_N; + } + } + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; if (l == 4) { @@ -7432,6 +8173,13 @@ static void mldsa_mul_c(sword32* r, sword32* a, sword32* b) static void mldsa_mul(sword32* r, sword32* a, sword32* b) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_mul_avx512(r, a, b); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_mul_avx2(r, a, b); RESTORE_VECTOR_REGISTERS(); @@ -7442,6 +8190,32 @@ static void mldsa_mul(sword32* r, sword32* a, sword32* b) mldsa_mul_c(r, a, b); } } + +#ifndef WOLFSSL_MLDSA_SIGN_SMALL_MEM +/* Multiply the challenge polynomial into one polynomial of a vector and + * inverse transform the product. + * + * @param [out] r Polynomial that is the result. + * @param [in] c Challenge polynomial in NTT form. + * @param [in] v Polynomial of vector in NTT form. + */ +static void mldsa_mul_invntt(sword32* r, sword32* c, sword32* v) +{ +#if defined(USE_INTEL_SPEEDUP) && defined(WOLFSSL_MLDSA_HAVE_INTEL_AVX512) + /* Both steps under one save/restore of the vector registers. */ + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_mul_avx512(r, c, v); + wc_mldsa_invntt_1p_avx512(r); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif + { + mldsa_mul(r, c, v); + mldsa_invntt(r); + } +} +#endif /* !WOLFSSL_MLDSA_SIGN_SMALL_MEM */ #endif #if !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ @@ -7458,6 +8232,17 @@ static void mldsa_vec_mul(sword32* r, sword32* a, sword32* b, byte l) byte i; #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + for (i = 0; i < l; i++) { + wc_mldsa_mul_avx512(r, a, b); + r += MLDSA_N; + b += MLDSA_N; + } + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { for (i = 0; i < l; i++) { wc_mldsa_mul_avx2(r, a, b); @@ -7517,6 +8302,13 @@ static void mldsa_poly_red_c(sword32* a) static void mldsa_poly_red(sword32* a) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_poly_red_avx512(a); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_poly_red_avx2(a); RESTORE_VECTOR_REGISTERS(); @@ -7590,6 +8382,13 @@ static void mldsa_sub_c(sword32* r, const sword32* a) static void mldsa_sub(sword32* r, const sword32* a) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_poly_sub_avx512(r, a); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_poly_sub_avx2(r, a); RESTORE_VECTOR_REGISTERS(); @@ -7658,6 +8457,13 @@ static void mldsa_add_c(sword32* r, const sword32* a) static void mldsa_add(sword32* r, const sword32* a) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_poly_add_avx512(r, a); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_poly_add_avx2(r, a); RESTORE_VECTOR_REGISTERS(); @@ -7729,6 +8535,13 @@ static void mldsa_make_pos_c(sword32* a) static void mldsa_make_pos(sword32* a) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + wc_mldsa_poly_make_pos_avx512(a); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { wc_mldsa_poly_make_pos_avx2(a); RESTORE_VECTOR_REGISTERS(); @@ -7924,7 +8737,7 @@ static int mldsa_make_key_from_seed(wc_MlDsaKey* key, const byte* seed) /* Step 4: Expand private seed into to vectors of polynomials. */ ret = mldsa_expand_s(&key->shake, priv_seed, params->eta, s1, - params->l, s2, params->k); + params->l, s2, params->k, key->heap); } if (ret == 0) { byte* k = pub_seed + MLDSA_PUB_SEED_SZ; @@ -8070,7 +8883,7 @@ static int mldsa_make_key_from_seed(wc_MlDsaKey* key, const byte* seed) /* Step 4: Expand private seed into to vectors of polynomials. */ ret = mldsa_expand_s(&key->shake, priv_seed, params->eta, s1, - params->l, s2, params->k); + params->l, s2, params->k, key->heap); } if (ret == 0) { byte* k = pub_seed + MLDSA_PUB_SEED_SZ; @@ -8536,7 +9349,7 @@ static int mldsa_sign_with_seed_mu(wc_MlDsaKey* key, /* Step 12: Compute vector y from private random seed and kappa. */ mldsa_vec_expand_mask(&key->shake, priv_rand_seed, kappa, - params->gamma1_bits, y, params->l); + params->gamma1_bits, y, params->l, key->heap); #ifdef WOLFSSL_MLDSA_SIGN_CHECK_Y valid = mldsa_vec_check_low(y, params->l, ((sword32)1 << params->gamma1_bits) - params->beta); @@ -8594,38 +9407,31 @@ static int mldsa_sign_with_seed_mu(wc_MlDsaKey* key, hi = params->gamma2 - params->beta; for (i = 0; valid && i < params->k; i++) { /* Step 20: cs2 = NTT-1(c o s2) */ - mldsa_mul(cs2 + i * MLDSA_N, c, + mldsa_mul_invntt(cs2 + i * MLDSA_N, c, s2 + i * MLDSA_N); - mldsa_invntt(cs2 + i * MLDSA_N); /* Step 22: w0 - cs2 */ - mldsa_sub(w0 + i * MLDSA_N, - cs2 + i * MLDSA_N); + mldsa_sub(w0 + i * MLDSA_N, cs2 + i * MLDSA_N); /* Step 23: Check w0 - cs2 has low enough values. */ - valid = mldsa_vec_check_low(w0 + i * MLDSA_N, 1, - hi); + valid = mldsa_vec_check_low(w0 + i * MLDSA_N, 1, hi); } hi = ((sword32)1 << params->gamma1_bits) - params->beta; for (i = 0; valid && i < params->l; i++) { /* Step 19: cs1 = NTT-1(c o s1) */ - mldsa_mul(z + i * MLDSA_N, c, + mldsa_mul_invntt(z + i * MLDSA_N, c, s1 + i * MLDSA_N); - mldsa_invntt(z + i * MLDSA_N); /* Step 21: z = y + cs1 */ mldsa_add(z + i * MLDSA_N, y + i * MLDSA_N); mldsa_poly_red(z + i * MLDSA_N); /* Step 23: Check z has low enough values. */ - valid = mldsa_vec_check_low(z + i * MLDSA_N, 1, - hi); + valid = mldsa_vec_check_low(z + i * MLDSA_N, 1, hi); } + hi = params->gamma2; for (i = 0; valid && i < params->k; i++) { /* Step 25: ct0 = NTT-1(c o t0) */ - mldsa_mul(ct0 + i * MLDSA_N, c, + mldsa_mul_invntt(ct0 + i * MLDSA_N, c, t0 + i * MLDSA_N); - mldsa_invntt(ct0 + i * MLDSA_N); /* Step 27: Check ct0 has low enough values. */ - hi = params->gamma2; - valid = mldsa_vec_check_low(ct0 + i * MLDSA_N, - 1, hi); + valid = mldsa_vec_check_low(ct0 + i * MLDSA_N, 1, hi); } if (valid) { /* Step 26: ct0 = ct0 + w0 */ @@ -8842,7 +9648,7 @@ static int mldsa_sign_with_seed_mu(wc_MlDsaKey* key, valid = 1; /* Step 12: Compute vector y from private random seed and kappa. */ mldsa_vec_expand_mask(&key->shake, priv_rand_seed, kappa, - params->gamma1_bits, y, params->l); + params->gamma1_bits, y, params->l, key->heap); #ifdef WOLFSSL_MLDSA_SIGN_CHECK_Y valid = mldsa_vec_check_low(y, params->l, ((sword32)1 << params->gamma1_bits) - params->beta); @@ -11008,6 +11814,20 @@ int wc_MlDsaKey_Init(wc_MlDsaKey* key, void* heap, int devId) } #ifdef WOLF_PRIVATE_KEY_ID +/* Initialize the ML-DSA key and set the id of the device key. + * + * The security level is set to the maximum, WC_ML_DSA_87, as the level of the + * key held by the device is not known here. + * + * @param [out] key ML-DSA key. + * @param [in] id Identifier of key on device. + * @param [in] len Length of identifier in bytes. + * @param [in] heap Dynamic memory allocation hint. + * @param [in] devId Device identifier. + * @return 0 on success. + * @return BAD_FUNC_ARG when key is NULL. + * @return BUFFER_E when len is negative or too long for the id field. + */ int wc_MlDsaKey_InitId(wc_MlDsaKey* key, const unsigned char* id, int len, void* heap, int devId) { @@ -11034,6 +11854,19 @@ int wc_MlDsaKey_InitId(wc_MlDsaKey* key, const unsigned char* id, int len, return ret; } +/* Initialize the ML-DSA key and set the label of the device key. + * + * The security level is set to the maximum, WC_ML_DSA_87, as the level of the + * key held by the device is not known here. + * + * @param [out] key ML-DSA key. + * @param [in] label Label of key on device. NUL terminated. + * @param [in] heap Dynamic memory allocation hint. + * @param [in] devId Device identifier. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or label is NULL. + * @return BUFFER_E when the label is empty or too long for the label field. + */ int wc_MlDsaKey_InitLabel(wc_MlDsaKey* key, const char* label, void* heap, int devId) { @@ -11890,7 +12723,7 @@ static int mldsa_check_eta_range(const byte* p, byte eta, word32 len) * * @param [in] priv Private key data. * @param [in] privSz Size of private key data in bytes. - * @param in, out] key ML-DSA key to set into. + * @param [in, out] key ML-DSA key to set into. * @return 0 on success. * @return BAD_FUNC_ARG when private key size is invalid. * @return MEMORY_E when dynamic memory allocation fails. @@ -12176,9 +13009,20 @@ int wc_MlDsaKey_ExportKey(wc_MlDsaKey* key, byte* priv, word32 *privSz, #endif /* WOLFSSL_MLDSA_PRIVATE_KEY */ -/* Get OID sum from ML-DSA key. No ASN.1 dependency, so available regardless - * of WOLFSSL_MLDSA_NO_ASN1. */ -int mldsa_get_oid_sum(wc_MlDsaKey* key, int* keyFormat) { +/* Get the OID sum that identifies the key's security level. + * + * Has no ASN.1 dependency, so it is available even when + * WOLFSSL_MLDSA_NO_ASN1 is defined. + * + * @param [in] key ML-DSA key. + * @param [out] keyFormat OID sum for the key's security level. + * @return 0 on success. + * @return BAD_FUNC_ARG when key has no parameters set. Only possible when + * WOLFSSL_MLDSA_FIPS204_DRAFT is defined. + * @return ALGO_ID_E when the security level of key is not set. + */ +int mldsa_get_oid_sum(wc_MlDsaKey* key, int* keyFormat) +{ int ret = 0; #if defined(WOLFSSL_MLDSA_FIPS204_DRAFT) @@ -12215,7 +13059,12 @@ int mldsa_get_oid_sum(wc_MlDsaKey* key, int* keyFormat) { #ifndef WOLFSSL_MLDSA_NO_ASN1 -/* Maps ASN.1 OID to wolfCrypt security level macros */ +/* Map an ASN.1 OID sum to the wolfCrypt security level. + * + * @param [in] oid OID sum from a decoded AlgorithmIdentifier. + * @return Security level - one of the WC_ML_DSA_* values. + * @return ASN_UNKNOWN_OID_E when the OID sum is not an ML-DSA one. + */ static int mapOidToSecLevel(int oid) { switch (oid) { @@ -12479,6 +13328,21 @@ static unsigned char mldsa_oid_87[] = { #endif #endif +/* Get the length of a DER encoded ASN.1 item. + * + * Handles the short form and the one and two byte long forms. Rejects the + * indefinite form, non-minimal encodings and any length that would run past + * the end of the buffer. + * + * @param [in] input Array holding DER encoded data. + * @param [in, out] inOutIdx On in, index into array of start of length. + * On out, index into array after length. + * @param [out] length Length of the item's content in bytes. + * @param [in] inSz Number of bytes in array. + * @return 0 on success. + * @return ASN_PARSE_E when the length is malformed or too large for the + * data available. + */ static int mldsa_get_der_length(const byte* input, word32* inOutIdx, int *length, word32 inSz) { @@ -12530,6 +13394,18 @@ static int mldsa_get_der_length(const byte* input, word32* inOutIdx, return ret; } +/* Check the ASN.1 tag of the next DER encoded item. + * + * The index is only advanced when the tag matches. + * + * @param [in] input Array holding DER encoded data. + * @param [in, out] inOutIdx On in, index into array of the tag. + * On out, index into array after the tag. + * @param [in] type ASN.1 tag expected. + * @param [in] inSz Number of bytes in array. + * @return 0 on success. + * @return ASN_PARSE_E when there is no data left or the tag does not match. + */ static int mldsa_check_type(const byte* input, word32* inOutIdx, byte type, word32 inSz) { @@ -12551,7 +13427,15 @@ static int mldsa_check_type(const byte* input, word32* inOutIdx, byte type, } /* Map an AlgorithmIdentifier OID byte string to a security level. - * Used to auto-detect the level when it is not already set on the key. */ + * + * Used to detect the level when it is not already set on the key. + * + * @param [in] oid Encoded OID from an AlgorithmIdentifier. + * @param [in] oidLen Length of encoded OID in bytes. + * @param [out] level Security level - one of the WC_ML_DSA_* values. + * @return 0 on success. + * @return ASN_PARSE_E when the OID is not a recognised ML-DSA one. + */ static int mldsa_oid_to_level(const byte* oid, word32 oidLen, byte* level) { int ret = WC_NO_ERR_TRACE(ASN_PARSE_E); diff --git a/wolfcrypt/src/wc_mldsa_asm.S b/wolfcrypt/src/wc_mldsa_asm.S index bcaaab6e13..b72b748df4 100644 --- a/wolfcrypt/src/wc_mldsa_asm.S +++ b/wolfcrypt/src/wc_mldsa_asm.S @@ -421,6 +421,32 @@ L_mldsa_avx2_zetas: #else .p2align 4 #endif /* __APPLE__ */ +L_mldsa_avx2_zeta1: +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_avx2_half: +.long 0x00400000,0x00400000,0x00400000,0x00400000 +.long 0x00400000,0x00400000,0x00400000,0x00400000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ L_mldsa_avx2_zetas_basemul: .long 0xffc406e5,0xffe9d65d,0x003cf91b,0x001729a3 .long 0xffe8ac81,0x003509ee,0x0018537f,0xffcbf612 @@ -3212,15 +3238,15 @@ _wc_mldsa_ntt_avx2: #endif /* __APPLE__ */ #ifndef __APPLE__ .text -.globl wc_mldsa_ntt_full_avx2 -.type wc_mldsa_ntt_full_avx2,@function +.globl wc_mldsa_ntt_small_avx2 +.type wc_mldsa_ntt_small_avx2,@function .align 16 -wc_mldsa_ntt_full_avx2: +wc_mldsa_ntt_small_avx2: #else .section __TEXT,__text -.globl _wc_mldsa_ntt_full_avx2 +.globl _wc_mldsa_ntt_small_avx2 .p2align 4 -_wc_mldsa_ntt_full_avx2: +_wc_mldsa_ntt_small_avx2: #endif /* __APPLE__ */ vpxor %ymm14, %ymm14, %ymm14 vmovdqu mldsa_q(%rip), %ymm14 @@ -3229,8 +3255,8 @@ _wc_mldsa_ntt_full_avx2: vmovdqu 64(%rdx), %ymm11 vmovdqu 96(%rdx), %ymm13 # 128: 4/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 vmovdqu 96(%rdi), %ymm0 vmovdqu 224(%rdi), %ymm1 vmovdqu 352(%rdi), %ymm2 @@ -3239,56 +3265,32 @@ _wc_mldsa_ntt_full_avx2: vmovdqu 736(%rdi), %ymm5 vmovdqu 864(%rdi), %ymm6 vmovdqu 992(%rdi), %ymm7 - vpmulld %ymm12, %ymm4, %ymm8 - vmovshdup %ymm4, %ymm9 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm0, %ymm4 vpaddd %ymm8, %ymm0, %ymm0 - vpmulld %ymm12, %ymm5, %ymm8 - vmovshdup %ymm5, %ymm9 - vpmuldq %ymm10, %ymm5, %ymm5 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm5, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm1, %ymm5 vpaddd %ymm8, %ymm1, %ymm1 - vpmulld %ymm12, %ymm6, %ymm8 - vmovshdup %ymm6, %ymm9 - vpmuldq %ymm10, %ymm6, %ymm6 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm2, %ymm6 vpaddd %ymm8, %ymm2, %ymm2 - vpmulld %ymm12, %ymm7, %ymm8 - vmovshdup %ymm7, %ymm9 - vpmuldq %ymm10, %ymm7, %ymm7 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm7, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm3, %ymm7 vpaddd %ymm8, %ymm3, %ymm3 # 64: 4/4 @@ -3355,8 +3357,8 @@ _wc_mldsa_ntt_full_avx2: vmovdqu %ymm6, 864(%rdi) vmovdqu %ymm7, 992(%rdi) # 128: 3/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 vmovdqu 64(%rdi), %ymm0 vmovdqu 192(%rdi), %ymm1 vmovdqu 320(%rdi), %ymm2 @@ -3365,56 +3367,32 @@ _wc_mldsa_ntt_full_avx2: vmovdqu 704(%rdi), %ymm5 vmovdqu 832(%rdi), %ymm6 vmovdqu 960(%rdi), %ymm7 - vpmulld %ymm12, %ymm4, %ymm8 - vmovshdup %ymm4, %ymm9 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm0, %ymm4 vpaddd %ymm8, %ymm0, %ymm0 - vpmulld %ymm12, %ymm5, %ymm8 - vmovshdup %ymm5, %ymm9 - vpmuldq %ymm10, %ymm5, %ymm5 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm5, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm1, %ymm5 vpaddd %ymm8, %ymm1, %ymm1 - vpmulld %ymm12, %ymm6, %ymm8 - vmovshdup %ymm6, %ymm9 - vpmuldq %ymm10, %ymm6, %ymm6 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm2, %ymm6 vpaddd %ymm8, %ymm2, %ymm2 - vpmulld %ymm12, %ymm7, %ymm8 - vmovshdup %ymm7, %ymm9 - vpmuldq %ymm10, %ymm7, %ymm7 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm7, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm3, %ymm7 vpaddd %ymm8, %ymm3, %ymm3 # 64: 3/4 @@ -3481,8 +3459,8 @@ _wc_mldsa_ntt_full_avx2: vmovdqu %ymm6, 832(%rdi) vmovdqu %ymm7, 960(%rdi) # 128: 2/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 vmovdqu 32(%rdi), %ymm0 vmovdqu 160(%rdi), %ymm1 vmovdqu 288(%rdi), %ymm2 @@ -3491,56 +3469,32 @@ _wc_mldsa_ntt_full_avx2: vmovdqu 672(%rdi), %ymm5 vmovdqu 800(%rdi), %ymm6 vmovdqu 928(%rdi), %ymm7 - vpmulld %ymm12, %ymm4, %ymm8 - vmovshdup %ymm4, %ymm9 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm0, %ymm4 vpaddd %ymm8, %ymm0, %ymm0 - vpmulld %ymm12, %ymm5, %ymm8 - vmovshdup %ymm5, %ymm9 - vpmuldq %ymm10, %ymm5, %ymm5 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm5, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm1, %ymm5 vpaddd %ymm8, %ymm1, %ymm1 - vpmulld %ymm12, %ymm6, %ymm8 - vmovshdup %ymm6, %ymm9 - vpmuldq %ymm10, %ymm6, %ymm6 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm2, %ymm6 vpaddd %ymm8, %ymm2, %ymm2 - vpmulld %ymm12, %ymm7, %ymm8 - vmovshdup %ymm7, %ymm9 - vpmuldq %ymm10, %ymm7, %ymm7 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm7, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm3, %ymm7 vpaddd %ymm8, %ymm3, %ymm3 # 64: 2/4 @@ -3607,8 +3561,8 @@ _wc_mldsa_ntt_full_avx2: vmovdqu %ymm6, 800(%rdi) vmovdqu %ymm7, 928(%rdi) # 128: 1/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 vmovdqu (%rdi), %ymm0 vmovdqu 128(%rdi), %ymm1 vmovdqu 256(%rdi), %ymm2 @@ -3617,56 +3571,32 @@ _wc_mldsa_ntt_full_avx2: vmovdqu 640(%rdi), %ymm5 vmovdqu 768(%rdi), %ymm6 vmovdqu 896(%rdi), %ymm7 - vpmulld %ymm12, %ymm4, %ymm8 - vmovshdup %ymm4, %ymm9 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm0, %ymm4 vpaddd %ymm8, %ymm0, %ymm0 - vpmulld %ymm12, %ymm5, %ymm8 - vmovshdup %ymm5, %ymm9 - vpmuldq %ymm10, %ymm5, %ymm5 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm5, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm1, %ymm5 vpaddd %ymm8, %ymm1, %ymm1 - vpmulld %ymm12, %ymm6, %ymm8 - vmovshdup %ymm6, %ymm9 - vpmuldq %ymm10, %ymm6, %ymm6 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm2, %ymm6 vpaddd %ymm8, %ymm2, %ymm2 - vpmulld %ymm12, %ymm7, %ymm8 - vmovshdup %ymm7, %ymm9 - vpmuldq %ymm10, %ymm7, %ymm7 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm7, %ymm8 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm8, %ymm8 - vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 vpsubd %ymm8, %ymm3, %ymm7 vpaddd %ymm8, %ymm3, %ymm3 # 64: 1/4 @@ -4132,22 +4062,6 @@ _wc_mldsa_ntt_full_avx2: vpblendd $0xaa, %ymm15, %ymm8, %ymm8 vpsubd %ymm8, %ymm6, %ymm7 vpaddd %ymm8, %ymm6, %ymm6 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm0 - vperm2i128 $49, %ymm9, %ymm8, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm2 - vperm2i128 $49, %ymm9, %ymm8, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm4 - vperm2i128 $49, %ymm9, %ymm8, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm6 - vperm2i128 $49, %ymm9, %ymm8, %ymm7 vmovdqu %ymm0, (%rdi) vmovdqu %ymm1, 32(%rdi) vmovdqu %ymm2, 64(%rdi) @@ -4559,22 +4473,6 @@ _wc_mldsa_ntt_full_avx2: vpblendd $0xaa, %ymm15, %ymm8, %ymm8 vpsubd %ymm8, %ymm6, %ymm7 vpaddd %ymm8, %ymm6, %ymm6 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm0 - vperm2i128 $49, %ymm9, %ymm8, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm2 - vperm2i128 $49, %ymm9, %ymm8, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm4 - vperm2i128 $49, %ymm9, %ymm8, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm6 - vperm2i128 $49, %ymm9, %ymm8, %ymm7 vmovdqu %ymm0, 256(%rdi) vmovdqu %ymm1, 288(%rdi) vmovdqu %ymm2, 320(%rdi) @@ -4986,22 +4884,6 @@ _wc_mldsa_ntt_full_avx2: vpblendd $0xaa, %ymm15, %ymm8, %ymm8 vpsubd %ymm8, %ymm6, %ymm7 vpaddd %ymm8, %ymm6, %ymm6 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm0 - vperm2i128 $49, %ymm9, %ymm8, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm2 - vperm2i128 $49, %ymm9, %ymm8, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm4 - vperm2i128 $49, %ymm9, %ymm8, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm6 - vperm2i128 $49, %ymm9, %ymm8, %ymm7 vmovdqu %ymm0, 512(%rdi) vmovdqu %ymm1, 544(%rdi) vmovdqu %ymm2, 576(%rdi) @@ -5413,22 +5295,6 @@ _wc_mldsa_ntt_full_avx2: vpblendd $0xaa, %ymm15, %ymm8, %ymm8 vpsubd %ymm8, %ymm6, %ymm7 vpaddd %ymm8, %ymm6, %ymm6 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm0 - vperm2i128 $49, %ymm9, %ymm8, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm2 - vperm2i128 $49, %ymm9, %ymm8, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm4 - vperm2i128 $49, %ymm9, %ymm8, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vperm2i128 $32, %ymm9, %ymm8, %ymm6 - vperm2i128 $49, %ymm9, %ymm8, %ymm7 vmovdqu %ymm0, 768(%rdi) vmovdqu %ymm1, 800(%rdi) vmovdqu %ymm2, 832(%rdi) @@ -5440,4978 +5306,4545 @@ _wc_mldsa_ntt_full_avx2: vzeroupper repz retq #ifndef __APPLE__ -.size wc_mldsa_ntt_full_avx2,.-wc_mldsa_ntt_full_avx2 +.size wc_mldsa_ntt_small_avx2,.-wc_mldsa_ntt_small_avx2 #endif /* __APPLE__ */ #ifndef __APPLE__ .text -.globl wc_mldsa_invntt_avx2 -.type wc_mldsa_invntt_avx2,@function +.globl wc_mldsa_ntt_full_avx2 +.type wc_mldsa_ntt_full_avx2,@function .align 16 -wc_mldsa_invntt_avx2: +wc_mldsa_ntt_full_avx2: #else .section __TEXT,__text -.globl _wc_mldsa_invntt_avx2 +.globl _wc_mldsa_ntt_full_avx2 .p2align 4 -_wc_mldsa_invntt_avx2: +_wc_mldsa_ntt_full_avx2: #endif /* __APPLE__ */ vpxor %ymm14, %ymm14, %ymm14 vmovdqu mldsa_q(%rip), %ymm14 - # invntt - leaq L_mldsa_avx2_zetas_inv(%rip), %rdx - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vmovdqu 64(%rdi), %ymm2 - vmovdqu 96(%rdi), %ymm3 - vmovdqu 128(%rdi), %ymm4 - vmovdqu 160(%rdi), %ymm5 - vmovdqu 192(%rdi), %ymm6 - vmovdqu 224(%rdi), %ymm7 - # 1: 1/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + # ntt + leaq L_mldsa_avx2_zetas(%rip), %rdx vmovdqu 64(%rdx), %ymm11 vmovdqu 96(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + # 128: 4/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu 96(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vmovdqu 352(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vmovdqu 608(%rdi), %ymm4 + vmovdqu 736(%rdi), %ymm5 + vmovdqu 864(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 1/4 - vmovdqu 128(%rdx), %ymm10 - vmovdqu 160(%rdx), %ymm12 - vmovdqu 192(%rdx), %ymm11 - vmovdqu 224(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 1/4 - vmovdqu 256(%rdx), %ymm10 - vmovdqu 288(%rdx), %ymm12 - vmovdqu 320(%rdx), %ymm11 - vmovdqu 352(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 - vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 4/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 1/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 384(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 416(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 448(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 480(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 1/4 - vmovdqu 512(%rdx), %ymm10 - vmovdqu 544(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 1: 1/4 - vmovdqu 576(%rdx), %ymm10 - vmovdqu 608(%rdx), %ymm12 - vmovdqu 640(%rdx), %ymm11 - vmovdqu 672(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 96(%rdi) + vmovdqu %ymm1, 224(%rdi) + vmovdqu %ymm2, 352(%rdi) + vmovdqu %ymm3, 480(%rdi) + vmovdqu %ymm4, 608(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu %ymm6, 864(%rdi) + vmovdqu %ymm7, 992(%rdi) + # 128: 3/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu 64(%rdi), %ymm0 + vmovdqu 192(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 448(%rdi), %ymm3 + vmovdqu 576(%rdi), %ymm4 + vmovdqu 704(%rdi), %ymm5 + vmovdqu 832(%rdi), %ymm6 + vmovdqu 960(%rdi), %ymm7 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 1/4 - vmovdqu 704(%rdx), %ymm10 - vmovdqu 736(%rdx), %ymm12 - vmovdqu 768(%rdx), %ymm11 - vmovdqu 800(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 1/4 - vmovdqu 832(%rdx), %ymm10 - vmovdqu 864(%rdx), %ymm12 - vmovdqu 896(%rdx), %ymm11 - vmovdqu 928(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 1/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 960(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 992(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 1024(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 1056(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 3/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 1/4 - vmovdqu 1088(%rdx), %ymm10 - vmovdqu 1120(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 1/4 - vmovdqu 1152(%rdx), %ymm10 - vmovdqu 1184(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 64(%rdi) + vmovdqu %ymm1, 192(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 448(%rdi) + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 704(%rdi) + vmovdqu %ymm6, 832(%rdi) + vmovdqu %ymm7, 960(%rdi) + # 128: 2/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu 32(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 288(%rdi), %ymm2 + vmovdqu 416(%rdi), %ymm3 + vmovdqu 544(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 800(%rdi), %ymm6 + vmovdqu 928(%rdi), %ymm7 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 32(%rdi) - vmovdqu %ymm2, 64(%rdi) - vmovdqu %ymm3, 96(%rdi) - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu %ymm6, 192(%rdi) - vmovdqu %ymm7, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vmovdqu 384(%rdi), %ymm4 - vmovdqu 416(%rdi), %ymm5 - vmovdqu 448(%rdi), %ymm6 - vmovdqu 480(%rdi), %ymm7 - # 1: 2/4 - vmovdqu 1216(%rdx), %ymm10 - vmovdqu 1248(%rdx), %ymm12 - vmovdqu 1280(%rdx), %ymm11 - vmovdqu 1312(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 2/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 2/4 - vmovdqu 1344(%rdx), %ymm10 - vmovdqu 1376(%rdx), %ymm12 - vmovdqu 1408(%rdx), %ymm11 - vmovdqu 1440(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 2/4 - vmovdqu 1472(%rdx), %ymm10 - vmovdqu 1504(%rdx), %ymm12 - vmovdqu 1536(%rdx), %ymm11 - vmovdqu 1568(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 - vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 2/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 1600(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 1632(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 1664(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 1696(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 32(%rdi) + vmovdqu %ymm1, 160(%rdi) + vmovdqu %ymm2, 288(%rdi) + vmovdqu %ymm3, 416(%rdi) + vmovdqu %ymm4, 544(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 800(%rdi) + vmovdqu %ymm7, 928(%rdi) + # 128: 1/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu (%rdi), %ymm0 + vmovdqu 128(%rdi), %ymm1 + vmovdqu 256(%rdi), %ymm2 + vmovdqu 384(%rdi), %ymm3 + vmovdqu 512(%rdi), %ymm4 + vmovdqu 640(%rdi), %ymm5 + vmovdqu 768(%rdi), %ymm6 + vmovdqu 896(%rdi), %ymm7 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 2/4 - vmovdqu 1728(%rdx), %ymm10 - vmovdqu 1760(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 1: 2/4 - vmovdqu 1792(%rdx), %ymm10 - vmovdqu 1824(%rdx), %ymm12 - vmovdqu 1856(%rdx), %ymm11 - vmovdqu 1888(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 1/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 2/4 - vmovdqu 1920(%rdx), %ymm10 - vmovdqu 1952(%rdx), %ymm12 - vmovdqu 1984(%rdx), %ymm11 - vmovdqu 2016(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 2/4 - vmovdqu 2048(%rdx), %ymm10 - vmovdqu 2080(%rdx), %ymm12 - vmovdqu 2112(%rdx), %ymm11 - vmovdqu 2144(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 2/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 2176(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 2208(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 2240(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 2272(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm2, 256(%rdi) + vmovdqu %ymm3, 384(%rdi) + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 640(%rdi) + vmovdqu %ymm6, 768(%rdi) + vmovdqu %ymm7, 896(%rdi) + vmovdqu %ymm1, %ymm4 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + # 32: 1/4 + vmovdqu 192(%rdx), %ymm10 + vmovdqu 224(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 2/4 - vmovdqu 2304(%rdx), %ymm10 - vmovdqu 2336(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 2/4 - vmovdqu 2368(%rdx), %ymm10 - vmovdqu 2400(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 1/4 + vmovdqu 256(%rdx), %ymm10 + vmovdqu 288(%rdx), %ymm12 + vmovdqu 320(%rdx), %ymm11 + vmovdqu 352(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm10, %ymm2, %ymm2 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 256(%rdi) - vmovdqu %ymm1, 288(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 352(%rdi) - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu %ymm6, 448(%rdi) - vmovdqu %ymm7, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vmovdqu 640(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 704(%rdi), %ymm6 - vmovdqu 736(%rdi), %ymm7 - # 1: 3/4 - vmovdqu 2432(%rdx), %ymm10 - vmovdqu 2464(%rdx), %ymm12 - vmovdqu 2496(%rdx), %ymm11 - vmovdqu 2528(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm7, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 1/4 + vmovdqu 384(%rdx), %ymm10 + vmovdqu 416(%rdx), %ymm12 + vmovdqu 448(%rdx), %ymm11 + vmovdqu 480(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 3/4 - vmovdqu 2560(%rdx), %ymm10 - vmovdqu 2592(%rdx), %ymm12 - vmovdqu 2624(%rdx), %ymm11 - vmovdqu 2656(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 512(%rdx), %ymm10 + vmovdqu 544(%rdx), %ymm12 + vmovdqu 576(%rdx), %ymm11 + vmovdqu 608(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 3/4 - vmovdqu 2688(%rdx), %ymm10 - vmovdqu 2720(%rdx), %ymm12 - vmovdqu 2752(%rdx), %ymm11 - vmovdqu 2784(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 1/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 640(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 672(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 704(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 736(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm0, %ymm1, %ymm0 vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm0, %ymm3, %ymm0 vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 3/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 2816(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 2848(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 2880(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 2912(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 1/4 + vmovdqu 768(%rdx), %ymm10 + vmovdqu 800(%rdx), %ymm12 + vmovdqu 832(%rdx), %ymm11 + vmovdqu 864(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 3/4 - vmovdqu 2944(%rdx), %ymm10 - vmovdqu 2976(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 1: 3/4 - vmovdqu 3008(%rdx), %ymm10 - vmovdqu 3040(%rdx), %ymm12 - vmovdqu 3072(%rdx), %ymm11 - vmovdqu 3104(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 1/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 896(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 928(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 960(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 992(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm5, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 1/4 + vmovdqu 1024(%rdx), %ymm10 + vmovdqu 1056(%rdx), %ymm12 + vmovdqu 1088(%rdx), %ymm11 + vmovdqu 1120(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 3/4 - vmovdqu 3136(%rdx), %ymm10 - vmovdqu 3168(%rdx), %ymm12 - vmovdqu 3200(%rdx), %ymm11 - vmovdqu 3232(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 1/4 + vmovdqu 1152(%rdx), %ymm10 + vmovdqu 1184(%rdx), %ymm12 + vmovdqu 1216(%rdx), %ymm11 + vmovdqu 1248(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 3/4 - vmovdqu 3264(%rdx), %ymm10 - vmovdqu 3296(%rdx), %ymm12 - vmovdqu 3328(%rdx), %ymm11 - vmovdqu 3360(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 3/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 3392(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 3424(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 3456(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 3488(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 1/4 + vmovdqu 1280(%rdx), %ymm10 + vmovdqu 1312(%rdx), %ymm12 + vmovdqu 1344(%rdx), %ymm11 + vmovdqu 1376(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 3/4 - vmovdqu 3520(%rdx), %ymm10 - vmovdqu 3552(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + # 32: 2/4 + vmovdqu 1408(%rdx), %ymm10 + vmovdqu 1440(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 3/4 - vmovdqu 3584(%rdx), %ymm10 - vmovdqu 3616(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 2/4 + vmovdqu 1472(%rdx), %ymm10 + vmovdqu 1504(%rdx), %ymm12 + vmovdqu 1536(%rdx), %ymm11 + vmovdqu 1568(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm10, %ymm2, %ymm2 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 512(%rdi) - vmovdqu %ymm1, 544(%rdi) - vmovdqu %ymm2, 576(%rdi) - vmovdqu %ymm3, 608(%rdi) - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 704(%rdi) - vmovdqu %ymm7, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vmovdqu 896(%rdi), %ymm4 - vmovdqu 928(%rdi), %ymm5 - vmovdqu 960(%rdi), %ymm6 - vmovdqu 992(%rdi), %ymm7 - # 1: 4/4 - vmovdqu 3648(%rdx), %ymm10 - vmovdqu 3680(%rdx), %ymm12 - vmovdqu 3712(%rdx), %ymm11 - vmovdqu 3744(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 4/4 - vmovdqu 3776(%rdx), %ymm10 - vmovdqu 3808(%rdx), %ymm12 - vmovdqu 3840(%rdx), %ymm11 - vmovdqu 3872(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 2/4 + vmovdqu 1600(%rdx), %ymm10 + vmovdqu 1632(%rdx), %ymm12 + vmovdqu 1664(%rdx), %ymm11 + vmovdqu 1696(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 4/4 - vmovdqu 3904(%rdx), %ymm10 - vmovdqu 3936(%rdx), %ymm12 - vmovdqu 3968(%rdx), %ymm11 - vmovdqu 4000(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 1728(%rdx), %ymm10 + vmovdqu 1760(%rdx), %ymm12 + vmovdqu 1792(%rdx), %ymm11 + vmovdqu 1824(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm5, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm7, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 2/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 1856(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 1888(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 1920(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 1952(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm0, %ymm1, %ymm0 vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm0, %ymm3, %ymm0 vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 4/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 4032(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 4064(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 4096(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 4128(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 2/4 + vmovdqu 1984(%rdx), %ymm10 + vmovdqu 2016(%rdx), %ymm12 + vmovdqu 2048(%rdx), %ymm11 + vmovdqu 2080(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 4/4 - vmovdqu 4160(%rdx), %ymm10 - vmovdqu 4192(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 2/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 2112(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 2144(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 2176(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 2208(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm5, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 2/4 + vmovdqu 2240(%rdx), %ymm10 + vmovdqu 2272(%rdx), %ymm12 + vmovdqu 2304(%rdx), %ymm11 + vmovdqu 2336(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 1: 4/4 - vmovdqu 4224(%rdx), %ymm10 - vmovdqu 4256(%rdx), %ymm12 - vmovdqu 4288(%rdx), %ymm11 - vmovdqu 4320(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 2/4 + vmovdqu 2368(%rdx), %ymm10 + vmovdqu 2400(%rdx), %ymm12 + vmovdqu 2432(%rdx), %ymm11 + vmovdqu 2464(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 4/4 - vmovdqu 4352(%rdx), %ymm10 - vmovdqu 4384(%rdx), %ymm12 - vmovdqu 4416(%rdx), %ymm11 - vmovdqu 4448(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 2/4 + vmovdqu 2496(%rdx), %ymm10 + vmovdqu 2528(%rdx), %ymm12 + vmovdqu 2560(%rdx), %ymm11 + vmovdqu 2592(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 4/4 - vmovdqu 4480(%rdx), %ymm10 - vmovdqu 4512(%rdx), %ymm12 - vmovdqu 4544(%rdx), %ymm11 - vmovdqu 4576(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + # 32: 3/4 + vmovdqu 2624(%rdx), %ymm10 + vmovdqu 2656(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 4/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 4608(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 4640(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 4672(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 4704(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 4/4 - vmovdqu 4736(%rdx), %ymm10 - vmovdqu 4768(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 3/4 + vmovdqu 2688(%rdx), %ymm10 + vmovdqu 2720(%rdx), %ymm12 + vmovdqu 2752(%rdx), %ymm11 + vmovdqu 2784(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm10, %ymm2, %ymm2 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 4/4 - vmovdqu 4800(%rdx), %ymm10 - vmovdqu 4832(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 3/4 + vmovdqu 2816(%rdx), %ymm10 + vmovdqu 2848(%rdx), %ymm12 + vmovdqu 2880(%rdx), %ymm11 + vmovdqu 2912(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 768(%rdi) - vmovdqu %ymm1, 800(%rdi) - vmovdqu %ymm2, 832(%rdi) - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu %ymm6, 960(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu %ymm3, %ymm6 - vmovdqu 96(%rdi), %ymm0 - vmovdqu 224(%rdi), %ymm1 - vmovdqu 352(%rdi), %ymm2 - vmovdqu 480(%rdi), %ymm3 - vmovdqu 608(%rdi), %ymm4 - vmovdqu 736(%rdi), %ymm5 - # 64: 4/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 2944(%rdx), %ymm10 + vmovdqu 2976(%rdx), %ymm12 + vmovdqu 3008(%rdx), %ymm11 + vmovdqu 3040(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 3/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 3072(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 3104(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 3136(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 3168(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 3/4 + vmovdqu 3200(%rdx), %ymm10 + vmovdqu 3232(%rdx), %ymm12 + vmovdqu 3264(%rdx), %ymm11 + vmovdqu 3296(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm1, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 4/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 3/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 3328(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 3360(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 3392(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 3424(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 vmovshdup %ymm4, %ymm15 vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 - vpsubq %ymm15, %ymm9, %ymm15 + vpsubq %ymm4, %ymm5, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 vmovshdup %ymm4, %ymm4 vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 3/4 + vmovdqu 3456(%rdx), %ymm10 + vmovdqu 3488(%rdx), %ymm12 + vmovdqu 3520(%rdx), %ymm11 + vmovdqu 3552(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 3/4 + vmovdqu 3584(%rdx), %ymm10 + vmovdqu 3616(%rdx), %ymm12 + vmovdqu 3648(%rdx), %ymm11 + vmovdqu 3680(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 - vpmuldq %ymm11, %ymm6, %ymm6 - vpmuldq %ymm11, %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 3/4 + vmovdqu 3712(%rdx), %ymm10 + vmovdqu 3744(%rdx), %ymm12 + vmovdqu 3776(%rdx), %ymm11 + vmovdqu 3808(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 96(%rdi) - vmovdqu %ymm1, 224(%rdi) - vmovdqu %ymm2, 352(%rdi) - vmovdqu %ymm3, 480(%rdi) - vmovdqu %ymm4, 608(%rdi) - vmovdqu %ymm5, 736(%rdi) - vmovdqu %ymm6, 864(%rdi) - vmovdqu %ymm7, 992(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu 64(%rdi), %ymm0 - vmovdqu 192(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 448(%rdi), %ymm3 - vmovdqu 576(%rdi), %ymm4 - vmovdqu 704(%rdi), %ymm5 - vmovdqu 832(%rdi), %ymm6 - vmovdqu 960(%rdi), %ymm7 - # 64: 3/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 3/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + # 32: 4/4 + vmovdqu 3840(%rdx), %ymm10 + vmovdqu 3872(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 4/4 + vmovdqu 3904(%rdx), %ymm10 + vmovdqu 3936(%rdx), %ymm12 + vmovdqu 3968(%rdx), %ymm11 + vmovdqu 4000(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpmuldq %ymm10, %ymm2, %ymm2 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 vpmuldq %ymm11, %ymm6, %ymm6 - vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 64(%rdi) - vmovdqu %ymm1, 192(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 448(%rdi) - vmovdqu %ymm4, 576(%rdi) - vmovdqu %ymm5, 704(%rdi) - vmovdqu %ymm6, 832(%rdi) - vmovdqu %ymm7, 960(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu 32(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vmovdqu 288(%rdi), %ymm2 - vmovdqu 416(%rdi), %ymm3 - vmovdqu 544(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 800(%rdi), %ymm6 - vmovdqu 928(%rdi), %ymm7 - # 64: 2/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 2/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 4/4 + vmovdqu 4032(%rdx), %ymm10 + vmovdqu 4064(%rdx), %ymm12 + vmovdqu 4096(%rdx), %ymm11 + vmovdqu 4128(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 4160(%rdx), %ymm10 + vmovdqu 4192(%rdx), %ymm12 + vmovdqu 4224(%rdx), %ymm11 + vmovdqu 4256(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 4/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 4288(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 4320(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 4352(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 4384(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 4/4 + vmovdqu 4416(%rdx), %ymm10 + vmovdqu 4448(%rdx), %ymm12 + vmovdqu 4480(%rdx), %ymm11 + vmovdqu 4512(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 - vpmuldq %ymm11, %ymm6, %ymm6 - vpmuldq %ymm11, %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 32(%rdi) - vmovdqu %ymm1, 160(%rdi) - vmovdqu %ymm2, 288(%rdi) - vmovdqu %ymm3, 416(%rdi) - vmovdqu %ymm4, 544(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 800(%rdi) - vmovdqu %ymm7, 928(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu (%rdi), %ymm0 - vmovdqu 128(%rdi), %ymm1 - vmovdqu 256(%rdi), %ymm2 - vmovdqu 384(%rdi), %ymm3 - vmovdqu 512(%rdi), %ymm4 - vmovdqu 640(%rdi), %ymm5 - vmovdqu 768(%rdi), %ymm6 - vmovdqu 896(%rdi), %ymm7 - # 64: 1/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 4/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 4544(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 4576(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 4608(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 4640(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 1/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 + vpsubq %ymm4, %ymm5, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 vmovshdup %ymm4, %ymm15 vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 - vpsubq %ymm15, %ymm9, %ymm15 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 vmovshdup %ymm4, %ymm4 vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 4/4 + vmovdqu 4672(%rdx), %ymm10 + vmovdqu 4704(%rdx), %ymm12 + vmovdqu 4736(%rdx), %ymm11 + vmovdqu 4768(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 4/4 + vmovdqu 4800(%rdx), %ymm10 + vmovdqu 4832(%rdx), %ymm12 + vmovdqu 4864(%rdx), %ymm11 + vmovdqu 4896(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 4/4 + vmovdqu 4928(%rdx), %ymm10 + vmovdqu 4960(%rdx), %ymm12 + vmovdqu 4992(%rdx), %ymm11 + vmovdqu 5024(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 - vpmuldq %ymm11, %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 128(%rdi) - vmovdqu %ymm2, 256(%rdi) - vmovdqu %ymm3, 384(%rdi) - vmovdqu %ymm4, 512(%rdi) - vmovdqu %ymm5, 640(%rdi) - vmovdqu %ymm6, 768(%rdi) - vmovdqu %ymm7, 896(%rdi) + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm3, 864(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu %ymm7, 992(%rdi) vzeroupper repz retq #ifndef __APPLE__ -.size wc_mldsa_invntt_avx2,.-wc_mldsa_invntt_avx2 +.size wc_mldsa_ntt_full_avx2,.-wc_mldsa_ntt_full_avx2 #endif /* __APPLE__ */ #ifndef __APPLE__ .text -.globl wc_mldsa_invntt_full_avx2 -.type wc_mldsa_invntt_full_avx2,@function +.globl wc_mldsa_ntt_small_full_avx2 +.type wc_mldsa_ntt_small_full_avx2,@function .align 16 -wc_mldsa_invntt_full_avx2: +wc_mldsa_ntt_small_full_avx2: #else .section __TEXT,__text -.globl _wc_mldsa_invntt_full_avx2 +.globl _wc_mldsa_ntt_small_full_avx2 .p2align 4 -_wc_mldsa_invntt_full_avx2: +_wc_mldsa_ntt_small_full_avx2: #endif /* __APPLE__ */ vpxor %ymm14, %ymm14, %ymm14 vmovdqu mldsa_q(%rip), %ymm14 - # invntt - leaq L_mldsa_avx2_zetas_inv(%rip), %rdx - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vmovdqu 64(%rdi), %ymm2 - vmovdqu 96(%rdi), %ymm3 - vmovdqu 128(%rdi), %ymm4 - vmovdqu 160(%rdi), %ymm5 - vmovdqu 192(%rdi), %ymm6 - vmovdqu 224(%rdi), %ymm7 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpermq $0xd8, %ymm0, %ymm0 - vpermq $0xd8, %ymm1, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpermq $0xd8, %ymm2, %ymm2 - vpermq $0xd8, %ymm3, %ymm3 - # 1: 1/4 - vmovdqu (%rdx), %ymm10 - vmovdqu 32(%rdx), %ymm12 + # ntt + leaq L_mldsa_avx2_zetas(%rip), %rdx vmovdqu 64(%rdx), %ymm11 vmovdqu 96(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + # 128: 4/4 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 + vmovdqu 96(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vmovdqu 352(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vmovdqu 608(%rdi), %ymm4 + vmovdqu 736(%rdi), %ymm5 + vmovdqu 864(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 4/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 1/4 - vmovdqu 128(%rdx), %ymm10 - vmovdqu 160(%rdx), %ymm12 - vmovdqu 192(%rdx), %ymm11 - vmovdqu 224(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 1/4 - vmovdqu 256(%rdx), %ymm10 - vmovdqu 288(%rdx), %ymm12 - vmovdqu 320(%rdx), %ymm11 - vmovdqu 352(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 - vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 1/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 384(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 416(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 448(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 480(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 96(%rdi) + vmovdqu %ymm1, 224(%rdi) + vmovdqu %ymm2, 352(%rdi) + vmovdqu %ymm3, 480(%rdi) + vmovdqu %ymm4, 608(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu %ymm6, 864(%rdi) + vmovdqu %ymm7, 992(%rdi) + # 128: 3/4 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 + vmovdqu 64(%rdi), %ymm0 + vmovdqu 192(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 448(%rdi), %ymm3 + vmovdqu 576(%rdi), %ymm4 + vmovdqu 704(%rdi), %ymm5 + vmovdqu 832(%rdi), %ymm6 + vmovdqu 960(%rdi), %ymm7 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 3/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 1/4 - vmovdqu 512(%rdx), %ymm10 - vmovdqu 544(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpermq $0xd8, %ymm4, %ymm4 - vpermq $0xd8, %ymm5, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpermq $0xd8, %ymm6, %ymm6 - vpermq $0xd8, %ymm7, %ymm7 - # 1: 1/4 - vmovdqu 576(%rdx), %ymm10 - vmovdqu 608(%rdx), %ymm12 - vmovdqu 640(%rdx), %ymm11 - vmovdqu 672(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 64(%rdi) + vmovdqu %ymm1, 192(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 448(%rdi) + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 704(%rdi) + vmovdqu %ymm6, 832(%rdi) + vmovdqu %ymm7, 960(%rdi) + # 128: 2/4 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 + vmovdqu 32(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 288(%rdi), %ymm2 + vmovdqu 416(%rdi), %ymm3 + vmovdqu 544(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 800(%rdi), %ymm6 + vmovdqu 928(%rdi), %ymm7 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 2/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 1/4 - vmovdqu 704(%rdx), %ymm10 - vmovdqu 736(%rdx), %ymm12 - vmovdqu 768(%rdx), %ymm11 - vmovdqu 800(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 1/4 - vmovdqu 832(%rdx), %ymm10 - vmovdqu 864(%rdx), %ymm12 - vmovdqu 896(%rdx), %ymm11 - vmovdqu 928(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 1/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 960(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 992(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 1024(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 1056(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm0, 32(%rdi) + vmovdqu %ymm1, 160(%rdi) + vmovdqu %ymm2, 288(%rdi) + vmovdqu %ymm3, 416(%rdi) + vmovdqu %ymm4, 544(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 800(%rdi) + vmovdqu %ymm7, 928(%rdi) + # 128: 1/4 + vmovdqu L_mldsa_avx2_zeta1(%rip), %ymm10 + vmovdqu L_mldsa_avx2_half(%rip), %ymm12 + vmovdqu (%rdi), %ymm0 + vmovdqu 128(%rdi), %ymm1 + vmovdqu 256(%rdi), %ymm2 + vmovdqu 384(%rdi), %ymm3 + vmovdqu 512(%rdi), %ymm4 + vmovdqu 640(%rdi), %ymm5 + vmovdqu 768(%rdi), %ymm6 + vmovdqu 896(%rdi), %ymm7 + vpmulld %ymm10, %ymm4, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm10, %ymm5, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm10, %ymm6, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm10, %ymm7, %ymm8 + vpaddd %ymm12, %ymm8, %ymm9 + vpsrad $23, %ymm9, %ymm9 + vpmulld %ymm14, %ymm9, %ymm9 + vpsubd %ymm9, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 64: 1/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vpmulld %ymm13, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm11, %ymm2, %ymm2 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 1/4 - vmovdqu 1088(%rdx), %ymm10 - vmovdqu 1120(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 1/4 - vmovdqu 1152(%rdx), %ymm10 - vmovdqu 1184(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + vmovdqu %ymm2, 256(%rdi) + vmovdqu %ymm3, 384(%rdi) + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 640(%rdi) + vmovdqu %ymm6, 768(%rdi) + vmovdqu %ymm7, 896(%rdi) + vmovdqu %ymm1, %ymm4 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + # 32: 1/4 + vmovdqu 192(%rdx), %ymm10 + vmovdqu 224(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 32(%rdi) - vmovdqu %ymm2, 64(%rdi) - vmovdqu %ymm3, 96(%rdi) - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu %ymm6, 192(%rdi) - vmovdqu %ymm7, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vmovdqu 384(%rdi), %ymm4 - vmovdqu 416(%rdi), %ymm5 - vmovdqu 448(%rdi), %ymm6 - vmovdqu 480(%rdi), %ymm7 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpermq $0xd8, %ymm0, %ymm0 - vpermq $0xd8, %ymm1, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpermq $0xd8, %ymm2, %ymm2 - vpermq $0xd8, %ymm3, %ymm3 - # 1: 2/4 - vmovdqu 1216(%rdx), %ymm10 - vmovdqu 1248(%rdx), %ymm12 - vmovdqu 1280(%rdx), %ymm11 - vmovdqu 1312(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 1/4 + vmovdqu 256(%rdx), %ymm10 + vmovdqu 288(%rdx), %ymm12 + vmovdqu 320(%rdx), %ymm11 + vmovdqu 352(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm10, %ymm2, %ymm2 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 2/4 - vmovdqu 1344(%rdx), %ymm10 - vmovdqu 1376(%rdx), %ymm12 - vmovdqu 1408(%rdx), %ymm11 - vmovdqu 1440(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 2/4 - vmovdqu 1472(%rdx), %ymm10 - vmovdqu 1504(%rdx), %ymm12 - vmovdqu 1536(%rdx), %ymm11 - vmovdqu 1568(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 - vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 2/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 1600(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 1632(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 1664(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 1696(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 1/4 + vmovdqu 384(%rdx), %ymm10 + vmovdqu 416(%rdx), %ymm12 + vmovdqu 448(%rdx), %ymm11 + vmovdqu 480(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 2/4 - vmovdqu 1728(%rdx), %ymm10 - vmovdqu 1760(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 512(%rdx), %ymm10 + vmovdqu 544(%rdx), %ymm12 + vmovdqu 576(%rdx), %ymm11 + vmovdqu 608(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpermq $0xd8, %ymm4, %ymm4 - vpermq $0xd8, %ymm5, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpermq $0xd8, %ymm6, %ymm6 - vpermq $0xd8, %ymm7, %ymm7 - # 1: 2/4 - vmovdqu 1792(%rdx), %ymm10 - vmovdqu 1824(%rdx), %ymm12 - vmovdqu 1856(%rdx), %ymm11 - vmovdqu 1888(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 1/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 640(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 672(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 704(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 736(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 1/4 + vmovdqu 768(%rdx), %ymm10 + vmovdqu 800(%rdx), %ymm12 + vmovdqu 832(%rdx), %ymm11 + vmovdqu 864(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 2/4 - vmovdqu 1920(%rdx), %ymm10 - vmovdqu 1952(%rdx), %ymm12 - vmovdqu 1984(%rdx), %ymm11 - vmovdqu 2016(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 2/4 - vmovdqu 2048(%rdx), %ymm10 - vmovdqu 2080(%rdx), %ymm12 - vmovdqu 2112(%rdx), %ymm11 - vmovdqu 2144(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 1/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 896(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 928(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 960(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 992(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm4, %ymm5, %ymm4 vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm4, %ymm7, %ymm4 vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 2/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 2176(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 2208(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 2240(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 2272(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 1/4 + vmovdqu 1024(%rdx), %ymm10 + vmovdqu 1056(%rdx), %ymm12 + vmovdqu 1088(%rdx), %ymm11 + vmovdqu 1120(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 2/4 - vmovdqu 2304(%rdx), %ymm10 - vmovdqu 2336(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 1/4 + vmovdqu 1152(%rdx), %ymm10 + vmovdqu 1184(%rdx), %ymm12 + vmovdqu 1216(%rdx), %ymm11 + vmovdqu 1248(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 2/4 - vmovdqu 2368(%rdx), %ymm10 - vmovdqu 2400(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 1/4 + vmovdqu 1280(%rdx), %ymm10 + vmovdqu 1312(%rdx), %ymm12 + vmovdqu 1344(%rdx), %ymm11 + vmovdqu 1376(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm7, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + # 32: 2/4 + vmovdqu 1408(%rdx), %ymm10 + vmovdqu 1440(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 256(%rdi) - vmovdqu %ymm1, 288(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 352(%rdi) - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu %ymm6, 448(%rdi) - vmovdqu %ymm7, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vmovdqu 640(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 704(%rdi), %ymm6 - vmovdqu 736(%rdi), %ymm7 - vpunpckldq %ymm1, %ymm0, %ymm8 - vpunpckhdq %ymm1, %ymm0, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpermq $0xd8, %ymm0, %ymm0 - vpermq $0xd8, %ymm1, %ymm1 - vpunpckldq %ymm3, %ymm2, %ymm8 - vpunpckhdq %ymm3, %ymm2, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpermq $0xd8, %ymm2, %ymm2 - vpermq $0xd8, %ymm3, %ymm3 - # 1: 3/4 - vmovdqu 2432(%rdx), %ymm10 - vmovdqu 2464(%rdx), %ymm12 - vmovdqu 2496(%rdx), %ymm11 - vmovdqu 2528(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 2/4 + vmovdqu 1472(%rdx), %ymm10 + vmovdqu 1504(%rdx), %ymm12 + vmovdqu 1536(%rdx), %ymm11 + vmovdqu 1568(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 + vpmuldq %ymm10, %ymm2, %ymm2 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 3/4 - vmovdqu 2560(%rdx), %ymm10 - vmovdqu 2592(%rdx), %ymm12 - vmovdqu 2624(%rdx), %ymm11 - vmovdqu 2656(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 3/4 - vmovdqu 2688(%rdx), %ymm10 - vmovdqu 2720(%rdx), %ymm12 - vmovdqu 2752(%rdx), %ymm11 - vmovdqu 2784(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 - vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 3/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 2816(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 2848(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 2880(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 2912(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 2/4 + vmovdqu 1600(%rdx), %ymm10 + vmovdqu 1632(%rdx), %ymm12 + vmovdqu 1664(%rdx), %ymm11 + vmovdqu 1696(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 3/4 - vmovdqu 2944(%rdx), %ymm10 - vmovdqu 2976(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 1728(%rdx), %ymm10 + vmovdqu 1760(%rdx), %ymm12 + vmovdqu 1792(%rdx), %ymm11 + vmovdqu 1824(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpermq $0xd8, %ymm4, %ymm4 - vpermq $0xd8, %ymm5, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpermq $0xd8, %ymm6, %ymm6 - vpermq $0xd8, %ymm7, %ymm7 - # 1: 3/4 - vmovdqu 3008(%rdx), %ymm10 - vmovdqu 3040(%rdx), %ymm12 - vmovdqu 3072(%rdx), %ymm11 - vmovdqu 3104(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 2/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 1856(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 1888(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 1920(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 1952(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 3/4 - vmovdqu 3136(%rdx), %ymm10 - vmovdqu 3168(%rdx), %ymm12 - vmovdqu 3200(%rdx), %ymm11 - vmovdqu 3232(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 2/4 + vmovdqu 1984(%rdx), %ymm10 + vmovdqu 2016(%rdx), %ymm12 + vmovdqu 2048(%rdx), %ymm11 + vmovdqu 2080(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 3/4 - vmovdqu 3264(%rdx), %ymm10 - vmovdqu 3296(%rdx), %ymm12 - vmovdqu 3328(%rdx), %ymm11 - vmovdqu 3360(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 2/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 2112(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 2144(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 2176(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 2208(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm4, %ymm5, %ymm4 vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm4, %ymm7, %ymm4 vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 3/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 3392(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 3424(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 3456(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 3488(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 2/4 + vmovdqu 2240(%rdx), %ymm10 + vmovdqu 2272(%rdx), %ymm12 + vmovdqu 2304(%rdx), %ymm11 + vmovdqu 2336(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 3/4 - vmovdqu 3520(%rdx), %ymm10 - vmovdqu 3552(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 2/4 + vmovdqu 2368(%rdx), %ymm10 + vmovdqu 2400(%rdx), %ymm12 + vmovdqu 2432(%rdx), %ymm11 + vmovdqu 2464(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 3/4 - vmovdqu 3584(%rdx), %ymm10 - vmovdqu 3616(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 2/4 + vmovdqu 2496(%rdx), %ymm10 + vmovdqu 2528(%rdx), %ymm12 + vmovdqu 2560(%rdx), %ymm11 + vmovdqu 2592(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 512(%rdi) - vmovdqu %ymm1, 544(%rdi) - vmovdqu %ymm2, 576(%rdi) - vmovdqu %ymm3, 608(%rdi) - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 704(%rdi) - vmovdqu %ymm7, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vmovdqu 896(%rdi), %ymm4 - vmovdqu 928(%rdi), %ymm5 - vmovdqu 960(%rdi), %ymm6 - vmovdqu 992(%rdi), %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 vpunpckldq %ymm1, %ymm0, %ymm8 vpunpckhdq %ymm1, %ymm0, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpermq $0xd8, %ymm0, %ymm0 - vpermq $0xd8, %ymm1, %ymm1 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 vpunpckldq %ymm3, %ymm2, %ymm8 vpunpckhdq %ymm3, %ymm2, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpermq $0xd8, %ymm2, %ymm2 - vpermq $0xd8, %ymm3, %ymm3 - # 1: 4/4 - vmovdqu 3648(%rdx), %ymm10 - vmovdqu 3680(%rdx), %ymm12 - vmovdqu 3712(%rdx), %ymm11 - vmovdqu 3744(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + # 32: 3/4 + vmovdqu 2624(%rdx), %ymm10 + vmovdqu 2656(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 2: 4/4 - vmovdqu 3776(%rdx), %ymm10 - vmovdqu 3808(%rdx), %ymm12 - vmovdqu 3840(%rdx), %ymm11 - vmovdqu 3872(%rdx), %ymm13 - vpshufd $0xd8, %ymm0, %ymm8 - vpshufd $0xd8, %ymm1, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm0 - vpunpckhdq %ymm9, %ymm8, %ymm1 - vpshufd $0xd8, %ymm2, %ymm8 - vpshufd $0xd8, %ymm3, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm2 - vpunpckhdq %ymm9, %ymm8, %ymm3 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 4: 4/4 - vmovdqu 3904(%rdx), %ymm10 - vmovdqu 3936(%rdx), %ymm12 - vmovdqu 3968(%rdx), %ymm11 - vmovdqu 4000(%rdx), %ymm13 - vpunpcklqdq %ymm1, %ymm0, %ymm8 - vpunpckhqdq %ymm1, %ymm0, %ymm1 - vpunpcklqdq %ymm3, %ymm2, %ymm9 - vpunpckhqdq %ymm3, %ymm2, %ymm3 - vpsubd %ymm1, %ymm8, %ymm0 - vpaddd %ymm1, %ymm8, %ymm8 - vpmulld %ymm12, %ymm0, %ymm1 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm10, %ymm0, %ymm0 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 3/4 + vmovdqu 2688(%rdx), %ymm10 + vmovdqu 2720(%rdx), %ymm12 + vmovdqu 2752(%rdx), %ymm11 + vmovdqu 2784(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 + vmovshdup %ymm2, %ymm9 vpmuldq %ymm10, %ymm2, %ymm2 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm0, %ymm1 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm9, %ymm0 - vpaddd %ymm3, %ymm9, %ymm9 - vpmulld %ymm13, %ymm0, %ymm3 - vmovshdup %ymm0, %ymm2 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm2, %ymm2 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm0, %ymm3 - vpsubq %ymm15, %ymm2, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 8: 4/4 - vperm2i128 $32, %ymm1, %ymm8, %ymm0 - vmovdqu 4032(%rdx), %ymm10 - vperm2i128 $49, %ymm1, %ymm8, %ymm1 - vmovdqu 4064(%rdx), %ymm12 - vperm2i128 $32, %ymm3, %ymm9, %ymm2 - vmovdqu 4096(%rdx), %ymm11 - vperm2i128 $49, %ymm3, %ymm9, %ymm3 - vmovdqu 4128(%rdx), %ymm13 - vpsubd %ymm1, %ymm0, %ymm8 - vpaddd %ymm1, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm1 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm1, %ymm15 - vpmuldq %ymm14, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm1, %ymm1 - vpblendd $0xaa, %ymm15, %ymm1, %ymm1 - vpsubd %ymm3, %ymm2, %ymm8 - vpaddd %ymm3, %ymm2, %ymm2 - vpmulld %ymm13, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm13, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm11, %ymm6, %ymm6 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - # 16: 4/4 - vmovdqu 4160(%rdx), %ymm10 - vmovdqu 4192(%rdx), %ymm12 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 3/4 + vmovdqu 2816(%rdx), %ymm10 + vmovdqu 2848(%rdx), %ymm12 + vmovdqu 2880(%rdx), %ymm11 + vmovdqu 2912(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vpunpckldq %ymm5, %ymm4, %ymm8 - vpunpckhdq %ymm5, %ymm4, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpermq $0xd8, %ymm4, %ymm4 - vpermq $0xd8, %ymm5, %ymm5 - vpunpckldq %ymm7, %ymm6, %ymm8 - vpunpckhdq %ymm7, %ymm6, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpermq $0xd8, %ymm6, %ymm6 - vpermq $0xd8, %ymm7, %ymm7 - # 1: 4/4 - vmovdqu 4224(%rdx), %ymm10 - vmovdqu 4256(%rdx), %ymm12 - vmovdqu 4288(%rdx), %ymm11 - vmovdqu 4320(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm3, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 2944(%rdx), %ymm10 + vmovdqu 2976(%rdx), %ymm12 + vmovdqu 3008(%rdx), %ymm11 + vmovdqu 3040(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vmovshdup %ymm11, %ymm11 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 2: 4/4 - vmovdqu 4352(%rdx), %ymm10 - vmovdqu 4384(%rdx), %ymm12 - vmovdqu 4416(%rdx), %ymm11 - vmovdqu 4448(%rdx), %ymm13 - vpshufd $0xd8, %ymm4, %ymm8 - vpshufd $0xd8, %ymm5, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm4 - vpunpckhdq %ymm9, %ymm8, %ymm5 - vpshufd $0xd8, %ymm6, %ymm8 - vpshufd $0xd8, %ymm7, %ymm9 - vpunpckldq %ymm9, %ymm8, %ymm6 - vpunpckhdq %ymm9, %ymm8, %ymm7 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 3/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 3072(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 3104(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 3136(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 3168(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 3/4 + vmovdqu 3200(%rdx), %ymm10 + vmovdqu 3232(%rdx), %ymm12 + vmovdqu 3264(%rdx), %ymm11 + vmovdqu 3296(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 4: 4/4 - vmovdqu 4480(%rdx), %ymm10 - vmovdqu 4512(%rdx), %ymm12 - vmovdqu 4544(%rdx), %ymm11 - vmovdqu 4576(%rdx), %ymm13 - vpunpcklqdq %ymm5, %ymm4, %ymm8 - vpunpckhqdq %ymm5, %ymm4, %ymm5 - vpunpcklqdq %ymm7, %ymm6, %ymm9 - vpunpckhqdq %ymm7, %ymm6, %ymm7 - vpsubd %ymm5, %ymm8, %ymm4 - vpaddd %ymm5, %ymm8, %ymm8 - vpmulld %ymm12, %ymm4, %ymm5 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm10, %ymm4, %ymm4 - vpmuldq %ymm10, %ymm6, %ymm6 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm4, %ymm5 - vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm9, %ymm4 - vpaddd %ymm7, %ymm9, %ymm9 - vpmulld %ymm13, %ymm4, %ymm7 - vmovshdup %ymm4, %ymm6 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm6, %ymm6 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 3/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 3328(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 3360(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 3392(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 3424(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm4, %ymm5, %ymm4 vpsubq %ymm15, %ymm6, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 8: 4/4 - vperm2i128 $32, %ymm5, %ymm8, %ymm4 - vmovdqu 4608(%rdx), %ymm10 - vperm2i128 $49, %ymm5, %ymm8, %ymm5 - vmovdqu 4640(%rdx), %ymm12 - vperm2i128 $32, %ymm7, %ymm9, %ymm6 - vmovdqu 4672(%rdx), %ymm11 - vperm2i128 $49, %ymm7, %ymm9, %ymm7 - vmovdqu 4704(%rdx), %ymm13 - vpsubd %ymm5, %ymm4, %ymm8 - vpaddd %ymm5, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm7, %ymm6, %ymm8 - vpaddd %ymm7, %ymm6, %ymm6 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 16: 4/4 - vmovdqu 4736(%rdx), %ymm10 - vmovdqu 4768(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 32: 4/4 - vmovdqu 4800(%rdx), %ymm10 - vmovdqu 4832(%rdx), %ymm12 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 vmovshdup %ymm4, %ymm15 vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 - vpsubq %ymm15, %ymm9, %ymm15 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 vmovshdup %ymm4, %ymm4 vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 3/4 + vmovdqu 3456(%rdx), %ymm10 + vmovdqu 3488(%rdx), %ymm12 + vmovdqu 3520(%rdx), %ymm11 + vmovdqu 3552(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 3/4 + vmovdqu 3584(%rdx), %ymm10 + vmovdqu 3616(%rdx), %ymm12 + vmovdqu 3648(%rdx), %ymm11 + vmovdqu 3680(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 768(%rdi) - vmovdqu %ymm1, 800(%rdi) - vmovdqu %ymm2, 832(%rdi) - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu %ymm6, 960(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu %ymm3, %ymm6 - vmovdqu 96(%rdi), %ymm0 - vmovdqu 224(%rdi), %ymm1 - vmovdqu 352(%rdi), %ymm2 - vmovdqu 480(%rdi), %ymm3 - vmovdqu 608(%rdi), %ymm4 - vmovdqu 736(%rdi), %ymm5 - # 64: 4/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 3/4 + vmovdqu 3712(%rdx), %ymm10 + vmovdqu 3744(%rdx), %ymm12 + vmovdqu 3776(%rdx), %ymm11 + vmovdqu 3808(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vmovshdup %ymm10, %ymm10 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 4/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + # 32: 4/4 + vmovdqu 3840(%rdx), %ymm10 + vmovdqu 3872(%rdx), %ymm12 + vpmulld %ymm12, %ymm4, %ymm8 + vmovshdup %ymm4, %ymm9 + vpmuldq %ymm10, %ymm4, %ymm4 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm8, %ymm4, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm4 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm5 + vpaddd %ymm8, %ymm1, %ymm1 + vpmulld %ymm12, %ymm6, %ymm8 + vmovshdup %ymm6, %ymm9 + vpmuldq %ymm10, %ymm6, %ymm6 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm6 + vpaddd %ymm8, %ymm2, %ymm2 + vpmulld %ymm12, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm10, %ymm7, %ymm7 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm3, %ymm7 + vpaddd %ymm8, %ymm3, %ymm3 + # 16: 4/4 + vmovdqu 3904(%rdx), %ymm10 + vmovdqu 3936(%rdx), %ymm12 + vmovdqu 3968(%rdx), %ymm11 + vmovdqu 4000(%rdx), %ymm13 + vpmulld %ymm12, %ymm2, %ymm8 vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpmuldq %ymm10, %ymm2, %ymm2 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 vpsubq %ymm8, %ymm2, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm2 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm12, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm10, %ymm3, %ymm3 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm1, %ymm3 + vpaddd %ymm8, %ymm1, %ymm1 vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 vpmuldq %ymm11, %ymm6, %ymm6 - vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 vpsubq %ymm8, %ymm6, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 96(%rdi) - vmovdqu %ymm1, 224(%rdi) - vmovdqu %ymm2, 352(%rdi) - vmovdqu %ymm3, 480(%rdi) - vmovdqu %ymm4, 608(%rdi) - vmovdqu %ymm5, 736(%rdi) - vmovdqu %ymm6, 864(%rdi) - vmovdqu %ymm7, 992(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu 64(%rdi), %ymm0 - vmovdqu 192(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 448(%rdi), %ymm3 - vmovdqu 576(%rdi), %ymm4 - vmovdqu 704(%rdi), %ymm5 - vmovdqu 832(%rdi), %ymm6 - vmovdqu 960(%rdi), %ymm7 - # 64: 3/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm6 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 3/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm4, %ymm15 - vpmuldq %ymm14, %ymm4, %ymm4 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm4, %ymm4 - vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm5, %ymm7 + vpaddd %ymm8, %ymm5, %ymm5 + # 8: 4/4 + vmovdqu 4032(%rdx), %ymm10 + vmovdqu 4064(%rdx), %ymm12 + vmovdqu 4096(%rdx), %ymm11 + vmovdqu 4128(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + vmovdqu 4160(%rdx), %ymm10 + vmovdqu 4192(%rdx), %ymm12 + vmovdqu 4224(%rdx), %ymm11 + vmovdqu 4256(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 - vpmuldq %ymm11, %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 64(%rdi) - vmovdqu %ymm1, 192(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 448(%rdi) - vmovdqu %ymm4, 576(%rdi) - vmovdqu %ymm5, 704(%rdi) - vmovdqu %ymm6, 832(%rdi) - vmovdqu %ymm7, 960(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 - vmovdqu 32(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vmovdqu 288(%rdi), %ymm2 - vmovdqu 416(%rdi), %ymm3 - vmovdqu 544(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 800(%rdi), %ymm6 - vmovdqu 928(%rdi), %ymm7 - # 64: 2/4 - vpsubd %ymm2, %ymm0, %ymm8 - vpaddd %ymm2, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm2 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm2, %ymm15 - vpmuldq %ymm14, %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 4: 4/4 + vperm2i128 $32, %ymm1, %ymm0, %ymm8 + vmovdqu 4288(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm0, %ymm1 + vmovdqu 4320(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm2, %ymm9 + vmovdqu 4352(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm2, %ymm3 + vmovdqu 4384(%rdx), %ymm13 + vpmulld %ymm12, %ymm1, %ymm0 + vmovshdup %ymm1, %ymm2 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm2, %ymm8, %ymm2 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm2, %ymm2 - vpblendd $0xaa, %ymm15, %ymm2, %ymm2 - vpsubd %ymm3, %ymm1, %ymm8 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm3 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm3, %ymm15 - vpmuldq %ymm14, %ymm3, %ymm3 + vpsubq %ymm0, %ymm1, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm8, %ymm1 + vpaddd %ymm0, %ymm8, %ymm8 + vpmulld %ymm13, %ymm3, %ymm0 + vmovshdup %ymm3, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm0, %ymm15 + vpmuldq %ymm14, %ymm0, %ymm0 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm3, %ymm8, %ymm3 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm3, %ymm3 - vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vpsubq %ymm0, %ymm3, %ymm0 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm0, %ymm0 + vpblendd $0xaa, %ymm15, %ymm0, %ymm0 + vpsubd %ymm0, %ymm9, %ymm3 + vpaddd %ymm0, %ymm9, %ymm9 + # 2: 4/4 + vmovdqu 4416(%rdx), %ymm10 + vmovdqu 4448(%rdx), %ymm12 + vmovdqu 4480(%rdx), %ymm11 + vmovdqu 4512(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm8, %ymm0 + vpunpckhqdq %ymm1, %ymm8, %ymm1 + vpunpcklqdq %ymm3, %ymm9, %ymm2 + vpunpckhqdq %ymm3, %ymm9, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm5, %ymm8 - vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 vpmuldq %ymm11, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 2/4 - vpsubd %ymm4, %ymm0, %ymm8 - vpaddd %ymm4, %ymm0, %ymm0 - vpmulld %ymm12, %ymm8, %ymm4 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 4: 4/4 + vperm2i128 $32, %ymm5, %ymm4, %ymm8 + vmovdqu 4544(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm4, %ymm5 + vmovdqu 4576(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm6, %ymm9 + vmovdqu 4608(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm6, %ymm7 + vmovdqu 4640(%rdx), %ymm13 + vpmulld %ymm12, %ymm5, %ymm4 + vmovshdup %ymm5, %ymm6 + vpmuldq %ymm10, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm6, %ymm6 vmovshdup %ymm4, %ymm15 vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm4, %ymm8, %ymm4 - vpsubq %ymm15, %ymm9, %ymm15 + vpsubq %ymm4, %ymm5, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 vmovshdup %ymm4, %ymm4 vpblendd $0xaa, %ymm15, %ymm4, %ymm4 - vpsubd %ymm5, %ymm1, %ymm8 - vpaddd %ymm5, %ymm1, %ymm1 - vpmulld %ymm12, %ymm8, %ymm5 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm5, %ymm15 - vpmuldq %ymm14, %ymm5, %ymm5 - vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm5, %ymm8, %ymm5 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm5, %ymm5 - vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 - vpsubd %ymm6, %ymm2, %ymm8 - vpaddd %ymm6, %ymm2, %ymm2 - vpmulld %ymm12, %ymm8, %ymm6 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 - vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm6, %ymm15 - vpmuldq %ymm14, %ymm6, %ymm6 + vpsubd %ymm4, %ymm8, %ymm5 + vpaddd %ymm4, %ymm8, %ymm8 + vpmulld %ymm13, %ymm7, %ymm4 + vmovshdup %ymm7, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm6, %ymm8, %ymm6 - vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm6, %ymm6 - vpblendd $0xaa, %ymm15, %ymm6, %ymm6 - vpsubd %ymm7, %ymm3, %ymm8 - vpaddd %ymm7, %ymm3, %ymm3 - vpmulld %ymm12, %ymm8, %ymm7 - vmovshdup %ymm8, %ymm9 - vpmuldq %ymm10, %ymm8, %ymm8 + vpsubq %ymm4, %ymm7, %ymm4 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm4, %ymm9, %ymm7 + vpaddd %ymm4, %ymm9, %ymm9 + # 2: 4/4 + vmovdqu 4672(%rdx), %ymm10 + vmovdqu 4704(%rdx), %ymm12 + vmovdqu 4736(%rdx), %ymm11 + vmovdqu 4768(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm8, %ymm4 + vpunpckhqdq %ymm5, %ymm8, %ymm5 + vpunpcklqdq %ymm7, %ymm9, %ymm6 + vpunpckhqdq %ymm7, %ymm9, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vpmuldq %ymm10, %ymm9, %ymm9 - vmovshdup %ymm7, %ymm15 - vpmuldq %ymm14, %ymm7, %ymm7 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm8, %ymm5, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm7, %ymm7 - vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 + vpmuldq %ymm11, %ymm7, %ymm7 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + # 1: 4/4 + vmovdqu 4800(%rdx), %ymm10 + vmovdqu 4832(%rdx), %ymm12 + vmovdqu 4864(%rdx), %ymm11 + vmovdqu 4896(%rdx), %ymm13 + vpsllq $32, %ymm1, %ymm8 + vpsrlq $32, %ymm0, %ymm9 + vpblendd $0xaa, %ymm8, %ymm0, %ymm0 + vpblendd $0x55, %ymm9, %ymm1, %ymm1 + vpsllq $32, %ymm3, %ymm8 + vpsrlq $32, %ymm2, %ymm9 + vpblendd $0xaa, %ymm8, %ymm2, %ymm2 + vpblendd $0x55, %ymm9, %ymm3, %ymm3 + vpmulld %ymm12, %ymm1, %ymm8 + vmovshdup %ymm1, %ymm9 + vpmuldq %ymm10, %ymm1, %ymm1 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 - vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm8, %ymm1, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm0, %ymm1 + vpaddd %ymm8, %ymm0, %ymm0 + vpmulld %ymm13, %ymm3, %ymm8 + vmovshdup %ymm3, %ymm9 + vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm8, %ymm3, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm2, %ymm3 + vpaddd %ymm8, %ymm2, %ymm2 + # 1: 4/4 + vmovdqu 4928(%rdx), %ymm10 + vmovdqu 4960(%rdx), %ymm12 + vmovdqu 4992(%rdx), %ymm11 + vmovdqu 5024(%rdx), %ymm13 + vpsllq $32, %ymm5, %ymm8 + vpsrlq $32, %ymm4, %ymm9 + vpblendd $0xaa, %ymm8, %ymm4, %ymm4 + vpblendd $0x55, %ymm9, %ymm5, %ymm5 + vpsllq $32, %ymm7, %ymm8 + vpsrlq $32, %ymm6, %ymm9 + vpblendd $0xaa, %ymm8, %ymm6, %ymm6 + vpblendd $0x55, %ymm9, %ymm7, %ymm7 + vpmulld %ymm12, %ymm5, %ymm8 + vmovshdup %ymm5, %ymm9 + vpmuldq %ymm10, %ymm5, %ymm5 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 - vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm5, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm8, %ymm8 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm4, %ymm5 + vpaddd %ymm8, %ymm4, %ymm4 + vpmulld %ymm13, %ymm7, %ymm8 + vmovshdup %ymm7, %ymm9 vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 vmovshdup %ymm8, %ymm15 vpmuldq %ymm14, %ymm8, %ymm8 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm8, %ymm7, %ymm8 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, 32(%rdi) - vmovdqu %ymm1, 160(%rdi) - vmovdqu %ymm2, 288(%rdi) - vmovdqu %ymm3, 416(%rdi) - vmovdqu %ymm4, 544(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 800(%rdi) - vmovdqu %ymm7, 928(%rdi) - vmovdqu 4864(%rdx), %ymm10 - vmovdqu 4896(%rdx), %ymm12 - vmovdqu 4928(%rdx), %ymm11 - vmovdqu 4960(%rdx), %ymm13 + vpblendd $0xaa, %ymm15, %ymm8, %ymm8 + vpsubd %ymm8, %ymm6, %ymm7 + vpaddd %ymm8, %ymm6, %ymm6 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm0 + vperm2i128 $49, %ymm9, %ymm8, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm2 + vperm2i128 $49, %ymm9, %ymm8, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm4 + vperm2i128 $49, %ymm9, %ymm8, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm6 + vperm2i128 $49, %ymm9, %ymm8, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm3, 864(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu %ymm7, 992(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_ntt_small_full_avx2,.-wc_mldsa_ntt_small_full_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_invntt_avx2 +.type wc_mldsa_invntt_avx2,@function +.align 16 +wc_mldsa_invntt_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_invntt_avx2 +.p2align 4 +_wc_mldsa_invntt_avx2: +#endif /* __APPLE__ */ + vpxor %ymm14, %ymm14, %ymm14 + vmovdqu mldsa_q(%rip), %ymm14 + # invntt + leaq L_mldsa_avx2_zetas_inv(%rip), %rdx vmovdqu (%rdi), %ymm0 - vmovdqu 128(%rdi), %ymm1 - vmovdqu 256(%rdi), %ymm2 - vmovdqu 384(%rdi), %ymm3 - vmovdqu 512(%rdi), %ymm4 - vmovdqu 640(%rdi), %ymm5 - vmovdqu 768(%rdi), %ymm6 - vmovdqu 896(%rdi), %ymm7 - # 64: 1/4 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 128(%rdi), %ymm4 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + # 1: 1/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu 64(%rdx), %ymm11 + vmovdqu 96(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 1/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vmovdqu 192(%rdx), %ymm11 + vmovdqu 224(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 1/4 + vmovdqu 256(%rdx), %ymm10 + vmovdqu 288(%rdx), %ymm12 + vmovdqu 320(%rdx), %ymm11 + vmovdqu 352(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 1/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 384(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 416(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 448(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 480(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 1/4 + vmovdqu 512(%rdx), %ymm10 + vmovdqu 544(%rdx), %ymm12 vpsubd %ymm2, %ymm0, %ymm8 vpaddd %ymm2, %ymm0, %ymm0 vpmulld %ymm12, %ymm8, %ymm2 @@ -10438,14 +9871,157 @@ _wc_mldsa_invntt_full_avx2: vpsubq %ymm15, %ymm9, %ymm15 vmovshdup %ymm3, %ymm3 vpblendd $0xaa, %ymm15, %ymm3, %ymm3 - vmovdqu 4992(%rdx), %ymm10 - vmovdqu 5024(%rdx), %ymm12 - vpsubd %ymm6, %ymm4, %ymm8 - vpaddd %ymm6, %ymm4, %ymm4 - vpmulld %ymm13, %ymm8, %ymm6 + # 1: 1/4 + vmovdqu 576(%rdx), %ymm10 + vmovdqu 608(%rdx), %ymm12 + vmovdqu 640(%rdx), %ymm11 + vmovdqu 672(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 1/4 + vmovdqu 704(%rdx), %ymm10 + vmovdqu 736(%rdx), %ymm12 + vmovdqu 768(%rdx), %ymm11 + vmovdqu 800(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 1/4 + vmovdqu 832(%rdx), %ymm10 + vmovdqu 864(%rdx), %ymm12 + vmovdqu 896(%rdx), %ymm11 + vmovdqu 928(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 1/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 960(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 992(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 1024(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 1056(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 vmovshdup %ymm8, %ymm9 vpmuldq %ymm11, %ymm8, %ymm8 vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 1/4 + vmovdqu 1088(%rdx), %ymm10 + vmovdqu 1120(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm6, %ymm15 vpmuldq %ymm14, %ymm6, %ymm6 vpmuldq %ymm14, %ymm15, %ymm15 @@ -10455,10 +10031,10 @@ _wc_mldsa_invntt_full_avx2: vpblendd $0xaa, %ymm15, %ymm6, %ymm6 vpsubd %ymm7, %ymm5, %ymm8 vpaddd %ymm7, %ymm5, %ymm5 - vpmulld %ymm13, %ymm8, %ymm7 + vpmulld %ymm12, %ymm8, %ymm7 vmovshdup %ymm8, %ymm9 - vpmuldq %ymm11, %ymm8, %ymm8 - vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 vmovshdup %ymm7, %ymm15 vpmuldq %ymm14, %ymm7, %ymm7 vpmuldq %ymm14, %ymm15, %ymm15 @@ -10466,7 +10042,9 @@ _wc_mldsa_invntt_full_avx2: vpsubq %ymm15, %ymm9, %ymm15 vmovshdup %ymm7, %ymm7 vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - # 128: 1/4 + # 32: 1/4 + vmovdqu 1152(%rdx), %ymm10 + vmovdqu 1184(%rdx), %ymm12 vpsubd %ymm4, %ymm0, %ymm8 vpaddd %ymm4, %ymm0, %ymm0 vpmulld %ymm12, %ymm8, %ymm4 @@ -10493,8 +10071,6 @@ _wc_mldsa_invntt_full_avx2: vpsubq %ymm15, %ymm9, %ymm15 vmovshdup %ymm5, %ymm5 vpblendd $0xaa, %ymm15, %ymm5, %ymm5 - vmovdqu 5056(%rdx), %ymm11 - vmovdqu 5088(%rdx), %ymm13 vpsubd %ymm6, %ymm2, %ymm8 vpaddd %ymm6, %ymm2, %ymm2 vpmulld %ymm12, %ymm8, %ymm6 @@ -10521,157 +10097,4815 @@ _wc_mldsa_invntt_full_avx2: vpsubq %ymm15, %ymm9, %ymm15 vmovshdup %ymm7, %ymm7 vpblendd $0xaa, %ymm15, %ymm7, %ymm7 - vpmulld %ymm13, %ymm0, %ymm8 - vpmulld %ymm13, %ymm1, %ymm10 - vmovshdup %ymm0, %ymm9 - vmovshdup %ymm1, %ymm12 - vpmuldq %ymm11, %ymm0, %ymm0 - vpmuldq %ymm11, %ymm1, %ymm1 - vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + # 1: 2/4 + vmovdqu 1216(%rdx), %ymm10 + vmovdqu 1248(%rdx), %ymm12 + vmovdqu 1280(%rdx), %ymm11 + vmovdqu 1312(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm1, %ymm8, %ymm1 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm1, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 - vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm0 - vpblendd $0xaa, %ymm9, %ymm10, %ymm1 - vpmulld %ymm13, %ymm2, %ymm8 - vpmulld %ymm13, %ymm3, %ymm10 - vmovshdup %ymm2, %ymm9 - vmovshdup %ymm3, %ymm12 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 2/4 + vmovdqu 1344(%rdx), %ymm10 + vmovdqu 1376(%rdx), %ymm12 + vmovdqu 1408(%rdx), %ymm11 + vmovdqu 1440(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 2/4 + vmovdqu 1472(%rdx), %ymm10 + vmovdqu 1504(%rdx), %ymm12 + vmovdqu 1536(%rdx), %ymm11 + vmovdqu 1568(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 vpmuldq %ymm11, %ymm2, %ymm2 - vpmuldq %ymm11, %ymm3, %ymm3 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 2/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 1600(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 1632(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 1664(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 1696(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm3, %ymm8, %ymm3 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm3, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 - vmovshdup %ymm8, %ymm8 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 2/4 + vmovdqu 1728(%rdx), %ymm10 + vmovdqu 1760(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 1: 2/4 + vmovdqu 1792(%rdx), %ymm10 + vmovdqu 1824(%rdx), %ymm12 + vmovdqu 1856(%rdx), %ymm11 + vmovdqu 1888(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm2 - vpblendd $0xaa, %ymm9, %ymm10, %ymm3 - vpmulld %ymm13, %ymm4, %ymm8 - vpmulld %ymm13, %ymm5, %ymm10 - vmovshdup %ymm4, %ymm9 - vmovshdup %ymm5, %ymm12 - vpmuldq %ymm11, %ymm4, %ymm4 - vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm7, %ymm8, %ymm7 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm5, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 - vmovshdup %ymm8, %ymm8 - vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm4 - vpblendd $0xaa, %ymm9, %ymm10, %ymm5 - vpmulld %ymm13, %ymm6, %ymm8 - vpmulld %ymm13, %ymm7, %ymm10 - vmovshdup %ymm6, %ymm9 - vmovshdup %ymm7, %ymm12 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 2/4 + vmovdqu 1920(%rdx), %ymm10 + vmovdqu 1952(%rdx), %ymm12 + vmovdqu 1984(%rdx), %ymm11 + vmovdqu 2016(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 2/4 + vmovdqu 2048(%rdx), %ymm10 + vmovdqu 2080(%rdx), %ymm12 + vmovdqu 2112(%rdx), %ymm11 + vmovdqu 2144(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 vpmuldq %ymm11, %ymm6, %ymm6 - vpmuldq %ymm11, %ymm7, %ymm7 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 2/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 2176(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 2208(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 2240(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 2272(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 vpmuldq %ymm11, %ymm9, %ymm9 - vpmuldq %ymm11, %ymm12, %ymm12 - vmovshdup %ymm8, %ymm15 - vpmuldq %ymm14, %ymm8, %ymm8 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 vpmuldq %ymm14, %ymm15, %ymm15 - vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm7, %ymm8, %ymm7 vpsubq %ymm15, %ymm9, %ymm15 - vmovshdup %ymm10, %ymm9 - vpmuldq %ymm14, %ymm10, %ymm10 - vpmuldq %ymm14, %ymm9, %ymm9 - vpsubq %ymm10, %ymm7, %ymm10 - vpsubq %ymm9, %ymm12, %ymm9 - vmovshdup %ymm8, %ymm8 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 2/4 + vmovdqu 2304(%rdx), %ymm10 + vmovdqu 2336(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 2/4 + vmovdqu 2368(%rdx), %ymm10 + vmovdqu 2400(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + # 1: 3/4 + vmovdqu 2432(%rdx), %ymm10 + vmovdqu 2464(%rdx), %ymm12 + vmovdqu 2496(%rdx), %ymm11 + vmovdqu 2528(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 vmovshdup %ymm10, %ymm10 - vpblendd $0xaa, %ymm15, %ymm8, %ymm6 - vpblendd $0xaa, %ymm9, %ymm10, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 128(%rdi) - vmovdqu %ymm2, 256(%rdi) - vmovdqu %ymm3, 384(%rdi) - vmovdqu %ymm4, 512(%rdi) - vmovdqu %ymm5, 640(%rdi) - vmovdqu %ymm6, 768(%rdi) - vmovdqu %ymm7, 896(%rdi) - vzeroupper - repz retq -#ifndef __APPLE__ -.size wc_mldsa_invntt_full_avx2,.-wc_mldsa_invntt_full_avx2 -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.text -.globl wc_mldsa_mul_avx2 -.type wc_mldsa_mul_avx2,@function -.align 16 -wc_mldsa_mul_avx2: -#else -.section __TEXT,__text -.globl _wc_mldsa_mul_avx2 -.p2align 4 -_wc_mldsa_mul_avx2: -#endif /* __APPLE__ */ - vpxor %ymm8, %ymm8, %ymm8 - vmovdqu mldsa_q(%rip), %ymm8 - vmovdqu mldsa_qinv(%rip), %ymm9 - # 0..15 - vmovdqu (%rsi), %ymm0 - vmovdqu 32(%rsi), %ymm2 - vmovdqu (%rdx), %ymm4 - vmovdqu 32(%rdx), %ymm6 - vpshufd $0xf5, %ymm0, %ymm1 - vpshufd $0xf5, %ymm2, %ymm3 - vpshufd $0xf5, %ymm4, %ymm5 - vpshufd $0xf5, %ymm6, %ymm7 - vpmuldq %ymm4, %ymm0, %ymm0 - vpmuldq %ymm5, %ymm1, %ymm1 - vpmuldq %ymm6, %ymm2, %ymm2 - vpmuldq %ymm7, %ymm3, %ymm3 - # Mont Reduce 2 - vpmulld %ymm9, %ymm0, %ymm4 - vpmulld %ymm9, %ymm1, %ymm5 - vpmulld %ymm9, %ymm2, %ymm6 - vpmulld %ymm9, %ymm3, %ymm7 - vpmuldq %ymm8, %ymm4, %ymm4 - vpmuldq %ymm8, %ymm5, %ymm5 - vpmuldq %ymm8, %ymm6, %ymm6 - vpmuldq %ymm8, %ymm7, %ymm7 - vpsubd %ymm4, %ymm0, %ymm0 - vpsubd %ymm5, %ymm1, %ymm1 - vpsubd %ymm6, %ymm2, %ymm2 - vpsubd %ymm7, %ymm3, %ymm3 - vpsrlq $32, %ymm0, %ymm0 - vpsrlq $32, %ymm2, %ymm2 - vpor %ymm1, %ymm0, %ymm0 - vpor %ymm3, %ymm2, %ymm2 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm2, 32(%rdi) - # 16..31 - vmovdqu 64(%rsi), %ymm0 - vmovdqu 96(%rsi), %ymm2 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 3/4 + vmovdqu 2560(%rdx), %ymm10 + vmovdqu 2592(%rdx), %ymm12 + vmovdqu 2624(%rdx), %ymm11 + vmovdqu 2656(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 3/4 + vmovdqu 2688(%rdx), %ymm10 + vmovdqu 2720(%rdx), %ymm12 + vmovdqu 2752(%rdx), %ymm11 + vmovdqu 2784(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 3/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 2816(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 2848(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 2880(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 2912(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 3/4 + vmovdqu 2944(%rdx), %ymm10 + vmovdqu 2976(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 1: 3/4 + vmovdqu 3008(%rdx), %ymm10 + vmovdqu 3040(%rdx), %ymm12 + vmovdqu 3072(%rdx), %ymm11 + vmovdqu 3104(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 3/4 + vmovdqu 3136(%rdx), %ymm10 + vmovdqu 3168(%rdx), %ymm12 + vmovdqu 3200(%rdx), %ymm11 + vmovdqu 3232(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 3/4 + vmovdqu 3264(%rdx), %ymm10 + vmovdqu 3296(%rdx), %ymm12 + vmovdqu 3328(%rdx), %ymm11 + vmovdqu 3360(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 3/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 3392(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 3424(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 3456(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 3488(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 3/4 + vmovdqu 3520(%rdx), %ymm10 + vmovdqu 3552(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 3/4 + vmovdqu 3584(%rdx), %ymm10 + vmovdqu 3616(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + # 1: 4/4 + vmovdqu 3648(%rdx), %ymm10 + vmovdqu 3680(%rdx), %ymm12 + vmovdqu 3712(%rdx), %ymm11 + vmovdqu 3744(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 4/4 + vmovdqu 3776(%rdx), %ymm10 + vmovdqu 3808(%rdx), %ymm12 + vmovdqu 3840(%rdx), %ymm11 + vmovdqu 3872(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 4/4 + vmovdqu 3904(%rdx), %ymm10 + vmovdqu 3936(%rdx), %ymm12 + vmovdqu 3968(%rdx), %ymm11 + vmovdqu 4000(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 4/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 4032(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 4064(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 4096(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 4128(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 4/4 + vmovdqu 4160(%rdx), %ymm10 + vmovdqu 4192(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 1: 4/4 + vmovdqu 4224(%rdx), %ymm10 + vmovdqu 4256(%rdx), %ymm12 + vmovdqu 4288(%rdx), %ymm11 + vmovdqu 4320(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 4/4 + vmovdqu 4352(%rdx), %ymm10 + vmovdqu 4384(%rdx), %ymm12 + vmovdqu 4416(%rdx), %ymm11 + vmovdqu 4448(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 4/4 + vmovdqu 4480(%rdx), %ymm10 + vmovdqu 4512(%rdx), %ymm12 + vmovdqu 4544(%rdx), %ymm11 + vmovdqu 4576(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 4/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 4608(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 4640(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 4672(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 4704(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 4/4 + vmovdqu 4736(%rdx), %ymm10 + vmovdqu 4768(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 4/4 + vmovdqu 4800(%rdx), %ymm10 + vmovdqu 4832(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu %ymm3, %ymm6 + vmovdqu 96(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vmovdqu 352(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vmovdqu 608(%rdi), %ymm4 + vmovdqu 736(%rdi), %ymm5 + # 64: 4/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 4/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 96(%rdi) + vmovdqu %ymm1, 224(%rdi) + vmovdqu %ymm2, 352(%rdi) + vmovdqu %ymm3, 480(%rdi) + vmovdqu %ymm4, 608(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu %ymm6, 864(%rdi) + vmovdqu %ymm7, 992(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu 64(%rdi), %ymm0 + vmovdqu 192(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 448(%rdi), %ymm3 + vmovdqu 576(%rdi), %ymm4 + vmovdqu 704(%rdi), %ymm5 + vmovdqu 832(%rdi), %ymm6 + vmovdqu 960(%rdi), %ymm7 + # 64: 3/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 3/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 64(%rdi) + vmovdqu %ymm1, 192(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 448(%rdi) + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 704(%rdi) + vmovdqu %ymm6, 832(%rdi) + vmovdqu %ymm7, 960(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu 32(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 288(%rdi), %ymm2 + vmovdqu 416(%rdi), %ymm3 + vmovdqu 544(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 800(%rdi), %ymm6 + vmovdqu 928(%rdi), %ymm7 + # 64: 2/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 2/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 32(%rdi) + vmovdqu %ymm1, 160(%rdi) + vmovdqu %ymm2, 288(%rdi) + vmovdqu %ymm3, 416(%rdi) + vmovdqu %ymm4, 544(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 800(%rdi) + vmovdqu %ymm7, 928(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu (%rdi), %ymm0 + vmovdqu 128(%rdi), %ymm1 + vmovdqu 256(%rdi), %ymm2 + vmovdqu 384(%rdi), %ymm3 + vmovdqu 512(%rdi), %ymm4 + vmovdqu 640(%rdi), %ymm5 + vmovdqu 768(%rdi), %ymm6 + vmovdqu 896(%rdi), %ymm7 + # 64: 1/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 1/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 128(%rdi) + vmovdqu %ymm2, 256(%rdi) + vmovdqu %ymm3, 384(%rdi) + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 640(%rdi) + vmovdqu %ymm6, 768(%rdi) + vmovdqu %ymm7, 896(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_invntt_avx2,.-wc_mldsa_invntt_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_invntt_full_avx2 +.type wc_mldsa_invntt_full_avx2,@function +.align 16 +wc_mldsa_invntt_full_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_invntt_full_avx2 +.p2align 4 +_wc_mldsa_invntt_full_avx2: +#endif /* __APPLE__ */ + vpxor %ymm14, %ymm14, %ymm14 + vmovdqu mldsa_q(%rip), %ymm14 + # invntt + leaq L_mldsa_avx2_zetas_inv(%rip), %rdx + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 128(%rdi), %ymm4 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpermq $0xd8, %ymm0, %ymm0 + vpermq $0xd8, %ymm1, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpermq $0xd8, %ymm2, %ymm2 + vpermq $0xd8, %ymm3, %ymm3 + # 1: 1/4 + vmovdqu (%rdx), %ymm10 + vmovdqu 32(%rdx), %ymm12 + vmovdqu 64(%rdx), %ymm11 + vmovdqu 96(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 1/4 + vmovdqu 128(%rdx), %ymm10 + vmovdqu 160(%rdx), %ymm12 + vmovdqu 192(%rdx), %ymm11 + vmovdqu 224(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 1/4 + vmovdqu 256(%rdx), %ymm10 + vmovdqu 288(%rdx), %ymm12 + vmovdqu 320(%rdx), %ymm11 + vmovdqu 352(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 1/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 384(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 416(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 448(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 480(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 1/4 + vmovdqu 512(%rdx), %ymm10 + vmovdqu 544(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpermq $0xd8, %ymm4, %ymm4 + vpermq $0xd8, %ymm5, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpermq $0xd8, %ymm6, %ymm6 + vpermq $0xd8, %ymm7, %ymm7 + # 1: 1/4 + vmovdqu 576(%rdx), %ymm10 + vmovdqu 608(%rdx), %ymm12 + vmovdqu 640(%rdx), %ymm11 + vmovdqu 672(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 1/4 + vmovdqu 704(%rdx), %ymm10 + vmovdqu 736(%rdx), %ymm12 + vmovdqu 768(%rdx), %ymm11 + vmovdqu 800(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 1/4 + vmovdqu 832(%rdx), %ymm10 + vmovdqu 864(%rdx), %ymm12 + vmovdqu 896(%rdx), %ymm11 + vmovdqu 928(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 1/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 960(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 992(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 1024(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 1056(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 1/4 + vmovdqu 1088(%rdx), %ymm10 + vmovdqu 1120(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 1/4 + vmovdqu 1152(%rdx), %ymm10 + vmovdqu 1184(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpermq $0xd8, %ymm0, %ymm0 + vpermq $0xd8, %ymm1, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpermq $0xd8, %ymm2, %ymm2 + vpermq $0xd8, %ymm3, %ymm3 + # 1: 2/4 + vmovdqu 1216(%rdx), %ymm10 + vmovdqu 1248(%rdx), %ymm12 + vmovdqu 1280(%rdx), %ymm11 + vmovdqu 1312(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 2/4 + vmovdqu 1344(%rdx), %ymm10 + vmovdqu 1376(%rdx), %ymm12 + vmovdqu 1408(%rdx), %ymm11 + vmovdqu 1440(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 2/4 + vmovdqu 1472(%rdx), %ymm10 + vmovdqu 1504(%rdx), %ymm12 + vmovdqu 1536(%rdx), %ymm11 + vmovdqu 1568(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 2/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 1600(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 1632(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 1664(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 1696(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 2/4 + vmovdqu 1728(%rdx), %ymm10 + vmovdqu 1760(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpermq $0xd8, %ymm4, %ymm4 + vpermq $0xd8, %ymm5, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpermq $0xd8, %ymm6, %ymm6 + vpermq $0xd8, %ymm7, %ymm7 + # 1: 2/4 + vmovdqu 1792(%rdx), %ymm10 + vmovdqu 1824(%rdx), %ymm12 + vmovdqu 1856(%rdx), %ymm11 + vmovdqu 1888(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 2/4 + vmovdqu 1920(%rdx), %ymm10 + vmovdqu 1952(%rdx), %ymm12 + vmovdqu 1984(%rdx), %ymm11 + vmovdqu 2016(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 2/4 + vmovdqu 2048(%rdx), %ymm10 + vmovdqu 2080(%rdx), %ymm12 + vmovdqu 2112(%rdx), %ymm11 + vmovdqu 2144(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 2/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 2176(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 2208(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 2240(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 2272(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 2/4 + vmovdqu 2304(%rdx), %ymm10 + vmovdqu 2336(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 2/4 + vmovdqu 2368(%rdx), %ymm10 + vmovdqu 2400(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpermq $0xd8, %ymm0, %ymm0 + vpermq $0xd8, %ymm1, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpermq $0xd8, %ymm2, %ymm2 + vpermq $0xd8, %ymm3, %ymm3 + # 1: 3/4 + vmovdqu 2432(%rdx), %ymm10 + vmovdqu 2464(%rdx), %ymm12 + vmovdqu 2496(%rdx), %ymm11 + vmovdqu 2528(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 3/4 + vmovdqu 2560(%rdx), %ymm10 + vmovdqu 2592(%rdx), %ymm12 + vmovdqu 2624(%rdx), %ymm11 + vmovdqu 2656(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 3/4 + vmovdqu 2688(%rdx), %ymm10 + vmovdqu 2720(%rdx), %ymm12 + vmovdqu 2752(%rdx), %ymm11 + vmovdqu 2784(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 3/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 2816(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 2848(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 2880(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 2912(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 3/4 + vmovdqu 2944(%rdx), %ymm10 + vmovdqu 2976(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpermq $0xd8, %ymm4, %ymm4 + vpermq $0xd8, %ymm5, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpermq $0xd8, %ymm6, %ymm6 + vpermq $0xd8, %ymm7, %ymm7 + # 1: 3/4 + vmovdqu 3008(%rdx), %ymm10 + vmovdqu 3040(%rdx), %ymm12 + vmovdqu 3072(%rdx), %ymm11 + vmovdqu 3104(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 3/4 + vmovdqu 3136(%rdx), %ymm10 + vmovdqu 3168(%rdx), %ymm12 + vmovdqu 3200(%rdx), %ymm11 + vmovdqu 3232(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 3/4 + vmovdqu 3264(%rdx), %ymm10 + vmovdqu 3296(%rdx), %ymm12 + vmovdqu 3328(%rdx), %ymm11 + vmovdqu 3360(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 3/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 3392(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 3424(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 3456(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 3488(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 3/4 + vmovdqu 3520(%rdx), %ymm10 + vmovdqu 3552(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 3/4 + vmovdqu 3584(%rdx), %ymm10 + vmovdqu 3616(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + vpunpckldq %ymm1, %ymm0, %ymm8 + vpunpckhdq %ymm1, %ymm0, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpermq $0xd8, %ymm0, %ymm0 + vpermq $0xd8, %ymm1, %ymm1 + vpunpckldq %ymm3, %ymm2, %ymm8 + vpunpckhdq %ymm3, %ymm2, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpermq $0xd8, %ymm2, %ymm2 + vpermq $0xd8, %ymm3, %ymm3 + # 1: 4/4 + vmovdqu 3648(%rdx), %ymm10 + vmovdqu 3680(%rdx), %ymm12 + vmovdqu 3712(%rdx), %ymm11 + vmovdqu 3744(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 2: 4/4 + vmovdqu 3776(%rdx), %ymm10 + vmovdqu 3808(%rdx), %ymm12 + vmovdqu 3840(%rdx), %ymm11 + vmovdqu 3872(%rdx), %ymm13 + vpshufd $0xd8, %ymm0, %ymm8 + vpshufd $0xd8, %ymm1, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm0 + vpunpckhdq %ymm9, %ymm8, %ymm1 + vpshufd $0xd8, %ymm2, %ymm8 + vpshufd $0xd8, %ymm3, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm2 + vpunpckhdq %ymm9, %ymm8, %ymm3 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 4: 4/4 + vmovdqu 3904(%rdx), %ymm10 + vmovdqu 3936(%rdx), %ymm12 + vmovdqu 3968(%rdx), %ymm11 + vmovdqu 4000(%rdx), %ymm13 + vpunpcklqdq %ymm1, %ymm0, %ymm8 + vpunpckhqdq %ymm1, %ymm0, %ymm1 + vpunpcklqdq %ymm3, %ymm2, %ymm9 + vpunpckhqdq %ymm3, %ymm2, %ymm3 + vpsubd %ymm1, %ymm8, %ymm0 + vpaddd %ymm1, %ymm8, %ymm8 + vpmulld %ymm12, %ymm0, %ymm1 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm10, %ymm0, %ymm0 + vpmuldq %ymm10, %ymm2, %ymm2 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm0, %ymm1 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm9, %ymm0 + vpaddd %ymm3, %ymm9, %ymm9 + vpmulld %ymm13, %ymm0, %ymm3 + vmovshdup %ymm0, %ymm2 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm2, %ymm2 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm0, %ymm3 + vpsubq %ymm15, %ymm2, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 8: 4/4 + vperm2i128 $32, %ymm1, %ymm8, %ymm0 + vmovdqu 4032(%rdx), %ymm10 + vperm2i128 $49, %ymm1, %ymm8, %ymm1 + vmovdqu 4064(%rdx), %ymm12 + vperm2i128 $32, %ymm3, %ymm9, %ymm2 + vmovdqu 4096(%rdx), %ymm11 + vperm2i128 $49, %ymm3, %ymm9, %ymm3 + vmovdqu 4128(%rdx), %ymm13 + vpsubd %ymm1, %ymm0, %ymm8 + vpaddd %ymm1, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm1 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm1, %ymm15 + vpmuldq %ymm14, %ymm1, %ymm1 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm1, %ymm8, %ymm1 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm1, %ymm1 + vpblendd $0xaa, %ymm15, %ymm1, %ymm1 + vpsubd %ymm3, %ymm2, %ymm8 + vpaddd %ymm3, %ymm2, %ymm2 + vpmulld %ymm13, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + # 16: 4/4 + vmovdqu 4160(%rdx), %ymm10 + vmovdqu 4192(%rdx), %ymm12 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vpunpckldq %ymm5, %ymm4, %ymm8 + vpunpckhdq %ymm5, %ymm4, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpermq $0xd8, %ymm4, %ymm4 + vpermq $0xd8, %ymm5, %ymm5 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpermq $0xd8, %ymm6, %ymm6 + vpermq $0xd8, %ymm7, %ymm7 + # 1: 4/4 + vmovdqu 4224(%rdx), %ymm10 + vmovdqu 4256(%rdx), %ymm12 + vmovdqu 4288(%rdx), %ymm11 + vmovdqu 4320(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vmovshdup %ymm11, %ymm11 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 2: 4/4 + vmovdqu 4352(%rdx), %ymm10 + vmovdqu 4384(%rdx), %ymm12 + vmovdqu 4416(%rdx), %ymm11 + vmovdqu 4448(%rdx), %ymm13 + vpshufd $0xd8, %ymm4, %ymm8 + vpshufd $0xd8, %ymm5, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm4 + vpunpckhdq %ymm9, %ymm8, %ymm5 + vpshufd $0xd8, %ymm6, %ymm8 + vpshufd $0xd8, %ymm7, %ymm9 + vpunpckldq %ymm9, %ymm8, %ymm6 + vpunpckhdq %ymm9, %ymm8, %ymm7 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 4: 4/4 + vmovdqu 4480(%rdx), %ymm10 + vmovdqu 4512(%rdx), %ymm12 + vmovdqu 4544(%rdx), %ymm11 + vmovdqu 4576(%rdx), %ymm13 + vpunpcklqdq %ymm5, %ymm4, %ymm8 + vpunpckhqdq %ymm5, %ymm4, %ymm5 + vpunpcklqdq %ymm7, %ymm6, %ymm9 + vpunpckhqdq %ymm7, %ymm6, %ymm7 + vpsubd %ymm5, %ymm8, %ymm4 + vpaddd %ymm5, %ymm8, %ymm8 + vpmulld %ymm12, %ymm4, %ymm5 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm10, %ymm4, %ymm4 + vpmuldq %ymm10, %ymm6, %ymm6 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm4, %ymm5 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm9, %ymm4 + vpaddd %ymm7, %ymm9, %ymm9 + vpmulld %ymm13, %ymm4, %ymm7 + vmovshdup %ymm4, %ymm6 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm6, %ymm6 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm4, %ymm7 + vpsubq %ymm15, %ymm6, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 8: 4/4 + vperm2i128 $32, %ymm5, %ymm8, %ymm4 + vmovdqu 4608(%rdx), %ymm10 + vperm2i128 $49, %ymm5, %ymm8, %ymm5 + vmovdqu 4640(%rdx), %ymm12 + vperm2i128 $32, %ymm7, %ymm9, %ymm6 + vmovdqu 4672(%rdx), %ymm11 + vperm2i128 $49, %ymm7, %ymm9, %ymm7 + vmovdqu 4704(%rdx), %ymm13 + vpsubd %ymm5, %ymm4, %ymm8 + vpaddd %ymm5, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm7, %ymm6, %ymm8 + vpaddd %ymm7, %ymm6, %ymm6 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 16: 4/4 + vmovdqu 4736(%rdx), %ymm10 + vmovdqu 4768(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 32: 4/4 + vmovdqu 4800(%rdx), %ymm10 + vmovdqu 4832(%rdx), %ymm12 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu %ymm3, %ymm6 + vmovdqu 96(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vmovdqu 352(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vmovdqu 608(%rdi), %ymm4 + vmovdqu 736(%rdi), %ymm5 + # 64: 4/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 4/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 96(%rdi) + vmovdqu %ymm1, 224(%rdi) + vmovdqu %ymm2, 352(%rdi) + vmovdqu %ymm3, 480(%rdi) + vmovdqu %ymm4, 608(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu %ymm6, 864(%rdi) + vmovdqu %ymm7, 992(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu 64(%rdi), %ymm0 + vmovdqu 192(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 448(%rdi), %ymm3 + vmovdqu 576(%rdi), %ymm4 + vmovdqu 704(%rdi), %ymm5 + vmovdqu 832(%rdi), %ymm6 + vmovdqu 960(%rdi), %ymm7 + # 64: 3/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 3/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 64(%rdi) + vmovdqu %ymm1, 192(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 448(%rdi) + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 704(%rdi) + vmovdqu %ymm6, 832(%rdi) + vmovdqu %ymm7, 960(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu 32(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 288(%rdi), %ymm2 + vmovdqu 416(%rdi), %ymm3 + vmovdqu 544(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 800(%rdi), %ymm6 + vmovdqu 928(%rdi), %ymm7 + # 64: 2/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 2/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, 32(%rdi) + vmovdqu %ymm1, 160(%rdi) + vmovdqu %ymm2, 288(%rdi) + vmovdqu %ymm3, 416(%rdi) + vmovdqu %ymm4, 544(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 800(%rdi) + vmovdqu %ymm7, 928(%rdi) + vmovdqu 4864(%rdx), %ymm10 + vmovdqu 4896(%rdx), %ymm12 + vmovdqu 4928(%rdx), %ymm11 + vmovdqu 4960(%rdx), %ymm13 + vmovdqu (%rdi), %ymm0 + vmovdqu 128(%rdi), %ymm1 + vmovdqu 256(%rdi), %ymm2 + vmovdqu 384(%rdi), %ymm3 + vmovdqu 512(%rdi), %ymm4 + vmovdqu 640(%rdi), %ymm5 + vmovdqu 768(%rdi), %ymm6 + vmovdqu 896(%rdi), %ymm7 + # 64: 1/4 + vpsubd %ymm2, %ymm0, %ymm8 + vpaddd %ymm2, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm2 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm2, %ymm15 + vpmuldq %ymm14, %ymm2, %ymm2 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm2, %ymm8, %ymm2 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm2, %ymm2 + vpblendd $0xaa, %ymm15, %ymm2, %ymm2 + vpsubd %ymm3, %ymm1, %ymm8 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm3 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm3, %ymm15 + vpmuldq %ymm14, %ymm3, %ymm3 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm3, %ymm8, %ymm3 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm3, %ymm3 + vpblendd $0xaa, %ymm15, %ymm3, %ymm3 + vmovdqu 4992(%rdx), %ymm10 + vmovdqu 5024(%rdx), %ymm12 + vpsubd %ymm6, %ymm4, %ymm8 + vpaddd %ymm6, %ymm4, %ymm4 + vpmulld %ymm13, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm5, %ymm8 + vpaddd %ymm7, %ymm5, %ymm5 + vpmulld %ymm13, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm11, %ymm8, %ymm8 + vpmuldq %ymm11, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + # 128: 1/4 + vpsubd %ymm4, %ymm0, %ymm8 + vpaddd %ymm4, %ymm0, %ymm0 + vpmulld %ymm12, %ymm8, %ymm4 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm4, %ymm15 + vpmuldq %ymm14, %ymm4, %ymm4 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm4, %ymm8, %ymm4 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm4, %ymm4 + vpblendd $0xaa, %ymm15, %ymm4, %ymm4 + vpsubd %ymm5, %ymm1, %ymm8 + vpaddd %ymm5, %ymm1, %ymm1 + vpmulld %ymm12, %ymm8, %ymm5 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm5, %ymm15 + vpmuldq %ymm14, %ymm5, %ymm5 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm5, %ymm8, %ymm5 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm5, %ymm5 + vpblendd $0xaa, %ymm15, %ymm5, %ymm5 + vmovdqu 5056(%rdx), %ymm11 + vmovdqu 5088(%rdx), %ymm13 + vpsubd %ymm6, %ymm2, %ymm8 + vpaddd %ymm6, %ymm2, %ymm2 + vpmulld %ymm12, %ymm8, %ymm6 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm6, %ymm15 + vpmuldq %ymm14, %ymm6, %ymm6 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm6, %ymm8, %ymm6 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm6, %ymm6 + vpblendd $0xaa, %ymm15, %ymm6, %ymm6 + vpsubd %ymm7, %ymm3, %ymm8 + vpaddd %ymm7, %ymm3, %ymm3 + vpmulld %ymm12, %ymm8, %ymm7 + vmovshdup %ymm8, %ymm9 + vpmuldq %ymm10, %ymm8, %ymm8 + vpmuldq %ymm10, %ymm9, %ymm9 + vmovshdup %ymm7, %ymm15 + vpmuldq %ymm14, %ymm7, %ymm7 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm7, %ymm8, %ymm7 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm7, %ymm7 + vpblendd $0xaa, %ymm15, %ymm7, %ymm7 + vpmulld %ymm13, %ymm0, %ymm8 + vpmulld %ymm13, %ymm1, %ymm10 + vmovshdup %ymm0, %ymm9 + vmovshdup %ymm1, %ymm12 + vpmuldq %ymm11, %ymm0, %ymm0 + vpmuldq %ymm11, %ymm1, %ymm1 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm0, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm1, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm0 + vpblendd $0xaa, %ymm9, %ymm10, %ymm1 + vpmulld %ymm13, %ymm2, %ymm8 + vpmulld %ymm13, %ymm3, %ymm10 + vmovshdup %ymm2, %ymm9 + vmovshdup %ymm3, %ymm12 + vpmuldq %ymm11, %ymm2, %ymm2 + vpmuldq %ymm11, %ymm3, %ymm3 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm2, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm3, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm2 + vpblendd $0xaa, %ymm9, %ymm10, %ymm3 + vpmulld %ymm13, %ymm4, %ymm8 + vpmulld %ymm13, %ymm5, %ymm10 + vmovshdup %ymm4, %ymm9 + vmovshdup %ymm5, %ymm12 + vpmuldq %ymm11, %ymm4, %ymm4 + vpmuldq %ymm11, %ymm5, %ymm5 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm4, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm5, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm4 + vpblendd $0xaa, %ymm9, %ymm10, %ymm5 + vpmulld %ymm13, %ymm6, %ymm8 + vpmulld %ymm13, %ymm7, %ymm10 + vmovshdup %ymm6, %ymm9 + vmovshdup %ymm7, %ymm12 + vpmuldq %ymm11, %ymm6, %ymm6 + vpmuldq %ymm11, %ymm7, %ymm7 + vpmuldq %ymm11, %ymm9, %ymm9 + vpmuldq %ymm11, %ymm12, %ymm12 + vmovshdup %ymm8, %ymm15 + vpmuldq %ymm14, %ymm8, %ymm8 + vpmuldq %ymm14, %ymm15, %ymm15 + vpsubq %ymm8, %ymm6, %ymm8 + vpsubq %ymm15, %ymm9, %ymm15 + vmovshdup %ymm10, %ymm9 + vpmuldq %ymm14, %ymm10, %ymm10 + vpmuldq %ymm14, %ymm9, %ymm9 + vpsubq %ymm10, %ymm7, %ymm10 + vpsubq %ymm9, %ymm12, %ymm9 + vmovshdup %ymm8, %ymm8 + vmovshdup %ymm10, %ymm10 + vpblendd $0xaa, %ymm15, %ymm8, %ymm6 + vpblendd $0xaa, %ymm9, %ymm10, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 128(%rdi) + vmovdqu %ymm2, 256(%rdi) + vmovdqu %ymm3, 384(%rdi) + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 640(%rdi) + vmovdqu %ymm6, 768(%rdi) + vmovdqu %ymm7, 896(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_invntt_full_avx2,.-wc_mldsa_invntt_full_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_mul_avx2 +.type wc_mldsa_mul_avx2,@function +.align 16 +wc_mldsa_mul_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_mul_avx2 +.p2align 4 +_wc_mldsa_mul_avx2: +#endif /* __APPLE__ */ + vpxor %ymm8, %ymm8, %ymm8 + vmovdqu mldsa_q(%rip), %ymm8 + vmovdqu mldsa_qinv(%rip), %ymm9 + # 0..15 + vmovdqu (%rsi), %ymm0 + vmovdqu 32(%rsi), %ymm2 + vmovdqu (%rdx), %ymm4 + vmovdqu 32(%rdx), %ymm6 + vpshufd $0xf5, %ymm0, %ymm1 + vpshufd $0xf5, %ymm2, %ymm3 + vpshufd $0xf5, %ymm4, %ymm5 + vpshufd $0xf5, %ymm6, %ymm7 + vpmuldq %ymm4, %ymm0, %ymm0 + vpmuldq %ymm5, %ymm1, %ymm1 + vpmuldq %ymm6, %ymm2, %ymm2 + vpmuldq %ymm7, %ymm3, %ymm3 + # Mont Reduce 2 + vpmulld %ymm9, %ymm0, %ymm4 + vpmulld %ymm9, %ymm1, %ymm5 + vpmulld %ymm9, %ymm2, %ymm6 + vpmulld %ymm9, %ymm3, %ymm7 + vpmuldq %ymm8, %ymm4, %ymm4 + vpmuldq %ymm8, %ymm5, %ymm5 + vpmuldq %ymm8, %ymm6, %ymm6 + vpmuldq %ymm8, %ymm7, %ymm7 + vpsubd %ymm4, %ymm0, %ymm0 + vpsubd %ymm5, %ymm1, %ymm1 + vpsubd %ymm6, %ymm2, %ymm2 + vpsubd %ymm7, %ymm3, %ymm3 + vpsrlq $32, %ymm0, %ymm0 + vpsrlq $32, %ymm2, %ymm2 + vpor %ymm1, %ymm0, %ymm0 + vpor %ymm3, %ymm2, %ymm2 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm2, 32(%rdi) + # 16..31 + vmovdqu 64(%rsi), %ymm0 + vmovdqu 96(%rsi), %ymm2 vmovdqu 64(%rdx), %ymm4 vmovdqu 96(%rdx), %ymm6 vpshufd $0xf5, %ymm0, %ymm1 @@ -17307,11 +21541,11 @@ _wc_mldsa_rej_uniform_avx2: movl %esi, %eax cmpl $0x00, %esi je L_mldsa_rej_uniform_avx2_done_64 - cmpl $8, %r8d - jl L_mldsa_rej_uniform_avx2_done_64 movq $0xffffff00ffffff, %r14 movq $0x7fffff007fffff, %r13 L_mldsa_rej_uniform_avx2_start_64: + cmpl $8, %r8d + jl L_mldsa_rej_uniform_avx2_done_64 movq (%rdx), %rcx pdepq %r14, %rcx, %rcx andq %r13, %rcx @@ -17333,6 +21567,8 @@ L_mldsa_rej_uniform_avx2_rej_large_1: addq $6, %rdx subl $6, %r8d jle L_mldsa_rej_uniform_avx2_done_64 + cmpl $0x00, %esi + jg L_mldsa_rej_uniform_avx2_start_64 L_mldsa_rej_uniform_avx2_done_64: subl %esi, %eax popq %r14 @@ -22956,7 +27192,6 @@ _wc_mldsa_decode_t0_avx2: vmovdqu %ymm4, 896(%rsi) # 30/32 vmovdqu 384(%rdi), %ymm0 - vmovdqu 416(%rdi), %ymm1 vperm2i128 $33, %ymm0, %ymm3, %ymm3 vpermq $0x99, %ymm3, %ymm4 vpshufb %ymm10, %ymm4, %ymm4 @@ -27365,18 +31600,318 @@ L_mldsa_decompose_q32_avx2_start_256: vpand %ymm15, %ymm9, %ymm9 vpand %ymm15, %ymm10, %ymm10 vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, (%rdx) - vmovdqu %ymm5, 32(%rdx) - vmovdqu %ymm6, 64(%rdx) - vmovdqu %ymm7, 96(%rdx) - vmovdqu %ymm8, (%rcx) - vmovdqu %ymm9, 32(%rcx) - vmovdqu %ymm10, 64(%rcx) - vmovdqu %ymm11, 96(%rcx) - vmovdqu 128(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vmovdqu 192(%rdi), %ymm2 - vmovdqu 224(%rdi), %ymm3 + vmovdqu %ymm4, (%rdx) + vmovdqu %ymm5, 32(%rdx) + vmovdqu %ymm6, 64(%rdx) + vmovdqu %ymm7, 96(%rdx) + vmovdqu %ymm8, (%rcx) + vmovdqu %ymm9, 32(%rcx) + vmovdqu %ymm10, 64(%rcx) + vmovdqu %ymm11, 96(%rcx) + vmovdqu 128(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 192(%rdi), %ymm2 + vmovdqu 224(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 128(%rdx) + vmovdqu %ymm5, 160(%rdx) + vmovdqu %ymm6, 192(%rdx) + vmovdqu %ymm7, 224(%rdx) + vmovdqu %ymm8, 128(%rcx) + vmovdqu %ymm9, 160(%rcx) + vmovdqu %ymm10, 192(%rcx) + vmovdqu %ymm11, 224(%rcx) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 256(%rdx) + vmovdqu %ymm5, 288(%rdx) + vmovdqu %ymm6, 320(%rdx) + vmovdqu %ymm7, 352(%rdx) + vmovdqu %ymm8, 256(%rcx) + vmovdqu %ymm9, 288(%rcx) + vmovdqu %ymm10, 320(%rcx) + vmovdqu %ymm11, 352(%rcx) + vmovdqu 384(%rdi), %ymm0 + vmovdqu 416(%rdi), %ymm1 + vmovdqu 448(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 384(%rdx) + vmovdqu %ymm5, 416(%rdx) + vmovdqu %ymm6, 448(%rdx) + vmovdqu %ymm7, 480(%rdx) + vmovdqu %ymm8, 384(%rcx) + vmovdqu %ymm9, 416(%rcx) + vmovdqu %ymm10, 448(%rcx) + vmovdqu %ymm11, 480(%rcx) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 512(%rdx) + vmovdqu %ymm5, 544(%rdx) + vmovdqu %ymm6, 576(%rdx) + vmovdqu %ymm7, 608(%rdx) + vmovdqu %ymm8, 512(%rcx) + vmovdqu %ymm9, 544(%rcx) + vmovdqu %ymm10, 576(%rcx) + vmovdqu %ymm11, 608(%rcx) + vmovdqu 640(%rdi), %ymm0 + vmovdqu 672(%rdi), %ymm1 + vmovdqu 704(%rdi), %ymm2 + vmovdqu 736(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 640(%rdx) + vmovdqu %ymm5, 672(%rdx) + vmovdqu %ymm6, 704(%rdx) + vmovdqu %ymm7, 736(%rdx) + vmovdqu %ymm8, 640(%rcx) + vmovdqu %ymm9, 672(%rcx) + vmovdqu %ymm10, 704(%rcx) + vmovdqu %ymm11, 736(%rcx) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 vpaddd %ymm14, %ymm0, %ymm8 vpaddd %ymm14, %ymm1, %ymm9 vpaddd %ymm14, %ymm2, %ymm10 @@ -27425,501 +31960,1404 @@ L_mldsa_decompose_q32_avx2_start_256: vpand %ymm15, %ymm9, %ymm9 vpand %ymm15, %ymm10, %ymm10 vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 128(%rdx) - vmovdqu %ymm5, 160(%rdx) - vmovdqu %ymm6, 192(%rdx) - vmovdqu %ymm7, 224(%rdx) - vmovdqu %ymm8, 128(%rcx) - vmovdqu %ymm9, 160(%rcx) - vmovdqu %ymm10, 192(%rcx) - vmovdqu %ymm11, 224(%rcx) + vmovdqu %ymm4, 768(%rdx) + vmovdqu %ymm5, 800(%rdx) + vmovdqu %ymm6, 832(%rdx) + vmovdqu %ymm7, 864(%rdx) + vmovdqu %ymm8, 768(%rcx) + vmovdqu %ymm9, 800(%rcx) + vmovdqu %ymm10, 832(%rcx) + vmovdqu %ymm11, 864(%rcx) + vmovdqu 896(%rdi), %ymm0 + vmovdqu 928(%rdi), %ymm1 + vmovdqu 960(%rdi), %ymm2 + vmovdqu 992(%rdi), %ymm3 + vpaddd %ymm14, %ymm0, %ymm8 + vpaddd %ymm14, %ymm1, %ymm9 + vpaddd %ymm14, %ymm2, %ymm10 + vpaddd %ymm14, %ymm3, %ymm11 + vpsrld $19, %ymm8, %ymm8 + vpsrld $19, %ymm9, %ymm9 + vpsrld $19, %ymm10, %ymm10 + vpsrld $19, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsubd %ymm4, %ymm12, %ymm4 + vpsubd %ymm5, %ymm12, %ymm5 + vpsubd %ymm6, %ymm12, %ymm6 + vpsubd %ymm7, %ymm12, %ymm7 + vpsrld $31, %ymm4, %ymm4 + vpsrld $31, %ymm5, %ymm5 + vpsrld $31, %ymm6, %ymm6 + vpsrld $31, %ymm7, %ymm7 + vpaddd %ymm4, %ymm8, %ymm8 + vpaddd %ymm5, %ymm9, %ymm9 + vpaddd %ymm6, %ymm10, %ymm10 + vpaddd %ymm7, %ymm11, %ymm11 + vpmulld %ymm13, %ymm8, %ymm4 + vpmulld %ymm13, %ymm9, %ymm5 + vpmulld %ymm13, %ymm10, %ymm6 + vpmulld %ymm13, %ymm11, %ymm7 + vpsubd %ymm4, %ymm0, %ymm4 + vpsubd %ymm5, %ymm1, %ymm5 + vpsubd %ymm6, %ymm2, %ymm6 + vpsubd %ymm7, %ymm3, %ymm7 + vpsrld $4, %ymm8, %ymm0 + vpsrld $4, %ymm9, %ymm1 + vpsrld $4, %ymm10, %ymm2 + vpsrld $4, %ymm11, %ymm3 + vpsubd %ymm0, %ymm4, %ymm4 + vpsubd %ymm1, %ymm5, %ymm5 + vpsubd %ymm2, %ymm6, %ymm6 + vpsubd %ymm3, %ymm7, %ymm7 + vpand %ymm15, %ymm8, %ymm8 + vpand %ymm15, %ymm9, %ymm9 + vpand %ymm15, %ymm10, %ymm10 + vpand %ymm15, %ymm11, %ymm11 + vmovdqu %ymm4, 896(%rdx) + vmovdqu %ymm5, 928(%rdx) + vmovdqu %ymm6, 960(%rdx) + vmovdqu %ymm7, 992(%rdx) + vmovdqu %ymm8, 896(%rcx) + vmovdqu %ymm9, 928(%rcx) + vmovdqu %ymm10, 960(%rcx) + vmovdqu %ymm11, 992(%rcx) + addq $0x400, %rdi + addq $0x400, %rdx + addq $0x400, %rcx + sub $0x01, %rsi + jne L_mldsa_decompose_q32_avx2_start_256 + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decompose_q32_avx2,.-wc_mldsa_decompose_q32_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_q: +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_q_low_88: +.long 0x00017400,0x00017400,0x00017400,0x00017400 +.long 0x00017400,0x00017400,0x00017400,0x00017400 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_q_low_88_2: +.long 0x0002e800,0x0002e800,0x0002e800,0x0002e800 +.long 0x0002e800,0x0002e800,0x0002e800,0x0002e800 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_q_2: +.long 0x003fefd4,0x003fefd4,0x003fefd4,0x003fefd4 +.long 0x003fefd4,0x003fefd4,0x003fefd4,0x003fefd4 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_44: +.long 0x0000002c,0x0000002c,0x0000002c,0x0000002c +.long 0x0000002c,0x0000002c,0x0000002c,0x0000002c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_vsl: +.long 0x0000001f,0x0000001e,0x0000001d,0x0000001c +.long 0x0000001b,0x0000001a,0x00000019,0x00000018 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_88_avx2_one: +.long 0x00000001,0x00000001,0x00000001,0x00000001 +.long 0x00000001,0x00000001,0x00000001,0x00000001 +#ifndef __APPLE__ +.text +.globl wc_mldsa_use_hint_88_avx2 +.type wc_mldsa_use_hint_88_avx2,@function +.align 16 +wc_mldsa_use_hint_88_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_use_hint_88_avx2 +.p2align 4 +_wc_mldsa_use_hint_88_avx2: +#endif /* __APPLE__ */ + vpxor %ymm8, %ymm8, %ymm8 + vmovdqu L_mldsa_use_hint_88_avx2_q(%rip), %ymm8 + vmovdqu L_mldsa_use_hint_88_avx2_q_low_88(%rip), %ymm9 + vmovdqu L_mldsa_use_hint_88_avx2_q_low_88_2(%rip), %ymm10 + vmovdqu L_mldsa_use_hint_88_avx2_q_2(%rip), %ymm11 + vmovdqu L_mldsa_use_hint_88_avx2_44(%rip), %ymm12 + vmovdqu L_mldsa_use_hint_88_avx2_vsl(%rip), %ymm13 + vmovdqu L_mldsa_use_hint_88_avx2_one(%rip), %ymm14 + xorq %rax, %rax + mov (%rsi), %r8b + # 1/4 vectors + mov 80(%rsi), %dl + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_0: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + mov %r8b, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_0 +L_mldsa_use_hint_88_avx2_hints_done_0_0: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, (%rdi) + vmovdqu %ymm5, 32(%rdi) + vmovdqu 64(%rdi), %ymm0 + vmovdqu 96(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_1: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + mov %r8b, %cl + sub $16, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_1 +L_mldsa_use_hint_88_avx2_hints_done_0_1: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 64(%rdi) + vmovdqu %ymm5, 96(%rdi) + vmovdqu 128(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_2: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + mov %r8b, %cl + sub $32, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_2 +L_mldsa_use_hint_88_avx2_hints_done_0_2: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu 192(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_3: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + mov %r8b, %cl + sub $48, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_3 +L_mldsa_use_hint_88_avx2_hints_done_0_3: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 192(%rdi) + vmovdqu %ymm5, 224(%rdi) vmovdqu 256(%rdi), %ymm0 vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 256(%rdx) - vmovdqu %ymm5, 288(%rdx) - vmovdqu %ymm6, 320(%rdx) - vmovdqu %ymm7, 352(%rdx) - vmovdqu %ymm8, 256(%rcx) - vmovdqu %ymm9, 288(%rcx) - vmovdqu %ymm10, 320(%rcx) - vmovdqu %ymm11, 352(%rcx) + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_4: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + mov %r8b, %cl + sub $0x40, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_4 +L_mldsa_use_hint_88_avx2_hints_done_0_4: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 256(%rdi) + vmovdqu %ymm5, 288(%rdi) + vmovdqu 320(%rdi), %ymm0 + vmovdqu 352(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_5: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + mov %r8b, %cl + sub $0x50, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_5 +L_mldsa_use_hint_88_avx2_hints_done_0_5: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 320(%rdi) + vmovdqu %ymm5, 352(%rdi) vmovdqu 384(%rdi), %ymm0 vmovdqu 416(%rdi), %ymm1 - vmovdqu 448(%rdi), %ymm2 - vmovdqu 480(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 384(%rdx) - vmovdqu %ymm5, 416(%rdx) - vmovdqu %ymm6, 448(%rdx) - vmovdqu %ymm7, 480(%rdx) - vmovdqu %ymm8, 384(%rcx) - vmovdqu %ymm9, 416(%rcx) - vmovdqu %ymm10, 448(%rcx) - vmovdqu %ymm11, 480(%rcx) + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_6: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + mov %r8b, %cl + sub $0x60, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_6 +L_mldsa_use_hint_88_avx2_hints_done_0_6: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu 448(%rdi), %ymm0 + vmovdqu 480(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_7 +L_mldsa_use_hint_88_avx2_hints_done_0_7: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 448(%rdi) + vmovdqu %ymm5, 480(%rdi) vmovdqu 512(%rdi), %ymm0 vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 512(%rdx) - vmovdqu %ymm5, 544(%rdx) - vmovdqu %ymm6, 576(%rdx) - vmovdqu %ymm7, 608(%rdx) - vmovdqu %ymm8, 512(%rcx) - vmovdqu %ymm9, 544(%rcx) - vmovdqu %ymm10, 576(%rcx) - vmovdqu %ymm11, 608(%rcx) + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_8: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_8 +L_mldsa_use_hint_88_avx2_hints_done_0_8: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 544(%rdi) + vmovdqu 576(%rdi), %ymm0 + vmovdqu 608(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_9 +L_mldsa_use_hint_88_avx2_hints_done_0_9: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 608(%rdi) vmovdqu 640(%rdi), %ymm0 vmovdqu 672(%rdi), %ymm1 - vmovdqu 704(%rdi), %ymm2 - vmovdqu 736(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 640(%rdx) - vmovdqu %ymm5, 672(%rdx) - vmovdqu %ymm6, 704(%rdx) - vmovdqu %ymm7, 736(%rdx) - vmovdqu %ymm8, 640(%rcx) - vmovdqu %ymm9, 672(%rcx) - vmovdqu %ymm10, 704(%rcx) - vmovdqu %ymm11, 736(%rcx) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 768(%rdx) - vmovdqu %ymm5, 800(%rdx) - vmovdqu %ymm6, 832(%rdx) - vmovdqu %ymm7, 864(%rdx) - vmovdqu %ymm8, 768(%rcx) - vmovdqu %ymm9, 800(%rcx) - vmovdqu %ymm10, 832(%rcx) - vmovdqu %ymm11, 864(%rcx) + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_10 +L_mldsa_use_hint_88_avx2_hints_done_0_10: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu 704(%rdi), %ymm0 + vmovdqu 736(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + mov %r8b, %cl + sub $0xb0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_11 +L_mldsa_use_hint_88_avx2_hints_done_0_11: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 704(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + mov %r8b, %cl + sub $0xc0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_12 +L_mldsa_use_hint_88_avx2_hints_done_0_12: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 768(%rdi) + vmovdqu %ymm5, 800(%rdi) + vmovdqu 832(%rdi), %ymm0 + vmovdqu 864(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_13: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + mov %r8b, %cl + sub $0xd0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_13 +L_mldsa_use_hint_88_avx2_hints_done_0_13: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 832(%rdi) + vmovdqu %ymm5, 864(%rdi) vmovdqu 896(%rdi), %ymm0 vmovdqu 928(%rdi), %ymm1 - vmovdqu 960(%rdi), %ymm2 - vmovdqu 992(%rdi), %ymm3 - vpaddd %ymm14, %ymm0, %ymm8 - vpaddd %ymm14, %ymm1, %ymm9 - vpaddd %ymm14, %ymm2, %ymm10 - vpaddd %ymm14, %ymm3, %ymm11 - vpsrld $19, %ymm8, %ymm8 - vpsrld $19, %ymm9, %ymm9 - vpsrld $19, %ymm10, %ymm10 - vpsrld $19, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsubd %ymm4, %ymm12, %ymm4 - vpsubd %ymm5, %ymm12, %ymm5 - vpsubd %ymm6, %ymm12, %ymm6 - vpsubd %ymm7, %ymm12, %ymm7 - vpsrld $31, %ymm4, %ymm4 - vpsrld $31, %ymm5, %ymm5 - vpsrld $31, %ymm6, %ymm6 - vpsrld $31, %ymm7, %ymm7 - vpaddd %ymm4, %ymm8, %ymm8 - vpaddd %ymm5, %ymm9, %ymm9 - vpaddd %ymm6, %ymm10, %ymm10 - vpaddd %ymm7, %ymm11, %ymm11 - vpmulld %ymm13, %ymm8, %ymm4 - vpmulld %ymm13, %ymm9, %ymm5 - vpmulld %ymm13, %ymm10, %ymm6 - vpmulld %ymm13, %ymm11, %ymm7 - vpsubd %ymm4, %ymm0, %ymm4 - vpsubd %ymm5, %ymm1, %ymm5 - vpsubd %ymm6, %ymm2, %ymm6 - vpsubd %ymm7, %ymm3, %ymm7 - vpsrld $4, %ymm8, %ymm0 - vpsrld $4, %ymm9, %ymm1 - vpsrld $4, %ymm10, %ymm2 - vpsrld $4, %ymm11, %ymm3 - vpsubd %ymm0, %ymm4, %ymm4 - vpsubd %ymm1, %ymm5, %ymm5 - vpsubd %ymm2, %ymm6, %ymm6 - vpsubd %ymm3, %ymm7, %ymm7 - vpand %ymm15, %ymm8, %ymm8 - vpand %ymm15, %ymm9, %ymm9 - vpand %ymm15, %ymm10, %ymm10 - vpand %ymm15, %ymm11, %ymm11 - vmovdqu %ymm4, 896(%rdx) - vmovdqu %ymm5, 928(%rdx) - vmovdqu %ymm6, 960(%rdx) - vmovdqu %ymm7, 992(%rdx) - vmovdqu %ymm8, 896(%rcx) - vmovdqu %ymm9, 928(%rcx) - vmovdqu %ymm10, 960(%rcx) - vmovdqu %ymm11, 992(%rcx) - addq $0x400, %rdi - addq $0x400, %rdx - addq $0x400, %rcx - sub $0x01, %rsi - jne L_mldsa_decompose_q32_avx2_start_256 - vzeroupper - repz retq -#ifndef __APPLE__ -.size wc_mldsa_decompose_q32_avx2,.-wc_mldsa_decompose_q32_avx2 -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_q: -.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 -.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_q_low_88: -.long 0x00017400,0x00017400,0x00017400,0x00017400 -.long 0x00017400,0x00017400,0x00017400,0x00017400 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_q_low_88_2: -.long 0x0002e800,0x0002e800,0x0002e800,0x0002e800 -.long 0x0002e800,0x0002e800,0x0002e800,0x0002e800 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_q_2: -.long 0x003fefd4,0x003fefd4,0x003fefd4,0x003fefd4 -.long 0x003fefd4,0x003fefd4,0x003fefd4,0x003fefd4 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_44: -.long 0x0000002c,0x0000002c,0x0000002c,0x0000002c -.long 0x0000002c,0x0000002c,0x0000002c,0x0000002c -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_vsl: -.long 0x0000001f,0x0000001e,0x0000001d,0x0000001c -.long 0x0000001b,0x0000001a,0x00000019,0x00000018 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_88_avx2_one: -.long 0x00000001,0x00000001,0x00000001,0x00000001 -.long 0x00000001,0x00000001,0x00000001,0x00000001 -#ifndef __APPLE__ -.text -.globl wc_mldsa_use_hint_88_avx2 -.type wc_mldsa_use_hint_88_avx2,@function -.align 16 -wc_mldsa_use_hint_88_avx2: -#else -.section __TEXT,__text -.globl _wc_mldsa_use_hint_88_avx2 -.p2align 4 -_wc_mldsa_use_hint_88_avx2: -#endif /* __APPLE__ */ - vpxor %ymm8, %ymm8, %ymm8 - vmovdqu L_mldsa_use_hint_88_avx2_q(%rip), %ymm8 - vmovdqu L_mldsa_use_hint_88_avx2_q_low_88(%rip), %ymm9 - vmovdqu L_mldsa_use_hint_88_avx2_q_low_88_2(%rip), %ymm10 - vmovdqu L_mldsa_use_hint_88_avx2_q_2(%rip), %ymm11 - vmovdqu L_mldsa_use_hint_88_avx2_44(%rip), %ymm12 - vmovdqu L_mldsa_use_hint_88_avx2_vsl(%rip), %ymm13 - vmovdqu L_mldsa_use_hint_88_avx2_one(%rip), %ymm14 - xorq %rax, %rax - mov (%rsi), %r8b - # 1/4 vectors - mov 80(%rsi), %dl - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -27957,19 +33395,2774 @@ _wc_mldsa_use_hint_88_avx2: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_0: +L_mldsa_use_hint_88_avx2_hints_next_0_14: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_14 + mov %r8b, %cl + sub $0xe0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_14 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_14 +L_mldsa_use_hint_88_avx2_hints_done_0_14: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu 960(%rdi), %ymm0 + vmovdqu 992(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_0_15: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_0_15 + mov %r8b, %cl + sub $0xf0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_0_15 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_0_15 +L_mldsa_use_hint_88_avx2_hints_done_0_15: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 960(%rdi) + vmovdqu %ymm5, 992(%rdi) + # 2/4 vectors + mov 81(%rsi), %dl + vmovdqu 1024(%rdi), %ymm0 + vmovdqu 1056(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_0: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_0 + mov %r8b, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_0 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_0 +L_mldsa_use_hint_88_avx2_hints_done_1_0: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1024(%rdi) + vmovdqu %ymm5, 1056(%rdi) + vmovdqu 1088(%rdi), %ymm0 + vmovdqu 1120(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_1: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_1 + mov %r8b, %cl + sub $16, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_1 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_1 +L_mldsa_use_hint_88_avx2_hints_done_1_1: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1088(%rdi) + vmovdqu %ymm5, 1120(%rdi) + vmovdqu 1152(%rdi), %ymm0 + vmovdqu 1184(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_2: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_2 + mov %r8b, %cl + sub $32, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_2 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_2 +L_mldsa_use_hint_88_avx2_hints_done_1_2: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1152(%rdi) + vmovdqu %ymm5, 1184(%rdi) + vmovdqu 1216(%rdi), %ymm0 + vmovdqu 1248(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_3: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_3 + mov %r8b, %cl + sub $48, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_3 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_3 +L_mldsa_use_hint_88_avx2_hints_done_1_3: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1216(%rdi) + vmovdqu %ymm5, 1248(%rdi) + vmovdqu 1280(%rdi), %ymm0 + vmovdqu 1312(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_4: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_4 + mov %r8b, %cl + sub $0x40, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_4 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_4 +L_mldsa_use_hint_88_avx2_hints_done_1_4: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1280(%rdi) + vmovdqu %ymm5, 1312(%rdi) + vmovdqu 1344(%rdi), %ymm0 + vmovdqu 1376(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_5: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_5 + mov %r8b, %cl + sub $0x50, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_5 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_5 +L_mldsa_use_hint_88_avx2_hints_done_1_5: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1344(%rdi) + vmovdqu %ymm5, 1376(%rdi) + vmovdqu 1408(%rdi), %ymm0 + vmovdqu 1440(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_6: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_6 + mov %r8b, %cl + sub $0x60, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_6 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_6 +L_mldsa_use_hint_88_avx2_hints_done_1_6: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1408(%rdi) + vmovdqu %ymm5, 1440(%rdi) + vmovdqu 1472(%rdi), %ymm0 + vmovdqu 1504(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_7 +L_mldsa_use_hint_88_avx2_hints_done_1_7: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1472(%rdi) + vmovdqu %ymm5, 1504(%rdi) + vmovdqu 1536(%rdi), %ymm0 + vmovdqu 1568(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_8: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_8 +L_mldsa_use_hint_88_avx2_hints_done_1_8: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1536(%rdi) + vmovdqu %ymm5, 1568(%rdi) + vmovdqu 1600(%rdi), %ymm0 + vmovdqu 1632(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_9 +L_mldsa_use_hint_88_avx2_hints_done_1_9: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1600(%rdi) + vmovdqu %ymm5, 1632(%rdi) + vmovdqu 1664(%rdi), %ymm0 + vmovdqu 1696(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_10 +L_mldsa_use_hint_88_avx2_hints_done_1_10: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1664(%rdi) + vmovdqu %ymm5, 1696(%rdi) + vmovdqu 1728(%rdi), %ymm0 + vmovdqu 1760(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_11 + mov %r8b, %cl + sub $0xb0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_11 +L_mldsa_use_hint_88_avx2_hints_done_1_11: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1728(%rdi) + vmovdqu %ymm5, 1760(%rdi) + vmovdqu 1792(%rdi), %ymm0 + vmovdqu 1824(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + mov %r8b, %cl + sub $0xc0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_12 +L_mldsa_use_hint_88_avx2_hints_done_1_12: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1792(%rdi) + vmovdqu %ymm5, 1824(%rdi) + vmovdqu 1856(%rdi), %ymm0 + vmovdqu 1888(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_13: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + mov %r8b, %cl + sub $0xd0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_13 +L_mldsa_use_hint_88_avx2_hints_done_1_13: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1856(%rdi) + vmovdqu %ymm5, 1888(%rdi) + vmovdqu 1920(%rdi), %ymm0 + vmovdqu 1952(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_14: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + mov %r8b, %cl + sub $0xe0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_14 +L_mldsa_use_hint_88_avx2_hints_done_1_14: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1920(%rdi) + vmovdqu %ymm5, 1952(%rdi) + vmovdqu 1984(%rdi), %ymm0 + vmovdqu 2016(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_1_15: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + mov %r8b, %cl + sub $0xf0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_1_15 +L_mldsa_use_hint_88_avx2_hints_done_1_15: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 1984(%rdi) + vmovdqu %ymm5, 2016(%rdi) + # 3/4 vectors + mov 82(%rsi), %dl + vmovdqu 2048(%rdi), %ymm0 + vmovdqu 2080(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_0: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + mov %r8b, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_0 +L_mldsa_use_hint_88_avx2_hints_done_2_0: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2048(%rdi) + vmovdqu %ymm5, 2080(%rdi) + vmovdqu 2112(%rdi), %ymm0 + vmovdqu 2144(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_1: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + mov %r8b, %cl + sub $16, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_1 +L_mldsa_use_hint_88_avx2_hints_done_2_1: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2112(%rdi) + vmovdqu %ymm5, 2144(%rdi) + vmovdqu 2176(%rdi), %ymm0 + vmovdqu 2208(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_2: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + mov %r8b, %cl + sub $32, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_2 +L_mldsa_use_hint_88_avx2_hints_done_2_2: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2176(%rdi) + vmovdqu %ymm5, 2208(%rdi) + vmovdqu 2240(%rdi), %ymm0 + vmovdqu 2272(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_3: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + mov %r8b, %cl + sub $48, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_3 +L_mldsa_use_hint_88_avx2_hints_done_2_3: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2240(%rdi) + vmovdqu %ymm5, 2272(%rdi) + vmovdqu 2304(%rdi), %ymm0 + vmovdqu 2336(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_4: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + mov %r8b, %cl + sub $0x40, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_4 +L_mldsa_use_hint_88_avx2_hints_done_2_4: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2304(%rdi) + vmovdqu %ymm5, 2336(%rdi) + vmovdqu 2368(%rdi), %ymm0 + vmovdqu 2400(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_5: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + mov %r8b, %cl + sub $0x50, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_5 +L_mldsa_use_hint_88_avx2_hints_done_2_5: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2368(%rdi) + vmovdqu %ymm5, 2400(%rdi) + vmovdqu 2432(%rdi), %ymm0 + vmovdqu 2464(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_6: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + mov %r8b, %cl + sub $0x60, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_6 +L_mldsa_use_hint_88_avx2_hints_done_2_6: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2432(%rdi) + vmovdqu %ymm5, 2464(%rdi) + vmovdqu 2496(%rdi), %ymm0 + vmovdqu 2528(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_7 +L_mldsa_use_hint_88_avx2_hints_done_2_7: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2496(%rdi) + vmovdqu %ymm5, 2528(%rdi) + vmovdqu 2560(%rdi), %ymm0 + vmovdqu 2592(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_8: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_8 +L_mldsa_use_hint_88_avx2_hints_done_2_8: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2560(%rdi) + vmovdqu %ymm5, 2592(%rdi) + vmovdqu 2624(%rdi), %ymm0 + vmovdqu 2656(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_9 +L_mldsa_use_hint_88_avx2_hints_done_2_9: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2624(%rdi) + vmovdqu %ymm5, 2656(%rdi) + vmovdqu 2688(%rdi), %ymm0 + vmovdqu 2720(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_10 +L_mldsa_use_hint_88_avx2_hints_done_2_10: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2688(%rdi) + vmovdqu %ymm5, 2720(%rdi) + vmovdqu 2752(%rdi), %ymm0 + vmovdqu 2784(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + mov %r8b, %cl + sub $0xb0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_11 +L_mldsa_use_hint_88_avx2_hints_done_2_11: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2752(%rdi) + vmovdqu %ymm5, 2784(%rdi) + vmovdqu 2816(%rdi), %ymm0 + vmovdqu 2848(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + mov %r8b, %cl + sub $0xc0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_12 +L_mldsa_use_hint_88_avx2_hints_done_2_12: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2816(%rdi) + vmovdqu %ymm5, 2848(%rdi) + vmovdqu 2880(%rdi), %ymm0 + vmovdqu 2912(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_13: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + mov %r8b, %cl + sub $0xd0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_13 +L_mldsa_use_hint_88_avx2_hints_done_2_13: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 2880(%rdi) + vmovdqu %ymm5, 2912(%rdi) + vmovdqu 2944(%rdi), %ymm0 + vmovdqu 2976(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_2_14: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + jge L_mldsa_use_hint_88_avx2_hints_done_2_14 mov %r8b, %cl + sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + jge L_mldsa_use_hint_88_avx2_hints_done_2_14 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_0 -L_mldsa_use_hint_88_avx2_hints_done_0_0: + jmp L_mldsa_use_hint_88_avx2_hints_next_2_14 +L_mldsa_use_hint_88_avx2_hints_done_2_14: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28001,10 +36194,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_0: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, (%rdi) - vmovdqu %ymm5, 32(%rdi) - vmovdqu 64(%rdi), %ymm0 - vmovdqu 96(%rdi), %ymm1 + vmovdqu %ymm4, 2944(%rdi) + vmovdqu %ymm5, 2976(%rdi) + vmovdqu 3008(%rdi), %ymm0 + vmovdqu 3040(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28042,20 +36235,193 @@ L_mldsa_use_hint_88_avx2_hints_done_0_0: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_1: +L_mldsa_use_hint_88_avx2_hints_next_2_15: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + mov %r8b, %cl + sub $0xf0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_2_15 +L_mldsa_use_hint_88_avx2_hints_done_2_15: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 3008(%rdi) + vmovdqu %ymm5, 3040(%rdi) + # 4/4 vectors + mov 83(%rsi), %dl + vmovdqu 3072(%rdi), %ymm0 + vmovdqu 3104(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_3_0: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + mov %r8b, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_3_0 +L_mldsa_use_hint_88_avx2_hints_done_3_0: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 3072(%rdi) + vmovdqu %ymm5, 3104(%rdi) + vmovdqu 3136(%rdi), %ymm0 + vmovdqu 3168(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_3_1: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_3_1 mov %r8b, %cl sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + jge L_mldsa_use_hint_88_avx2_hints_done_3_1 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_1 -L_mldsa_use_hint_88_avx2_hints_done_0_1: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_1 +L_mldsa_use_hint_88_avx2_hints_done_3_1: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28087,10 +36453,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_1: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 64(%rdi) - vmovdqu %ymm5, 96(%rdi) - vmovdqu 128(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 + vmovdqu %ymm4, 3136(%rdi) + vmovdqu %ymm5, 3168(%rdi) + vmovdqu 3200(%rdi), %ymm0 + vmovdqu 3232(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28128,20 +36494,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_1: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_2: +L_mldsa_use_hint_88_avx2_hints_next_3_2: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + jge L_mldsa_use_hint_88_avx2_hints_done_3_2 mov %r8b, %cl sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + jge L_mldsa_use_hint_88_avx2_hints_done_3_2 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_2 -L_mldsa_use_hint_88_avx2_hints_done_0_2: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_2 +L_mldsa_use_hint_88_avx2_hints_done_3_2: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28173,10 +36539,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_2: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu 192(%rdi), %ymm0 - vmovdqu 224(%rdi), %ymm1 + vmovdqu %ymm4, 3200(%rdi) + vmovdqu %ymm5, 3232(%rdi) + vmovdqu 3264(%rdi), %ymm0 + vmovdqu 3296(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28214,20 +36580,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_2: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_3: +L_mldsa_use_hint_88_avx2_hints_next_3_3: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + jge L_mldsa_use_hint_88_avx2_hints_done_3_3 mov %r8b, %cl sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + jge L_mldsa_use_hint_88_avx2_hints_done_3_3 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_3 -L_mldsa_use_hint_88_avx2_hints_done_0_3: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_3 +L_mldsa_use_hint_88_avx2_hints_done_3_3: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28259,10 +36625,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_3: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 192(%rdi) - vmovdqu %ymm5, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 + vmovdqu %ymm4, 3264(%rdi) + vmovdqu %ymm5, 3296(%rdi) + vmovdqu 3328(%rdi), %ymm0 + vmovdqu 3360(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28300,20 +36666,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_3: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_4: +L_mldsa_use_hint_88_avx2_hints_next_3_4: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + jge L_mldsa_use_hint_88_avx2_hints_done_3_4 mov %r8b, %cl sub $0x40, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + jge L_mldsa_use_hint_88_avx2_hints_done_3_4 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_4 -L_mldsa_use_hint_88_avx2_hints_done_0_4: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_4 +L_mldsa_use_hint_88_avx2_hints_done_3_4: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28345,10 +36711,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_4: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 256(%rdi) - vmovdqu %ymm5, 288(%rdi) - vmovdqu 320(%rdi), %ymm0 - vmovdqu 352(%rdi), %ymm1 + vmovdqu %ymm4, 3328(%rdi) + vmovdqu %ymm5, 3360(%rdi) + vmovdqu 3392(%rdi), %ymm0 + vmovdqu 3424(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28386,20 +36752,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_4: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_5: +L_mldsa_use_hint_88_avx2_hints_next_3_5: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + jge L_mldsa_use_hint_88_avx2_hints_done_3_5 mov %r8b, %cl sub $0x50, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + jge L_mldsa_use_hint_88_avx2_hints_done_3_5 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_5 -L_mldsa_use_hint_88_avx2_hints_done_0_5: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_5 +L_mldsa_use_hint_88_avx2_hints_done_3_5: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28431,10 +36797,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_5: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 320(%rdi) - vmovdqu %ymm5, 352(%rdi) - vmovdqu 384(%rdi), %ymm0 - vmovdqu 416(%rdi), %ymm1 + vmovdqu %ymm4, 3392(%rdi) + vmovdqu %ymm5, 3424(%rdi) + vmovdqu 3456(%rdi), %ymm0 + vmovdqu 3488(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28472,20 +36838,192 @@ L_mldsa_use_hint_88_avx2_hints_done_0_5: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_6: +L_mldsa_use_hint_88_avx2_hints_next_3_6: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + jge L_mldsa_use_hint_88_avx2_hints_done_3_6 mov %r8b, %cl sub $0x60, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + jge L_mldsa_use_hint_88_avx2_hints_done_3_6 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_6 -L_mldsa_use_hint_88_avx2_hints_done_0_6: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_6 +L_mldsa_use_hint_88_avx2_hints_done_3_6: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 3456(%rdi) + vmovdqu %ymm5, 3488(%rdi) + vmovdqu 3520(%rdi), %ymm0 + vmovdqu 3552(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_3_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_3_7 +L_mldsa_use_hint_88_avx2_hints_done_3_7: + movd %r10d, %xmm6 + shr $8, %r10 + movd %r10d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + vpsrad $31, %ymm4, %ymm0 + vpsrad $31, %ymm5, %ymm1 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpaddd %ymm0, %ymm4, %ymm4 + vpaddd %ymm1, %ymm5, %ymm5 + vmovdqu %ymm4, 3520(%rdi) + vmovdqu %ymm5, 3552(%rdi) + vmovdqu 3584(%rdi), %ymm0 + vmovdqu 3616(%rdi), %ymm1 + vpsrad $31, %ymm0, %ymm2 + vpsrad $31, %ymm1, %ymm3 + vpand %ymm8, %ymm2, %ymm2 + vpand %ymm8, %ymm3, %ymm3 + vpaddd %ymm2, %ymm0, %ymm0 + vpaddd %ymm3, %ymm1, %ymm1 + vpmulld %ymm12, %ymm0, %ymm4 + vpmulld %ymm12, %ymm1, %ymm5 + vpaddd %ymm11, %ymm4, %ymm4 + vpaddd %ymm11, %ymm5, %ymm5 + vpsrld $23, %ymm4, %ymm4 + vpsrld $23, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsubd %ymm2, %ymm9, %ymm2 + vpsubd %ymm3, %ymm9, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpcmpeqd %ymm12, %ymm4, %ymm0 + vpcmpeqd %ymm12, %ymm5, %ymm1 + vpaddd %ymm0, %ymm2, %ymm2 + vpaddd %ymm1, %ymm3, %ymm3 + vpcmpgtd %ymm4, %ymm12, %ymm0 + vpcmpgtd %ymm5, %ymm12, %ymm1 + vpand %ymm0, %ymm4, %ymm4 + vpand %ymm1, %ymm5, %ymm5 + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx2_hints_next_3_8: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx2_hints_next_3_8 +L_mldsa_use_hint_88_avx2_hints_done_3_8: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28517,10 +37055,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_6: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu 448(%rdi), %ymm0 - vmovdqu 480(%rdi), %ymm1 + vmovdqu %ymm4, 3584(%rdi) + vmovdqu %ymm5, 3616(%rdi) + vmovdqu 3648(%rdi), %ymm0 + vmovdqu 3680(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28558,20 +37096,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_6: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_7: +L_mldsa_use_hint_88_avx2_hints_next_3_9: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + jge L_mldsa_use_hint_88_avx2_hints_done_3_9 mov %r8b, %cl - sub $0x70, %cl + sub $0x90, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + jge L_mldsa_use_hint_88_avx2_hints_done_3_9 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_7 -L_mldsa_use_hint_88_avx2_hints_done_0_7: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_9 +L_mldsa_use_hint_88_avx2_hints_done_3_9: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28603,10 +37141,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_7: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 448(%rdi) - vmovdqu %ymm5, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 + vmovdqu %ymm4, 3648(%rdi) + vmovdqu %ymm5, 3680(%rdi) + vmovdqu 3712(%rdi), %ymm0 + vmovdqu 3744(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28644,20 +37182,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_7: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_8: +L_mldsa_use_hint_88_avx2_hints_next_3_10: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + jge L_mldsa_use_hint_88_avx2_hints_done_3_10 mov %r8b, %cl - sub $0x80, %cl + sub $0xa0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + jge L_mldsa_use_hint_88_avx2_hints_done_3_10 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_8 -L_mldsa_use_hint_88_avx2_hints_done_0_8: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_10 +L_mldsa_use_hint_88_avx2_hints_done_3_10: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28689,10 +37227,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_8: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 512(%rdi) - vmovdqu %ymm5, 544(%rdi) - vmovdqu 576(%rdi), %ymm0 - vmovdqu 608(%rdi), %ymm1 + vmovdqu %ymm4, 3712(%rdi) + vmovdqu %ymm5, 3744(%rdi) + vmovdqu 3776(%rdi), %ymm0 + vmovdqu 3808(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28730,20 +37268,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_8: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_9: +L_mldsa_use_hint_88_avx2_hints_next_3_11: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + jge L_mldsa_use_hint_88_avx2_hints_done_3_11 mov %r8b, %cl - sub $0x90, %cl + sub $0xb0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + jge L_mldsa_use_hint_88_avx2_hints_done_3_11 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_9 -L_mldsa_use_hint_88_avx2_hints_done_0_9: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_11 +L_mldsa_use_hint_88_avx2_hints_done_3_11: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28775,10 +37313,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_9: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 576(%rdi) - vmovdqu %ymm5, 608(%rdi) - vmovdqu 640(%rdi), %ymm0 - vmovdqu 672(%rdi), %ymm1 + vmovdqu %ymm4, 3776(%rdi) + vmovdqu %ymm5, 3808(%rdi) + vmovdqu 3840(%rdi), %ymm0 + vmovdqu 3872(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28816,20 +37354,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_9: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_10: +L_mldsa_use_hint_88_avx2_hints_next_3_12: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + jge L_mldsa_use_hint_88_avx2_hints_done_3_12 mov %r8b, %cl - sub $0xa0, %cl + sub $0xc0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + jge L_mldsa_use_hint_88_avx2_hints_done_3_12 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_10 -L_mldsa_use_hint_88_avx2_hints_done_0_10: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_12 +L_mldsa_use_hint_88_avx2_hints_done_3_12: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28861,10 +37399,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_10: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu 704(%rdi), %ymm0 - vmovdqu 736(%rdi), %ymm1 + vmovdqu %ymm4, 3840(%rdi) + vmovdqu %ymm5, 3872(%rdi) + vmovdqu 3904(%rdi), %ymm0 + vmovdqu 3936(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28902,20 +37440,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_10: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_11: +L_mldsa_use_hint_88_avx2_hints_next_3_13: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + jge L_mldsa_use_hint_88_avx2_hints_done_3_13 mov %r8b, %cl - sub $0xb0, %cl + sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + jge L_mldsa_use_hint_88_avx2_hints_done_3_13 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_11 -L_mldsa_use_hint_88_avx2_hints_done_0_11: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_13 +L_mldsa_use_hint_88_avx2_hints_done_3_13: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -28947,10 +37485,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_11: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 704(%rdi) - vmovdqu %ymm5, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 + vmovdqu %ymm4, 3904(%rdi) + vmovdqu %ymm5, 3936(%rdi) + vmovdqu 3968(%rdi), %ymm0 + vmovdqu 4000(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -28988,20 +37526,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_11: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_12: +L_mldsa_use_hint_88_avx2_hints_next_3_14: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + jge L_mldsa_use_hint_88_avx2_hints_done_3_14 mov %r8b, %cl - sub $0xc0, %cl + sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + jge L_mldsa_use_hint_88_avx2_hints_done_3_14 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_12 -L_mldsa_use_hint_88_avx2_hints_done_0_12: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_14 +L_mldsa_use_hint_88_avx2_hints_done_3_14: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -29033,10 +37571,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_12: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 768(%rdi) - vmovdqu %ymm5, 800(%rdi) - vmovdqu 832(%rdi), %ymm0 - vmovdqu 864(%rdi), %ymm1 + vmovdqu %ymm4, 3968(%rdi) + vmovdqu %ymm5, 4000(%rdi) + vmovdqu 4032(%rdi), %ymm0 + vmovdqu 4064(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 @@ -29074,20 +37612,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_12: movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_13: +L_mldsa_use_hint_88_avx2_hints_next_3_15: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + jge L_mldsa_use_hint_88_avx2_hints_done_3_15 mov %r8b, %cl - sub $0xd0, %cl + sub $0xf0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + jge L_mldsa_use_hint_88_avx2_hints_done_3_15 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_13 -L_mldsa_use_hint_88_avx2_hints_done_0_13: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_15 +L_mldsa_use_hint_88_avx2_hints_done_3_15: movd %r10d, %xmm6 shr $8, %r10 movd %r10d, %xmm7 @@ -29119,22 +37657,145 @@ L_mldsa_use_hint_88_avx2_hints_done_0_13: vpand %ymm12, %ymm1, %ymm1 vpaddd %ymm0, %ymm4, %ymm4 vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 832(%rdi) - vmovdqu %ymm5, 864(%rdi) - vmovdqu 896(%rdi), %ymm0 - vmovdqu 928(%rdi), %ymm1 + vmovdqu %ymm4, 4032(%rdi) + vmovdqu %ymm5, 4064(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_use_hint_88_avx2,.-wc_mldsa_use_hint_88_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_q: +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_q_low_32: +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_q_low_32_2: +.long 0x0007fe00,0x0007fe00,0x0007fe00,0x0007fe00 +.long 0x0007fe00,0x0007fe00,0x0007fe00,0x0007fe00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_q_low_32_m1: +.long 0x0003feff,0x0003feff,0x0003feff,0x0003feff +.long 0x0003feff,0x0003feff,0x0003feff,0x0003feff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_mask: +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_vsl: +.long 0x0000001f,0x0000001e,0x0000001d,0x0000001c +.long 0x0000001b,0x0000001a,0x00000019,0x00000018 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_use_hint_32_avx2_one: +.long 0x00000001,0x00000001,0x00000001,0x00000001 +.long 0x00000001,0x00000001,0x00000001,0x00000001 +#ifndef __APPLE__ +.text +.globl wc_mldsa_use_hint_32_avx2 +.type wc_mldsa_use_hint_32_avx2,@function +.align 16 +wc_mldsa_use_hint_32_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_use_hint_32_avx2 +.p2align 4 +_wc_mldsa_use_hint_32_avx2: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + vpxor %ymm8, %ymm8, %ymm8 + vmovdqu L_mldsa_use_hint_32_avx2_q(%rip), %ymm8 + vmovdqu L_mldsa_use_hint_32_avx2_q_low_32(%rip), %ymm9 + vmovdqu L_mldsa_use_hint_32_avx2_q_low_32_2(%rip), %ymm10 + vmovdqu L_mldsa_use_hint_32_avx2_q_low_32_m1(%rip), %ymm11 + vmovdqu L_mldsa_use_hint_32_avx2_mask(%rip), %ymm12 + vmovdqu L_mldsa_use_hint_32_avx2_vsl(%rip), %ymm13 + vmovdqu L_mldsa_use_hint_32_avx2_one(%rip), %ymm14 + xorq %r8, %r8 + mov (%rdx), %r9b + imulq $10, %rsi, %r13 + subq $5, %r13 +L_mldsa_use_hint_32_avx2_start_256: + mov (%rdx,%r13,1), %al + incq %r13 + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29149,34 +37810,31 @@ L_mldsa_use_hint_88_avx2_hints_done_0_13: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_14: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_14 - mov %r8b, %cl - sub $0xe0, %cl +L_mldsa_use_hint_32_avx2_hints_next__0: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__0 + mov %r9b, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_14 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_14 -L_mldsa_use_hint_88_avx2_hints_done_0_14: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__0 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__0 +L_mldsa_use_hint_32_avx2_hints_done__0: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29195,32 +37853,22 @@ L_mldsa_use_hint_88_avx2_hints_done_0_14: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu 960(%rdi), %ymm0 - vmovdqu 992(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, (%rdi) + vmovdqu %ymm5, 32(%rdi) + vmovdqu 64(%rdi), %ymm0 + vmovdqu 96(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29230,39 +37878,37 @@ L_mldsa_use_hint_88_avx2_hints_done_0_14: vpsrld $31, %ymm2, %ymm2 vpsrld $31, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpaddd %ymm3, %ymm5, %ymm5 + vpmulld %ymm10, %ymm4, %ymm2 + vpmulld %ymm10, %ymm5, %ymm3 + vpsubd %ymm2, %ymm0, %ymm2 + vpsubd %ymm3, %ymm1, %ymm3 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_0_15: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_0_15 - mov %r8b, %cl - sub $0xf0, %cl +L_mldsa_use_hint_32_avx2_hints_next__1: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__1 + mov %r9b, %cl + sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_0_15 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_0_15 -L_mldsa_use_hint_88_avx2_hints_done_0_15: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__1 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__1 +L_mldsa_use_hint_32_avx2_hints_done__1: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29281,34 +37927,22 @@ L_mldsa_use_hint_88_avx2_hints_done_0_15: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 960(%rdi) - vmovdqu %ymm5, 992(%rdi) - # 2/4 vectors - mov 81(%rsi), %dl - vmovdqu 1024(%rdi), %ymm0 - vmovdqu 1056(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 64(%rdi) + vmovdqu %ymm5, 96(%rdi) + vmovdqu 128(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29323,33 +37957,32 @@ L_mldsa_use_hint_88_avx2_hints_done_0_15: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_0: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_0 - mov %r8b, %cl +L_mldsa_use_hint_32_avx2_hints_next__2: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__2 + mov %r9b, %cl + sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_0 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_0 -L_mldsa_use_hint_88_avx2_hints_done_1_0: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__2 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__2 +L_mldsa_use_hint_32_avx2_hints_done__2: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29368,32 +38001,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_0: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1024(%rdi) - vmovdqu %ymm5, 1056(%rdi) - vmovdqu 1088(%rdi), %ymm0 - vmovdqu 1120(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu 192(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29408,34 +38031,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_0: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_1: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_1 - mov %r8b, %cl - sub $16, %cl +L_mldsa_use_hint_32_avx2_hints_next__3: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__3 + mov %r9b, %cl + sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_1 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_1 -L_mldsa_use_hint_88_avx2_hints_done_1_1: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__3 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__3 +L_mldsa_use_hint_32_avx2_hints_done__3: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29454,32 +38075,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_1: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1088(%rdi) - vmovdqu %ymm5, 1120(%rdi) - vmovdqu 1152(%rdi), %ymm0 - vmovdqu 1184(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 192(%rdi) + vmovdqu %ymm5, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29494,34 +38105,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_1: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_2: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_2 - mov %r8b, %cl - sub $32, %cl +L_mldsa_use_hint_32_avx2_hints_next__4: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__4 + mov %r9b, %cl + sub $0x40, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_2 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_2 -L_mldsa_use_hint_88_avx2_hints_done_1_2: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__4 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__4 +L_mldsa_use_hint_32_avx2_hints_done__4: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29540,32 +38149,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_2: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1152(%rdi) - vmovdqu %ymm5, 1184(%rdi) - vmovdqu 1216(%rdi), %ymm0 - vmovdqu 1248(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 256(%rdi) + vmovdqu %ymm5, 288(%rdi) + vmovdqu 320(%rdi), %ymm0 + vmovdqu 352(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29580,34 +38179,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_2: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_3: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_3 - mov %r8b, %cl - sub $48, %cl +L_mldsa_use_hint_32_avx2_hints_next__5: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__5 + mov %r9b, %cl + sub $0x50, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_3 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_3 -L_mldsa_use_hint_88_avx2_hints_done_1_3: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__5 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__5 +L_mldsa_use_hint_32_avx2_hints_done__5: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29626,32 +38223,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_3: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1216(%rdi) - vmovdqu %ymm5, 1248(%rdi) - vmovdqu 1280(%rdi), %ymm0 - vmovdqu 1312(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 320(%rdi) + vmovdqu %ymm5, 352(%rdi) + vmovdqu 384(%rdi), %ymm0 + vmovdqu 416(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29666,34 +38253,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_3: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_4: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_4 - mov %r8b, %cl - sub $0x40, %cl +L_mldsa_use_hint_32_avx2_hints_next__6: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__6 + mov %r9b, %cl + sub $0x60, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_4 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_4 -L_mldsa_use_hint_88_avx2_hints_done_1_4: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__6 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__6 +L_mldsa_use_hint_32_avx2_hints_done__6: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29712,32 +38297,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_4: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1280(%rdi) - vmovdqu %ymm5, 1312(%rdi) - vmovdqu 1344(%rdi), %ymm0 - vmovdqu 1376(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu 448(%rdi), %ymm0 + vmovdqu 480(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29752,34 +38327,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_4: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_5: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_5 - mov %r8b, %cl - sub $0x50, %cl - cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_5 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_5 -L_mldsa_use_hint_88_avx2_hints_done_1_5: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 +L_mldsa_use_hint_32_avx2_hints_next__7: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__7 + mov %r9b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_32_avx2_hints_done__7 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__7 +L_mldsa_use_hint_32_avx2_hints_done__7: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29798,32 +38371,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_5: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1344(%rdi) - vmovdqu %ymm5, 1376(%rdi) - vmovdqu 1408(%rdi), %ymm0 - vmovdqu 1440(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 448(%rdi) + vmovdqu %ymm5, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29838,34 +38401,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_5: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_6: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_6 - mov %r8b, %cl - sub $0x60, %cl +L_mldsa_use_hint_32_avx2_hints_next__8: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__8 + mov %r9b, %cl + sub $0x80, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_6 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_6 -L_mldsa_use_hint_88_avx2_hints_done_1_6: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__8 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__8 +L_mldsa_use_hint_32_avx2_hints_done__8: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29884,32 +38445,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_6: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1408(%rdi) - vmovdqu %ymm5, 1440(%rdi) - vmovdqu 1472(%rdi), %ymm0 - vmovdqu 1504(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 512(%rdi) + vmovdqu %ymm5, 544(%rdi) + vmovdqu 576(%rdi), %ymm0 + vmovdqu 608(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -29924,34 +38475,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_6: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_7: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_7 - mov %r8b, %cl - sub $0x70, %cl +L_mldsa_use_hint_32_avx2_hints_next__9: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__9 + mov %r9b, %cl + sub $0x90, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_7 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_7 -L_mldsa_use_hint_88_avx2_hints_done_1_7: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__9 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__9 +L_mldsa_use_hint_32_avx2_hints_done__9: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -29970,32 +38519,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_7: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1472(%rdi) - vmovdqu %ymm5, 1504(%rdi) - vmovdqu 1536(%rdi), %ymm0 - vmovdqu 1568(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 576(%rdi) + vmovdqu %ymm5, 608(%rdi) + vmovdqu 640(%rdi), %ymm0 + vmovdqu 672(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30010,34 +38549,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_7: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_8: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_8 - mov %r8b, %cl - sub $0x80, %cl +L_mldsa_use_hint_32_avx2_hints_next__10: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__10 + mov %r9b, %cl + sub $0xa0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_8 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_8 -L_mldsa_use_hint_88_avx2_hints_done_1_8: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__10 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__10 +L_mldsa_use_hint_32_avx2_hints_done__10: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -30056,32 +38593,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_8: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1536(%rdi) - vmovdqu %ymm5, 1568(%rdi) - vmovdqu 1600(%rdi), %ymm0 - vmovdqu 1632(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu 704(%rdi), %ymm0 + vmovdqu 736(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30096,34 +38623,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_8: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_9: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_9 - mov %r8b, %cl - sub $0x90, %cl +L_mldsa_use_hint_32_avx2_hints_next__11: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__11 + mov %r9b, %cl + sub $0xb0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_9 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_9 -L_mldsa_use_hint_88_avx2_hints_done_1_9: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__11 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__11 +L_mldsa_use_hint_32_avx2_hints_done__11: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -30142,32 +38667,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_9: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1600(%rdi) - vmovdqu %ymm5, 1632(%rdi) - vmovdqu 1664(%rdi), %ymm0 - vmovdqu 1696(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 704(%rdi) + vmovdqu %ymm5, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30182,34 +38697,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_9: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_10: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_10 - mov %r8b, %cl - sub $0xa0, %cl +L_mldsa_use_hint_32_avx2_hints_next__12: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__12 + mov %r9b, %cl + sub $0xc0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_10 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_10 -L_mldsa_use_hint_88_avx2_hints_done_1_10: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__12 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__12 +L_mldsa_use_hint_32_avx2_hints_done__12: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -30228,32 +38741,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_10: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1664(%rdi) - vmovdqu %ymm5, 1696(%rdi) - vmovdqu 1728(%rdi), %ymm0 - vmovdqu 1760(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 768(%rdi) + vmovdqu %ymm5, 800(%rdi) + vmovdqu 832(%rdi), %ymm0 + vmovdqu 864(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30268,34 +38771,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_10: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_11: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_11 - mov %r8b, %cl - sub $0xb0, %cl +L_mldsa_use_hint_32_avx2_hints_next__13: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__13 + mov %r9b, %cl + sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_11 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_11 -L_mldsa_use_hint_88_avx2_hints_done_1_11: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__13 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__13 +L_mldsa_use_hint_32_avx2_hints_done__13: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -30312,34 +38813,24 @@ L_mldsa_use_hint_88_avx2_hints_done_1_11: vpsubd %ymm3, %ymm14, %ymm3 vpand %ymm6, %ymm2, %ymm2 vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1728(%rdi) - vmovdqu %ymm5, 1760(%rdi) - vmovdqu 1792(%rdi), %ymm0 - vmovdqu 1824(%rdi), %ymm1 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 832(%rdi) + vmovdqu %ymm5, 864(%rdi) + vmovdqu 896(%rdi), %ymm0 + vmovdqu 928(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30354,34 +38845,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_11: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - movq $0x01, %r9 - xorq %r10, %r10 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_12: - cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_12 - mov %r8b, %cl - sub $0xc0, %cl +L_mldsa_use_hint_32_avx2_hints_next__14: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__14 + mov %r9b, %cl + sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_12 - mov %r9, %r11 - shlq %cl, %r11 - orq %r11, %r10 - inc %al - mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_12 -L_mldsa_use_hint_88_avx2_hints_done_1_12: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 + jge L_mldsa_use_hint_32_avx2_hints_done__14 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__14 +L_mldsa_use_hint_32_avx2_hints_done__14: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 vpbroadcastd %xmm6, %ymm6 vpbroadcastd %xmm7, %ymm7 vpsllvd %ymm13, %ymm6, %ymm6 @@ -30400,32 +38889,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_12: vpand %ymm7, %ymm3, %ymm3 vpaddd %ymm2, %ymm4, %ymm4 vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1792(%rdi) - vmovdqu %ymm5, 1824(%rdi) - vmovdqu 1856(%rdi), %ymm0 - vmovdqu 1888(%rdi), %ymm1 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu 960(%rdi), %ymm0 + vmovdqu 992(%rdi), %ymm1 vpsrad $31, %ymm0, %ymm2 vpsrad $31, %ymm1, %ymm3 vpand %ymm8, %ymm2, %ymm2 vpand %ymm8, %ymm3, %ymm3 vpaddd %ymm2, %ymm0, %ymm0 vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 + vpaddd %ymm11, %ymm0, %ymm4 + vpaddd %ymm11, %ymm1, %ymm5 + vpsrld $19, %ymm4, %ymm4 + vpsrld $19, %ymm5, %ymm5 vpmulld %ymm10, %ymm4, %ymm2 vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 @@ -30440,5012 +38919,25411 @@ L_mldsa_use_hint_88_avx2_hints_done_1_12: vpmulld %ymm10, %ymm5, %ymm3 vpsubd %ymm2, %ymm0, %ymm2 vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + vpsrld $4, %ymm4, %ymm0 + vpsrld $4, %ymm5, %ymm1 + vpsubd %ymm0, %ymm2, %ymm2 + vpsubd %ymm1, %ymm3, %ymm3 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + movq $0x01, %r10 + xorq %r11, %r11 + xorq %rcx, %rcx +L_mldsa_use_hint_32_avx2_hints_next__15: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx2_hints_done__15 + mov %r9b, %cl + sub $0xf0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_32_avx2_hints_done__15 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx2_hints_next__15 +L_mldsa_use_hint_32_avx2_hints_done__15: + movd %r11d, %xmm6 + shr $8, %r11 + movd %r11d, %xmm7 + vpbroadcastd %xmm6, %ymm6 + vpbroadcastd %xmm7, %ymm7 + vpsllvd %ymm13, %ymm6, %ymm6 + vpsllvd %ymm13, %ymm7, %ymm7 + vpsrad $31, %ymm6, %ymm6 + vpsrad $31, %ymm7, %ymm7 + vpsubd %ymm14, %ymm2, %ymm2 + vpsubd %ymm14, %ymm3, %ymm3 + vpsrld $31, %ymm2, %ymm2 + vpsrld $31, %ymm3, %ymm3 + vpslld $0x01, %ymm2, %ymm2 + vpslld $0x01, %ymm3, %ymm3 + vpsubd %ymm2, %ymm14, %ymm2 + vpsubd %ymm3, %ymm14, %ymm3 + vpand %ymm6, %ymm2, %ymm2 + vpand %ymm7, %ymm3, %ymm3 + vpaddd %ymm2, %ymm4, %ymm4 + vpaddd %ymm3, %ymm5, %ymm5 + vpand %ymm12, %ymm4, %ymm4 + vpand %ymm12, %ymm5, %ymm5 + vmovdqu %ymm4, 960(%rdi) + vmovdqu %ymm5, 992(%rdi) + addq $0x400, %rdi + sub $0x01, %rsi + jne L_mldsa_use_hint_32_avx2_start_256 + vzeroupper + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size wc_mldsa_use_hint_32_avx2,.-wc_mldsa_use_hint_32_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_vec_check_low_avx2 +.type wc_mldsa_vec_check_low_avx2,@function +.align 16 +wc_mldsa_vec_check_low_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_vec_check_low_avx2 +.p2align 4 +_wc_mldsa_vec_check_low_avx2: +#endif /* __APPLE__ */ + subl $0x01, %edx + movd %edx, %xmm2 + negl %edx + movd %edx, %xmm3 + vpbroadcastd %xmm2, %ymm2 + vpbroadcastd %xmm3, %ymm3 +L_mldsa_vec_check_low_vx2_start_256: + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 64(%rdi), %ymm0 + vmovdqu 96(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 128(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 192(%rdi), %ymm0 + vmovdqu 224(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 320(%rdi), %ymm0 + vmovdqu 352(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 384(%rdi), %ymm0 + vmovdqu 416(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 448(%rdi), %ymm0 + vmovdqu 480(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 576(%rdi), %ymm0 + vmovdqu 608(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 640(%rdi), %ymm0 + vmovdqu 672(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 704(%rdi), %ymm0 + vmovdqu 736(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 832(%rdi), %ymm0 + vmovdqu 864(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 896(%rdi), %ymm0 + vmovdqu 928(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + vmovdqu 960(%rdi), %ymm0 + vmovdqu 992(%rdi), %ymm1 + vpcmpgtd %ymm2, %ymm0, %ymm4 + vpcmpgtd %ymm2, %ymm1, %ymm5 + vpcmpgtd %ymm0, %ymm3, %ymm6 + vpcmpgtd %ymm1, %ymm3, %ymm7 + vpor %ymm5, %ymm4, %ymm4 + vpor %ymm7, %ymm6, %ymm6 + vpor %ymm6, %ymm4, %ymm4 + vpmovmskb %ymm4, %rax + cmp $0x00, %rax + movq $0x00, %rax + jne L_mldsa_vec_check_low_vx2_done + addq $0x400, %rdi + sub $0x01, %rsi + jne L_mldsa_vec_check_low_vx2_start_256 + movq $0x01, %rax +L_mldsa_vec_check_low_vx2_done: + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_vec_check_low_avx2,.-wc_mldsa_vec_check_low_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_add_avx2 +.type wc_mldsa_poly_add_avx2,@function +.align 16 +wc_mldsa_poly_add_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_add_avx2 +.p2align 4 +_wc_mldsa_poly_add_avx2: +#endif /* __APPLE__ */ + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 128(%rdi), %ymm4 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + vmovdqu (%rsi), %ymm8 + vmovdqu 32(%rsi), %ymm9 + vmovdqu 64(%rsi), %ymm10 + vmovdqu 96(%rsi), %ymm11 + vmovdqu 128(%rsi), %ymm12 + vmovdqu 160(%rsi), %ymm13 + vmovdqu 192(%rsi), %ymm14 + vmovdqu 224(%rsi), %ymm15 + vpaddd %ymm8, %ymm0, %ymm0 + vpaddd %ymm9, %ymm1, %ymm1 + vpaddd %ymm10, %ymm2, %ymm2 + vpaddd %ymm11, %ymm3, %ymm3 + vpaddd %ymm12, %ymm4, %ymm4 + vpaddd %ymm13, %ymm5, %ymm5 + vpaddd %ymm14, %ymm6, %ymm6 + vpaddd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + vmovdqu 256(%rsi), %ymm8 + vmovdqu 288(%rsi), %ymm9 + vmovdqu 320(%rsi), %ymm10 + vmovdqu 352(%rsi), %ymm11 + vmovdqu 384(%rsi), %ymm12 + vmovdqu 416(%rsi), %ymm13 + vmovdqu 448(%rsi), %ymm14 + vmovdqu 480(%rsi), %ymm15 + vpaddd %ymm8, %ymm0, %ymm0 + vpaddd %ymm9, %ymm1, %ymm1 + vpaddd %ymm10, %ymm2, %ymm2 + vpaddd %ymm11, %ymm3, %ymm3 + vpaddd %ymm12, %ymm4, %ymm4 + vpaddd %ymm13, %ymm5, %ymm5 + vpaddd %ymm14, %ymm6, %ymm6 + vpaddd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + vmovdqu 512(%rsi), %ymm8 + vmovdqu 544(%rsi), %ymm9 + vmovdqu 576(%rsi), %ymm10 + vmovdqu 608(%rsi), %ymm11 + vmovdqu 640(%rsi), %ymm12 + vmovdqu 672(%rsi), %ymm13 + vmovdqu 704(%rsi), %ymm14 + vmovdqu 736(%rsi), %ymm15 + vpaddd %ymm8, %ymm0, %ymm0 + vpaddd %ymm9, %ymm1, %ymm1 + vpaddd %ymm10, %ymm2, %ymm2 + vpaddd %ymm11, %ymm3, %ymm3 + vpaddd %ymm12, %ymm4, %ymm4 + vpaddd %ymm13, %ymm5, %ymm5 + vpaddd %ymm14, %ymm6, %ymm6 + vpaddd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + vmovdqu 768(%rsi), %ymm8 + vmovdqu 800(%rsi), %ymm9 + vmovdqu 832(%rsi), %ymm10 + vmovdqu 864(%rsi), %ymm11 + vmovdqu 896(%rsi), %ymm12 + vmovdqu 928(%rsi), %ymm13 + vmovdqu 960(%rsi), %ymm14 + vmovdqu 992(%rsi), %ymm15 + vpaddd %ymm8, %ymm0, %ymm0 + vpaddd %ymm9, %ymm1, %ymm1 + vpaddd %ymm10, %ymm2, %ymm2 + vpaddd %ymm11, %ymm3, %ymm3 + vpaddd %ymm12, %ymm4, %ymm4 + vpaddd %ymm13, %ymm5, %ymm5 + vpaddd %ymm14, %ymm6, %ymm6 + vpaddd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm3, 864(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu %ymm7, 992(%rdi) + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_add_avx2,.-wc_mldsa_poly_add_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_sub_avx2 +.type wc_mldsa_poly_sub_avx2,@function +.align 16 +wc_mldsa_poly_sub_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_sub_avx2 +.p2align 4 +_wc_mldsa_poly_sub_avx2: +#endif /* __APPLE__ */ + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vmovdqu 128(%rdi), %ymm4 + vmovdqu 160(%rdi), %ymm5 + vmovdqu 192(%rdi), %ymm6 + vmovdqu 224(%rdi), %ymm7 + vmovdqu (%rsi), %ymm8 + vmovdqu 32(%rsi), %ymm9 + vmovdqu 64(%rsi), %ymm10 + vmovdqu 96(%rsi), %ymm11 + vmovdqu 128(%rsi), %ymm12 + vmovdqu 160(%rsi), %ymm13 + vmovdqu 192(%rsi), %ymm14 + vmovdqu 224(%rsi), %ymm15 + vpsubd %ymm8, %ymm0, %ymm0 + vpsubd %ymm9, %ymm1, %ymm1 + vpsubd %ymm10, %ymm2, %ymm2 + vpsubd %ymm11, %ymm3, %ymm3 + vpsubd %ymm12, %ymm4, %ymm4 + vpsubd %ymm13, %ymm5, %ymm5 + vpsubd %ymm14, %ymm6, %ymm6 + vpsubd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu %ymm4, 128(%rdi) + vmovdqu %ymm5, 160(%rdi) + vmovdqu %ymm6, 192(%rdi) + vmovdqu %ymm7, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vmovdqu 384(%rdi), %ymm4 + vmovdqu 416(%rdi), %ymm5 + vmovdqu 448(%rdi), %ymm6 + vmovdqu 480(%rdi), %ymm7 + vmovdqu 256(%rsi), %ymm8 + vmovdqu 288(%rsi), %ymm9 + vmovdqu 320(%rsi), %ymm10 + vmovdqu 352(%rsi), %ymm11 + vmovdqu 384(%rsi), %ymm12 + vmovdqu 416(%rsi), %ymm13 + vmovdqu 448(%rsi), %ymm14 + vmovdqu 480(%rsi), %ymm15 + vpsubd %ymm8, %ymm0, %ymm0 + vpsubd %ymm9, %ymm1, %ymm1 + vpsubd %ymm10, %ymm2, %ymm2 + vpsubd %ymm11, %ymm3, %ymm3 + vpsubd %ymm12, %ymm4, %ymm4 + vpsubd %ymm13, %ymm5, %ymm5 + vpsubd %ymm14, %ymm6, %ymm6 + vpsubd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu %ymm4, 384(%rdi) + vmovdqu %ymm5, 416(%rdi) + vmovdqu %ymm6, 448(%rdi) + vmovdqu %ymm7, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vmovdqu 640(%rdi), %ymm4 + vmovdqu 672(%rdi), %ymm5 + vmovdqu 704(%rdi), %ymm6 + vmovdqu 736(%rdi), %ymm7 + vmovdqu 512(%rsi), %ymm8 + vmovdqu 544(%rsi), %ymm9 + vmovdqu 576(%rsi), %ymm10 + vmovdqu 608(%rsi), %ymm11 + vmovdqu 640(%rsi), %ymm12 + vmovdqu 672(%rsi), %ymm13 + vmovdqu 704(%rsi), %ymm14 + vmovdqu 736(%rsi), %ymm15 + vpsubd %ymm8, %ymm0, %ymm0 + vpsubd %ymm9, %ymm1, %ymm1 + vpsubd %ymm10, %ymm2, %ymm2 + vpsubd %ymm11, %ymm3, %ymm3 + vpsubd %ymm12, %ymm4, %ymm4 + vpsubd %ymm13, %ymm5, %ymm5 + vpsubd %ymm14, %ymm6, %ymm6 + vpsubd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu %ymm4, 640(%rdi) + vmovdqu %ymm5, 672(%rdi) + vmovdqu %ymm6, 704(%rdi) + vmovdqu %ymm7, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vmovdqu 896(%rdi), %ymm4 + vmovdqu 928(%rdi), %ymm5 + vmovdqu 960(%rdi), %ymm6 + vmovdqu 992(%rdi), %ymm7 + vmovdqu 768(%rsi), %ymm8 + vmovdqu 800(%rsi), %ymm9 + vmovdqu 832(%rsi), %ymm10 + vmovdqu 864(%rsi), %ymm11 + vmovdqu 896(%rsi), %ymm12 + vmovdqu 928(%rsi), %ymm13 + vmovdqu 960(%rsi), %ymm14 + vmovdqu 992(%rsi), %ymm15 + vpsubd %ymm8, %ymm0, %ymm0 + vpsubd %ymm9, %ymm1, %ymm1 + vpsubd %ymm10, %ymm2, %ymm2 + vpsubd %ymm11, %ymm3, %ymm3 + vpsubd %ymm12, %ymm4, %ymm4 + vpsubd %ymm13, %ymm5, %ymm5 + vpsubd %ymm14, %ymm6, %ymm6 + vpsubd %ymm15, %ymm7, %ymm7 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm3, 864(%rdi) + vmovdqu %ymm4, 896(%rdi) + vmovdqu %ymm5, 928(%rdi) + vmovdqu %ymm6, 960(%rdi) + vmovdqu %ymm7, 992(%rdi) + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_sub_avx2,.-wc_mldsa_poly_sub_avx2 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_make_pos_avx2 +.type wc_mldsa_poly_make_pos_avx2,@function +.align 16 +wc_mldsa_poly_make_pos_avx2: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_make_pos_avx2 +.p2align 4 +_wc_mldsa_poly_make_pos_avx2: +#endif /* __APPLE__ */ + vpxor %ymm8, %ymm8, %ymm8 + vmovdqu mldsa_q(%rip), %ymm9 + vmovdqu (%rdi), %ymm0 + vmovdqu 32(%rdi), %ymm1 + vmovdqu 64(%rdi), %ymm2 + vmovdqu 96(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, (%rdi) + vmovdqu %ymm1, 32(%rdi) + vmovdqu %ymm2, 64(%rdi) + vmovdqu %ymm3, 96(%rdi) + vmovdqu 128(%rdi), %ymm0 + vmovdqu 160(%rdi), %ymm1 + vmovdqu 192(%rdi), %ymm2 + vmovdqu 224(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 128(%rdi) + vmovdqu %ymm1, 160(%rdi) + vmovdqu %ymm2, 192(%rdi) + vmovdqu %ymm3, 224(%rdi) + vmovdqu 256(%rdi), %ymm0 + vmovdqu 288(%rdi), %ymm1 + vmovdqu 320(%rdi), %ymm2 + vmovdqu 352(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 256(%rdi) + vmovdqu %ymm1, 288(%rdi) + vmovdqu %ymm2, 320(%rdi) + vmovdqu %ymm3, 352(%rdi) + vmovdqu 384(%rdi), %ymm0 + vmovdqu 416(%rdi), %ymm1 + vmovdqu 448(%rdi), %ymm2 + vmovdqu 480(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 384(%rdi) + vmovdqu %ymm1, 416(%rdi) + vmovdqu %ymm2, 448(%rdi) + vmovdqu %ymm3, 480(%rdi) + vmovdqu 512(%rdi), %ymm0 + vmovdqu 544(%rdi), %ymm1 + vmovdqu 576(%rdi), %ymm2 + vmovdqu 608(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 512(%rdi) + vmovdqu %ymm1, 544(%rdi) + vmovdqu %ymm2, 576(%rdi) + vmovdqu %ymm3, 608(%rdi) + vmovdqu 640(%rdi), %ymm0 + vmovdqu 672(%rdi), %ymm1 + vmovdqu 704(%rdi), %ymm2 + vmovdqu 736(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 640(%rdi) + vmovdqu %ymm1, 672(%rdi) + vmovdqu %ymm2, 704(%rdi) + vmovdqu %ymm3, 736(%rdi) + vmovdqu 768(%rdi), %ymm0 + vmovdqu 800(%rdi), %ymm1 + vmovdqu 832(%rdi), %ymm2 + vmovdqu 864(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 768(%rdi) + vmovdqu %ymm1, 800(%rdi) + vmovdqu %ymm2, 832(%rdi) + vmovdqu %ymm3, 864(%rdi) + vmovdqu 896(%rdi), %ymm0 + vmovdqu 928(%rdi), %ymm1 + vmovdqu 960(%rdi), %ymm2 + vmovdqu 992(%rdi), %ymm3 + vpcmpgtd %ymm0, %ymm8, %ymm4 + vpcmpgtd %ymm1, %ymm8, %ymm5 + vpcmpgtd %ymm2, %ymm8, %ymm6 + vpcmpgtd %ymm3, %ymm8, %ymm7 + vpand %ymm9, %ymm4, %ymm4 + vpand %ymm9, %ymm5, %ymm5 + vpand %ymm9, %ymm6, %ymm6 + vpand %ymm9, %ymm7, %ymm7 + vpaddd %ymm4, %ymm0, %ymm0 + vpaddd %ymm5, %ymm1, %ymm1 + vpaddd %ymm6, %ymm2, %ymm2 + vpaddd %ymm7, %ymm3, %ymm3 + vmovdqu %ymm0, 896(%rdi) + vmovdqu %ymm1, 928(%rdi) + vmovdqu %ymm2, 960(%rdi) + vmovdqu %ymm3, 992(%rdi) + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_make_pos_avx2,.-wc_mldsa_poly_make_pos_avx2 +#endif /* __APPLE__ */ +#endif /* HAVE_INTEL_AVX2 */ +#endif /* WOLFSSL_HAVE_MLDSA */ +#ifdef WOLFSSL_HAVE_MLDSA +#ifndef NO_AVX512_SUPPORT +#ifndef HAVE_INTEL_AVX512 +#define HAVE_INTEL_AVX512 +#endif /* HAVE_INTEL_AVX512 */ +#endif /* NO_AVX512_SUPPORT */ +#ifdef HAVE_INTEL_AVX512 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_avx512_perm20: +.quad 0x0000000000000000,0x0000000000000001 +.quad 0x0000000000000008,0x0000000000000009 +.quad 0x0000000000000004,0x0000000000000005 +.quad 0x000000000000000c,0x000000000000000d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_avx512_perm31: +.quad 0x0000000000000002,0x0000000000000003 +.quad 0x000000000000000a,0x000000000000000b +.quad 0x0000000000000006,0x0000000000000007 +.quad 0x000000000000000e,0x000000000000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_avx512_perm21: +.quad 0x0000000000000002,0x0000000000000003 +.quad 0x0000000000000008,0x0000000000000009 +.quad 0x0000000000000006,0x0000000000000007 +.quad 0x000000000000000c,0x000000000000000d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_avx512_permn0: +.quad 0x0000000000000000,0x0000000000000001 +.quad 0x0000000000000008,0x0000000000000009 +.quad 0x0000000000000002,0x0000000000000003 +.quad 0x000000000000000a,0x000000000000000b +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_avx512_permn1: +.quad 0x0000000000000004,0x0000000000000005 +.quad 0x000000000000000c,0x000000000000000d +.quad 0x0000000000000006,0x0000000000000007 +.quad 0x000000000000000e,0x000000000000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_rej_q_avx512: +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_rej_mask_avx512: +.quad 0x007fffff007fffff,0x007fffff007fffff +.quad 0x007fffff007fffff,0x007fffff007fffff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mldsa_rej_shuffle_avx512: +.quad 0x0005040300020100,0x000b0a0900080706 +.quad 0x0009080700060504,0x000f0e0d000c0b0a +#ifndef __APPLE__ +.text +.globl wc_mldsa_rej_uniform_n_avx512 +.type wc_mldsa_rej_uniform_n_avx512,@function +.align 16 +wc_mldsa_rej_uniform_n_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_rej_uniform_n_avx512 +.p2align 4 +_wc_mldsa_rej_uniform_n_avx512: +#endif /* __APPLE__ */ + pushq %rbx + movq %rcx, %r8 + movl %esi, %eax + vbroadcasti64x4 L_mldsa_rej_q_avx512(%rip), %zmm1 + vbroadcasti64x4 L_mldsa_rej_mask_avx512(%rip), %zmm2 + vbroadcasti64x4 L_mldsa_rej_shuffle_avx512(%rip), %zmm3 +L_wc_mldsa_rej_uniform_n_avx512_start_512: + cmpl $16, %esi + jl L_wc_mldsa_rej_uniform_n_avx512_done_512 + cmpl $56, %r8d + jl L_wc_mldsa_rej_uniform_n_avx512_done_512 + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, 24(%rdx), %zmm0, %zmm0 + vpermq $0x94, %zmm0, %zmm0 + vpshufb %zmm3, %zmm0, %zmm0 + vpandd %zmm2, %zmm0, %zmm0 + vpcmpd $0x01, %zmm1, %zmm0, %k1 + vpcompressd %zmm0, (%rdi){%k1} + kmovw %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,4), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %r8d + jmp L_wc_mldsa_rej_uniform_n_avx512_start_512 +L_wc_mldsa_rej_uniform_n_avx512_done_512: + cmpl $0x00, %esi + je L_wc_mldsa_rej_uniform_n_avx512_done_64 + movq $0xffffff00ffffff, %r10 + movq $0x7fffff007fffff, %r9 +L_wc_mldsa_rej_uniform_n_avx512_start_64: + cmpl $8, %r8d + jl L_wc_mldsa_rej_uniform_n_avx512_done_64 + movq (%rdx), %rcx + pdepq %r10, %rcx, %rcx + andq %r9, %rcx + cmpl $0x7fe001, %ecx + jge L_wc_mldsa_rej_uniform_n_avx512_rej_large_0 + movl %ecx, (%rdi) + addq $4, %rdi + subl $0x01, %esi + je L_wc_mldsa_rej_uniform_n_avx512_done_64 +L_wc_mldsa_rej_uniform_n_avx512_rej_large_0: + shrq $32, %rcx + cmpl $0x7fe001, %ecx + jge L_wc_mldsa_rej_uniform_n_avx512_rej_large_1 + movl %ecx, (%rdi) + addq $4, %rdi + subl $0x01, %esi + je L_wc_mldsa_rej_uniform_n_avx512_done_64 +L_wc_mldsa_rej_uniform_n_avx512_rej_large_1: + addq $6, %rdx + subl $6, %r8d + jle L_wc_mldsa_rej_uniform_n_avx512_done_64 + cmpl $0x00, %esi + jg L_wc_mldsa_rej_uniform_n_avx512_start_64 +L_wc_mldsa_rej_uniform_n_avx512_done_64: + vzeroupper + subl %esi, %eax + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_rej_uniform_n_avx512,.-wc_mldsa_rej_uniform_n_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_rej_uniform_avx512 +.type wc_mldsa_rej_uniform_avx512,@function +.align 16 +wc_mldsa_rej_uniform_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_rej_uniform_avx512 +.p2align 4 +_wc_mldsa_rej_uniform_avx512: +#endif /* __APPLE__ */ + pushq %rbx + movq %rcx, %r8 + movl %esi, %eax + vbroadcasti64x4 L_mldsa_rej_q_avx512(%rip), %zmm1 + vbroadcasti64x4 L_mldsa_rej_mask_avx512(%rip), %zmm2 + vbroadcasti64x4 L_mldsa_rej_shuffle_avx512(%rip), %zmm3 +L_wc_mldsa_rej_uniform_avx512_start_512: + cmpl $16, %esi + jl L_wc_mldsa_rej_uniform_avx512_done_512 + cmpl $56, %r8d + jl L_wc_mldsa_rej_uniform_avx512_done_512 + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, 24(%rdx), %zmm0, %zmm0 + vpermq $0x94, %zmm0, %zmm0 + vpshufb %zmm3, %zmm0, %zmm0 + vpandd %zmm2, %zmm0, %zmm0 + vpcmpd $0x01, %zmm1, %zmm0, %k1 + vpcompressd %zmm0, (%rdi){%k1} + kmovw %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,4), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %r8d + jmp L_wc_mldsa_rej_uniform_avx512_start_512 +L_wc_mldsa_rej_uniform_avx512_done_512: + cmpl $0x00, %esi + je L_wc_mldsa_rej_uniform_avx512_done_64 + movq $0xffffff00ffffff, %r10 + movq $0x7fffff007fffff, %r9 +L_wc_mldsa_rej_uniform_avx512_start_64: + cmpl $8, %r8d + jl L_wc_mldsa_rej_uniform_avx512_done_64 + movq (%rdx), %rcx + pdepq %r10, %rcx, %rcx + andq %r9, %rcx + cmpl $0x7fe001, %ecx + jge L_wc_mldsa_rej_uniform_avx512_rej_large_0 + movl %ecx, (%rdi) + addq $4, %rdi + subl $0x01, %esi + je L_wc_mldsa_rej_uniform_avx512_done_64 +L_wc_mldsa_rej_uniform_avx512_rej_large_0: + shrq $32, %rcx + cmpl $0x7fe001, %ecx + jge L_wc_mldsa_rej_uniform_avx512_rej_large_1 + movl %ecx, (%rdi) + addq $4, %rdi + subl $0x01, %esi + je L_wc_mldsa_rej_uniform_avx512_done_64 +L_wc_mldsa_rej_uniform_avx512_rej_large_1: + addq $6, %rdx + subl $6, %r8d + jle L_wc_mldsa_rej_uniform_avx512_done_64 + cmpl $0x00, %esi + jg L_wc_mldsa_rej_uniform_avx512_start_64 +L_wc_mldsa_rej_uniform_avx512_done_64: + vzeroupper + subl %esi, %eax + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_rej_uniform_avx512,.-wc_mldsa_rej_uniform_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta2_avx512_over: +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles: +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta2_avx512_table: +.long 0x00000002,0x00000001,0x00000000,0xffffffff +.long 0xfffffffe,0x00000002,0x00000001,0x00000000 +.long 0xffffffff,0xfffffffe,0x00000002,0x00000001 +.long 0x00000000,0xffffffff,0xfffffffe,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta2_avx512_dup: +.long 0x00000000,0x00000000,0x00000001,0x00000001 +.long 0x00000002,0x00000002,0x00000003,0x00000003 +.long 0x00000004,0x00000004,0x00000005,0x00000005 +.long 0x00000006,0x00000006,0x00000007,0x00000007 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta2_avx512_shift: +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +#ifndef __APPLE__ +.text +.globl wc_mldsa_extract_coeffs_eta2_avx512 +.type wc_mldsa_extract_coeffs_eta2_avx512,@function +.align 16 +wc_mldsa_extract_coeffs_eta2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_extract_coeffs_eta2_avx512 +.p2align 4 +_wc_mldsa_extract_coeffs_eta2_avx512: +#endif /* __APPLE__ */ + pushq %rbx + vmovdqu64 L_mldsa_extract_coeffs_eta2_avx512_dup(%rip), %zmm2 + vmovdqu64 L_mldsa_extract_coeffs_eta2_avx512_shift(%rip), %zmm3 + vmovdqu64 L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles(%rip), %zmm4 + vmovdqu64 L_mldsa_extract_coeffs_eta2_avx512_over(%rip), %zmm5 + vmovdqu64 L_mldsa_extract_coeffs_eta2_avx512_table(%rip), %zmm6 + leaq L_mldsa_extract_coeffs_eta2_avx512_table(%rip), %r11 + movl (%rcx), %r8d + cmpl $0x00, %r8d + jne L_mldsa_extract_coeffs_eta2_avx512_less_than_256 + vpmovzxbd (%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 8(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 16(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 24(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 32(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 40(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 48(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 56(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 64(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 72(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 80(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 88(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 96(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 104(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 112(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 120(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + subl $0x80, %esi + addq $0x80, %rdi +L_mldsa_extract_coeffs_eta2_avx512_less_than_256: + cmpl $0xf0, %r8d + jg L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm +L_mldsa_extract_coeffs_eta2_avx512_start_one_zmm: + vpmovzxbd (%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + subl $8, %esi + addq $8, %rdi + cmpl $8, %esi + jl L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm + cmpl $0xf0, %r8d + jle L_mldsa_extract_coeffs_eta2_avx512_start_one_zmm +L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm: + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta2_avx512_done +L_mldsa_extract_coeffs_eta2_avx512_start_byte: + cmpl $0x00, %esi + je L_mldsa_extract_coeffs_eta2_avx512_done + movzbl (%rdi), %ebx + addq $0x01, %rdi + subl $0x01, %esi + movl %ebx, %eax + shrl $4, %eax + andb $15, %bl + xorq %r9, %r9 + cmpb $15, %bl + adcl $0x00, %r9d + movl (%r11,%rbx,4), %r10d + movl %r10d, (%rdx) + addl %r9d, %r8d + shll $2, %r9d + addq %r9, %rdx + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta2_avx512_done + xorq %r9, %r9 + cmpb $15, %al + adcl $0x00, %r9d + movl (%r11,%rax,4), %r10d + movl %r10d, (%rdx) + addl %r9d, %r8d + shll $2, %r9d + addq %r9, %rdx + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta2_avx512_done + jmp L_mldsa_extract_coeffs_eta2_avx512_start_byte +L_mldsa_extract_coeffs_eta2_avx512_done: + movl %r8d, (%rcx) + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_extract_coeffs_eta2_avx512,.-wc_mldsa_extract_coeffs_eta2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta4_avx512_over: +.long 0x00000009,0x00000009,0x00000009,0x00000009 +.long 0x00000009,0x00000009,0x00000009,0x00000009 +.long 0x00000009,0x00000009,0x00000009,0x00000009 +.long 0x00000009,0x00000009,0x00000009,0x00000009 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles: +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta4_avx512_table: +.long 0x00000004,0x00000003,0x00000002,0x00000001 +.long 0x00000000,0xffffffff,0xfffffffe,0xfffffffd +.long 0xfffffffc,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta4_avx512_dup: +.long 0x00000000,0x00000000,0x00000001,0x00000001 +.long 0x00000002,0x00000002,0x00000003,0x00000003 +.long 0x00000004,0x00000004,0x00000005,0x00000005 +.long 0x00000006,0x00000006,0x00000007,0x00000007 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_extract_coeffs_eta4_avx512_shift: +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000000,0x00000004,0x00000000,0x00000004 +#ifndef __APPLE__ +.text +.globl wc_mldsa_extract_coeffs_eta4_avx512 +.type wc_mldsa_extract_coeffs_eta4_avx512,@function +.align 16 +wc_mldsa_extract_coeffs_eta4_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_extract_coeffs_eta4_avx512 +.p2align 4 +_wc_mldsa_extract_coeffs_eta4_avx512: +#endif /* __APPLE__ */ + pushq %rbx + vmovdqu64 L_mldsa_extract_coeffs_eta4_avx512_dup(%rip), %zmm2 + vmovdqu64 L_mldsa_extract_coeffs_eta4_avx512_shift(%rip), %zmm3 + vmovdqu64 L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles(%rip), %zmm4 + vmovdqu64 L_mldsa_extract_coeffs_eta4_avx512_over(%rip), %zmm5 + vmovdqu64 L_mldsa_extract_coeffs_eta4_avx512_table(%rip), %zmm6 + leaq L_mldsa_extract_coeffs_eta4_avx512_table(%rip), %r11 + movl (%rcx), %r8d + cmpl $0x00, %r8d + jne L_mldsa_extract_coeffs_eta4_avx512_less_than_256 + vpmovzxbd (%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 8(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 16(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 24(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 32(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 40(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 48(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 56(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 64(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 72(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 80(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 88(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 96(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 104(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpmovzxbd 112(%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpmovzxbd 120(%rdi), %ymm1 + vpermd %zmm1, %zmm2, %zmm1 + vpsrlvd %zmm3, %zmm1, %zmm1 + vpandd %zmm4, %zmm1, %zmm1 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + vpcmpd $0x01, %zmm5, %zmm1, %k1 + vpermd %zmm6, %zmm1, %zmm1 + vpcompressd %zmm1, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + subl $0x80, %esi + addq $0x80, %rdi +L_mldsa_extract_coeffs_eta4_avx512_less_than_256: + cmpl $0xf0, %r8d + jg L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm +L_mldsa_extract_coeffs_eta4_avx512_start_one_zmm: + vpmovzxbd (%rdi), %ymm0 + vpermd %zmm0, %zmm2, %zmm0 + vpsrlvd %zmm3, %zmm0, %zmm0 + vpandd %zmm4, %zmm0, %zmm0 + vpcmpd $0x01, %zmm5, %zmm0, %k1 + vpermd %zmm6, %zmm0, %zmm0 + vpcompressd %zmm0, (%rdx){%k1} + kmovw %k1, %eax + popcntl %eax, %eax + leaq (%rdx,%rax,4), %rdx + addl %eax, %r8d + subl $8, %esi + addq $8, %rdi + cmpl $8, %esi + jl L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm + cmpl $0xf0, %r8d + jle L_mldsa_extract_coeffs_eta4_avx512_start_one_zmm +L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm: + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta4_avx512_done +L_mldsa_extract_coeffs_eta4_avx512_start_byte: + cmpl $0x00, %esi + je L_mldsa_extract_coeffs_eta4_avx512_done + movzbl (%rdi), %ebx + addq $0x01, %rdi + subl $0x01, %esi + movl %ebx, %eax + shrl $4, %eax + andb $15, %bl + xorq %r9, %r9 + cmpb $9, %bl + adcl $0x00, %r9d + movl (%r11,%rbx,4), %r10d + movl %r10d, (%rdx) + addl %r9d, %r8d + shll $2, %r9d + addq %r9, %rdx + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta4_avx512_done + xorq %r9, %r9 + cmpb $9, %al + adcl $0x00, %r9d + movl (%r11,%rax,4), %r10d + movl %r10d, (%rdx) + addl %r9d, %r8d + shll $2, %r9d + addq %r9, %rdx + cmpl $0x100, %r8d + je L_mldsa_extract_coeffs_eta4_avx512_done + jmp L_mldsa_extract_coeffs_eta4_avx512_start_byte +L_mldsa_extract_coeffs_eta4_avx512_done: + movl %r8d, (%rcx) + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_extract_coeffs_eta4_avx512,.-wc_mldsa_extract_coeffs_eta4_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_88_avx512_low: +.long 0x00017400,0x00017400,0x00017400,0x00017400 +.long 0x00017400,0x00017400,0x00017400,0x00017400 +.long 0x00017400,0x00017400,0x00017400,0x00017400 +.long 0x00017400,0x00017400,0x00017400,0x00017400 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_88_avx512_neg_low: +.long 0xfffe8c00,0xfffe8c00,0xfffe8c00,0xfffe8c00 +.long 0xfffe8c00,0xfffe8c00,0xfffe8c00,0xfffe8c00 +.long 0xfffe8c00,0xfffe8c00,0xfffe8c00,0xfffe8c00 +.long 0xfffe8c00,0xfffe8c00,0xfffe8c00,0xfffe8c00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_88_avx512_seq: +.long 0x00000000,0x00000001,0x00000002,0x00000003 +.long 0x00000004,0x00000005,0x00000006,0x00000007 +.long 0x00000008,0x00000009,0x0000000a,0x0000000b +.long 0x0000000c,0x0000000d,0x0000000e,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_88_avx512_step: +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +#ifndef __APPLE__ +.text +.globl wc_mldsa_make_hint_88_avx512 +.type wc_mldsa_make_hint_88_avx512,@function +.align 16 +wc_mldsa_make_hint_88_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_make_hint_88_avx512 +.p2align 4 +_wc_mldsa_make_hint_88_avx512: +#endif /* __APPLE__ */ + pushq %rbx + vmovdqu64 L_mldsa_make_hint_88_avx512_low(%rip), %zmm3 + vmovdqu64 L_mldsa_make_hint_88_avx512_neg_low(%rip), %zmm4 + vmovdqu64 L_mldsa_make_hint_88_avx512_seq(%rip), %zmm1 + vmovdqu64 L_mldsa_make_hint_88_avx512_step(%rip), %zmm2 + vpxord %zmm5, %zmm5, %zmm5 + xorq %rbx, %rbx + movzbl (%r8), %ebx + leaq (%rcx,%rbx,1), %rcx + vmovdqu64 (%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 (%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 64(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 64(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 128(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 128(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 192(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 192(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 256(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 256(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 320(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 320(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 384(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 384(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 448(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 448(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 512(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 512(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 576(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 576(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 640(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 640(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 704(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 704(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 768(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 768(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 832(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 832(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 896(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 896(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 960(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 960(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_88_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + movb %bl, (%r8) + xorl %eax, %eax + jmp L_mldsa_make_hint_88_avx512_done +L_mldsa_make_hint_88_avx512_too_many: + movl $-1, %eax +L_mldsa_make_hint_88_avx512_done: + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_make_hint_88_avx512,.-wc_mldsa_make_hint_88_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_32_avx512_low: +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_32_avx512_neg_low: +.long 0xfffc0100,0xfffc0100,0xfffc0100,0xfffc0100 +.long 0xfffc0100,0xfffc0100,0xfffc0100,0xfffc0100 +.long 0xfffc0100,0xfffc0100,0xfffc0100,0xfffc0100 +.long 0xfffc0100,0xfffc0100,0xfffc0100,0xfffc0100 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_32_avx512_seq: +.long 0x00000000,0x00000001,0x00000002,0x00000003 +.long 0x00000004,0x00000005,0x00000006,0x00000007 +.long 0x00000008,0x00000009,0x0000000a,0x0000000b +.long 0x0000000c,0x0000000d,0x0000000e,0x0000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_make_hint_32_avx512_step: +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +.long 0x00000010,0x00000010,0x00000010,0x00000010 +#ifndef __APPLE__ +.text +.globl wc_mldsa_make_hint_32_avx512 +.type wc_mldsa_make_hint_32_avx512,@function +.align 16 +wc_mldsa_make_hint_32_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_make_hint_32_avx512 +.p2align 4 +_wc_mldsa_make_hint_32_avx512: +#endif /* __APPLE__ */ + pushq %rbx + vmovdqu64 L_mldsa_make_hint_32_avx512_low(%rip), %zmm3 + vmovdqu64 L_mldsa_make_hint_32_avx512_neg_low(%rip), %zmm4 + vmovdqu64 L_mldsa_make_hint_32_avx512_seq(%rip), %zmm1 + vmovdqu64 L_mldsa_make_hint_32_avx512_step(%rip), %zmm2 + vpxord %zmm5, %zmm5, %zmm5 + xorq %rbx, %rbx + movzbl (%r8), %ebx + leaq (%rcx,%rbx,1), %rcx + vmovdqu64 (%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 (%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 64(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 64(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 128(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 128(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 192(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 192(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 256(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 256(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 320(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 320(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 384(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 384(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 448(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 448(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 512(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 512(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 576(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 576(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 640(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 640(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 704(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 704(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 768(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 768(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 832(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 832(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 896(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 896(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + vpaddd %zmm2, %zmm1, %zmm1 + vmovdqu64 960(%rdi), %zmm0 + vpcmpd $6, %zmm3, %zmm0, %k1 + vpcmpd $0x01, %zmm4, %zmm0, %k2 + vpcmpd $0x00, %zmm4, %zmm0, %k3 + vmovdqu64 960(%rsi), %zmm6 + vpcmpd $4, %zmm5, %zmm6, %k4 + kandw %k4, %k3, %k3 + korw %k2, %k1, %k1 + korw %k3, %k1, %k1 + vpcompressd %zmm1, %zmm0{%k1}{z} + kmovw %k1, %r9d + popcntl %r9d, %r9d + addl %r9d, %ebx + cmpl %edx, %ebx + jg L_mldsa_make_hint_32_avx512_too_many + movl $0xffffffff, %eax + bzhil %r9d, %eax, %eax + kmovw %eax, %k4 + vpmovdb %zmm0, (%rcx){%k4} + leaq (%rcx,%r9,1), %rcx + movb %bl, (%r8) + xorl %eax, %eax + jmp L_mldsa_make_hint_32_avx512_done +L_mldsa_make_hint_32_avx512_too_many: + movl $-1, %eax +L_mldsa_make_hint_32_avx512_done: + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size wc_mldsa_make_hint_32_avx512,.-wc_mldsa_make_hint_32_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_use_hint_88_avx512 +.type wc_mldsa_use_hint_88_avx512,@function +.align 16 +wc_mldsa_use_hint_88_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_use_hint_88_avx512 +.p2align 4 +_wc_mldsa_use_hint_88_avx512: +#endif /* __APPLE__ */ + pushq %r12 + movq $0x7fe001, %r12 + vmovd %r12d, %xmm3 + vpbroadcastd %xmm3, %zmm3 + movq $0x17400, %r12 + vmovd %r12d, %xmm4 + vpbroadcastd %xmm4, %zmm4 + movq $0x2e800, %r12 + vmovd %r12d, %xmm5 + vpbroadcastd %xmm5, %zmm5 + movq $0x3fefd4, %r12 + vmovd %r12d, %xmm6 + vpbroadcastd %xmm6, %zmm6 + movq $44, %r12 + vmovd %r12d, %xmm7 + vpbroadcastd %xmm7, %zmm7 + movq $0x01, %r12 + vmovd %r12d, %xmm8 + vpbroadcastd %xmm8, %zmm8 + xorq %rax, %rax + mov (%rsi), %r8b + # 1/4 vectors + mov 80(%rsi), %dl + vmovdqu64 (%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_13: +L_mldsa_use_hint_88_avx512_hints_next_0_0: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + jge L_mldsa_use_hint_88_avx512_hints_done_0_0 mov %r8b, %cl - sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + jge L_mldsa_use_hint_88_avx512_hints_done_0_0 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_13 -L_mldsa_use_hint_88_avx2_hints_done_1_13: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1856(%rdi) - vmovdqu %ymm5, 1888(%rdi) - vmovdqu 1920(%rdi), %ymm0 - vmovdqu 1952(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_0 +L_mldsa_use_hint_88_avx512_hints_done_0_0: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, (%rdi) + vmovdqu64 64(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_14: +L_mldsa_use_hint_88_avx512_hints_next_0_1: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + jge L_mldsa_use_hint_88_avx512_hints_done_0_1 mov %r8b, %cl - sub $0xe0, %cl + sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + jge L_mldsa_use_hint_88_avx512_hints_done_0_1 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_14 -L_mldsa_use_hint_88_avx2_hints_done_1_14: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1920(%rdi) - vmovdqu %ymm5, 1952(%rdi) - vmovdqu 1984(%rdi), %ymm0 - vmovdqu 2016(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_1 +L_mldsa_use_hint_88_avx512_hints_done_0_1: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 64(%rdi) + vmovdqu64 128(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_1_15: +L_mldsa_use_hint_88_avx512_hints_next_0_2: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + jge L_mldsa_use_hint_88_avx512_hints_done_0_2 mov %r8b, %cl - sub $0xf0, %cl + sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + jge L_mldsa_use_hint_88_avx512_hints_done_0_2 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_1_15 -L_mldsa_use_hint_88_avx2_hints_done_1_15: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 1984(%rdi) - vmovdqu %ymm5, 2016(%rdi) - # 3/4 vectors - mov 82(%rsi), %dl - vmovdqu 2048(%rdi), %ymm0 - vmovdqu 2080(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_2 +L_mldsa_use_hint_88_avx512_hints_done_0_2: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 192(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_0: +L_mldsa_use_hint_88_avx512_hints_next_0_3: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + jge L_mldsa_use_hint_88_avx512_hints_done_0_3 mov %r8b, %cl + sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + jge L_mldsa_use_hint_88_avx512_hints_done_0_3 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_0 -L_mldsa_use_hint_88_avx2_hints_done_2_0: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2048(%rdi) - vmovdqu %ymm5, 2080(%rdi) - vmovdqu 2112(%rdi), %ymm0 - vmovdqu 2144(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_3 +L_mldsa_use_hint_88_avx512_hints_done_0_3: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 192(%rdi) + vmovdqu64 256(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_1: +L_mldsa_use_hint_88_avx512_hints_next_0_4: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + jge L_mldsa_use_hint_88_avx512_hints_done_0_4 mov %r8b, %cl - sub $16, %cl + sub $0x40, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + jge L_mldsa_use_hint_88_avx512_hints_done_0_4 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_1 -L_mldsa_use_hint_88_avx2_hints_done_2_1: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2112(%rdi) - vmovdqu %ymm5, 2144(%rdi) - vmovdqu 2176(%rdi), %ymm0 - vmovdqu 2208(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_4 +L_mldsa_use_hint_88_avx512_hints_done_0_4: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 256(%rdi) + vmovdqu64 320(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_2: +L_mldsa_use_hint_88_avx512_hints_next_0_5: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + jge L_mldsa_use_hint_88_avx512_hints_done_0_5 mov %r8b, %cl - sub $32, %cl + sub $0x50, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + jge L_mldsa_use_hint_88_avx512_hints_done_0_5 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_2 -L_mldsa_use_hint_88_avx2_hints_done_2_2: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2176(%rdi) - vmovdqu %ymm5, 2208(%rdi) - vmovdqu 2240(%rdi), %ymm0 - vmovdqu 2272(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_5 +L_mldsa_use_hint_88_avx512_hints_done_0_5: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 320(%rdi) + vmovdqu64 384(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_3: +L_mldsa_use_hint_88_avx512_hints_next_0_6: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + jge L_mldsa_use_hint_88_avx512_hints_done_0_6 mov %r8b, %cl - sub $48, %cl + sub $0x60, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + jge L_mldsa_use_hint_88_avx512_hints_done_0_6 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_3 -L_mldsa_use_hint_88_avx2_hints_done_2_3: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2240(%rdi) - vmovdqu %ymm5, 2272(%rdi) - vmovdqu 2304(%rdi), %ymm0 - vmovdqu 2336(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_6 +L_mldsa_use_hint_88_avx512_hints_done_0_6: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 384(%rdi) + vmovdqu64 448(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_4: +L_mldsa_use_hint_88_avx512_hints_next_0_7: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + jge L_mldsa_use_hint_88_avx512_hints_done_0_7 mov %r8b, %cl - sub $0x40, %cl + sub $0x70, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + jge L_mldsa_use_hint_88_avx512_hints_done_0_7 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_4 -L_mldsa_use_hint_88_avx2_hints_done_2_4: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2304(%rdi) - vmovdqu %ymm5, 2336(%rdi) - vmovdqu 2368(%rdi), %ymm0 - vmovdqu 2400(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_7 +L_mldsa_use_hint_88_avx512_hints_done_0_7: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_0_8: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_0_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_0_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_0_8 +L_mldsa_use_hint_88_avx512_hints_done_0_8: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 512(%rdi) + vmovdqu64 576(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_0_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_0_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_0_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_0_9 +L_mldsa_use_hint_88_avx512_hints_done_0_9: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 576(%rdi) + vmovdqu64 640(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_0_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_0_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_0_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_0_10 +L_mldsa_use_hint_88_avx512_hints_done_0_10: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 704(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_0_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_0_11 + mov %r8b, %cl + sub $0xb0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_0_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_0_11 +L_mldsa_use_hint_88_avx512_hints_done_0_11: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 704(%rdi) + vmovdqu64 768(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_0_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_0_12 + mov %r8b, %cl + sub $0xc0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_0_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_0_12 +L_mldsa_use_hint_88_avx512_hints_done_0_12: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 768(%rdi) + vmovdqu64 832(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_5: +L_mldsa_use_hint_88_avx512_hints_next_0_13: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + jge L_mldsa_use_hint_88_avx512_hints_done_0_13 mov %r8b, %cl - sub $0x50, %cl + sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + jge L_mldsa_use_hint_88_avx512_hints_done_0_13 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_5 -L_mldsa_use_hint_88_avx2_hints_done_2_5: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2368(%rdi) - vmovdqu %ymm5, 2400(%rdi) - vmovdqu 2432(%rdi), %ymm0 - vmovdqu 2464(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_13 +L_mldsa_use_hint_88_avx512_hints_done_0_13: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 832(%rdi) + vmovdqu64 896(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_6: +L_mldsa_use_hint_88_avx512_hints_next_0_14: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + jge L_mldsa_use_hint_88_avx512_hints_done_0_14 mov %r8b, %cl - sub $0x60, %cl + sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + jge L_mldsa_use_hint_88_avx512_hints_done_0_14 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_6 -L_mldsa_use_hint_88_avx2_hints_done_2_6: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2432(%rdi) - vmovdqu %ymm5, 2464(%rdi) - vmovdqu 2496(%rdi), %ymm0 - vmovdqu 2528(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_14 +L_mldsa_use_hint_88_avx512_hints_done_0_14: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 896(%rdi) + vmovdqu64 960(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_7: +L_mldsa_use_hint_88_avx512_hints_next_0_15: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + jge L_mldsa_use_hint_88_avx512_hints_done_0_15 mov %r8b, %cl - sub $0x70, %cl + sub $0xf0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + jge L_mldsa_use_hint_88_avx512_hints_done_0_15 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_7 -L_mldsa_use_hint_88_avx2_hints_done_2_7: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2496(%rdi) - vmovdqu %ymm5, 2528(%rdi) - vmovdqu 2560(%rdi), %ymm0 - vmovdqu 2592(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_15 +L_mldsa_use_hint_88_avx512_hints_done_0_15: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 960(%rdi) + # 2/4 vectors + mov 81(%rsi), %dl + vmovdqu64 1024(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_8: +L_mldsa_use_hint_88_avx512_hints_next_1_0: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + jge L_mldsa_use_hint_88_avx512_hints_done_1_0 mov %r8b, %cl - sub $0x80, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + jge L_mldsa_use_hint_88_avx512_hints_done_1_0 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_8 -L_mldsa_use_hint_88_avx2_hints_done_2_8: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2560(%rdi) - vmovdqu %ymm5, 2592(%rdi) - vmovdqu 2624(%rdi), %ymm0 - vmovdqu 2656(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_0 +L_mldsa_use_hint_88_avx512_hints_done_1_0: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1024(%rdi) + vmovdqu64 1088(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_9: +L_mldsa_use_hint_88_avx512_hints_next_1_1: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + jge L_mldsa_use_hint_88_avx512_hints_done_1_1 mov %r8b, %cl - sub $0x90, %cl + sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + jge L_mldsa_use_hint_88_avx512_hints_done_1_1 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_9 -L_mldsa_use_hint_88_avx2_hints_done_2_9: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2624(%rdi) - vmovdqu %ymm5, 2656(%rdi) - vmovdqu 2688(%rdi), %ymm0 - vmovdqu 2720(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_1 +L_mldsa_use_hint_88_avx512_hints_done_1_1: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1088(%rdi) + vmovdqu64 1152(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_10: +L_mldsa_use_hint_88_avx512_hints_next_1_2: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + jge L_mldsa_use_hint_88_avx512_hints_done_1_2 mov %r8b, %cl - sub $0xa0, %cl + sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + jge L_mldsa_use_hint_88_avx512_hints_done_1_2 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_10 -L_mldsa_use_hint_88_avx2_hints_done_2_10: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2688(%rdi) - vmovdqu %ymm5, 2720(%rdi) - vmovdqu 2752(%rdi), %ymm0 - vmovdqu 2784(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_2 +L_mldsa_use_hint_88_avx512_hints_done_1_2: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1152(%rdi) + vmovdqu64 1216(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_3: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_3 + mov %r8b, %cl + sub $48, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_3 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_3 +L_mldsa_use_hint_88_avx512_hints_done_1_3: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1216(%rdi) + vmovdqu64 1280(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_4: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_4 + mov %r8b, %cl + sub $0x40, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_4 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_4 +L_mldsa_use_hint_88_avx512_hints_done_1_4: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1280(%rdi) + vmovdqu64 1344(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_5: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_5 + mov %r8b, %cl + sub $0x50, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_5 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_5 +L_mldsa_use_hint_88_avx512_hints_done_1_5: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1344(%rdi) + vmovdqu64 1408(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_6: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_6 + mov %r8b, %cl + sub $0x60, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_6 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_6 +L_mldsa_use_hint_88_avx512_hints_done_1_6: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1408(%rdi) + vmovdqu64 1472(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_7 +L_mldsa_use_hint_88_avx512_hints_done_1_7: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1472(%rdi) + vmovdqu64 1536(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_11: +L_mldsa_use_hint_88_avx512_hints_next_1_8: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + jge L_mldsa_use_hint_88_avx512_hints_done_1_8 + mov %r8b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_8 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_8 +L_mldsa_use_hint_88_avx512_hints_done_1_8: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1536(%rdi) + vmovdqu64 1600(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_9 +L_mldsa_use_hint_88_avx512_hints_done_1_9: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1600(%rdi) + vmovdqu64 1664(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_1_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_1_10 +L_mldsa_use_hint_88_avx512_hints_done_1_10: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1664(%rdi) + vmovdqu64 1728(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_1_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_1_11 mov %r8b, %cl sub $0xb0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + jge L_mldsa_use_hint_88_avx512_hints_done_1_11 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_11 -L_mldsa_use_hint_88_avx2_hints_done_2_11: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2752(%rdi) - vmovdqu %ymm5, 2784(%rdi) - vmovdqu 2816(%rdi), %ymm0 - vmovdqu 2848(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_11 +L_mldsa_use_hint_88_avx512_hints_done_1_11: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1728(%rdi) + vmovdqu64 1792(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_12: +L_mldsa_use_hint_88_avx512_hints_next_1_12: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + jge L_mldsa_use_hint_88_avx512_hints_done_1_12 mov %r8b, %cl sub $0xc0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + jge L_mldsa_use_hint_88_avx512_hints_done_1_12 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_12 -L_mldsa_use_hint_88_avx2_hints_done_2_12: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2816(%rdi) - vmovdqu %ymm5, 2848(%rdi) - vmovdqu 2880(%rdi), %ymm0 - vmovdqu 2912(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_12 +L_mldsa_use_hint_88_avx512_hints_done_1_12: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1792(%rdi) + vmovdqu64 1856(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_13: +L_mldsa_use_hint_88_avx512_hints_next_1_13: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + jge L_mldsa_use_hint_88_avx512_hints_done_1_13 mov %r8b, %cl sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + jge L_mldsa_use_hint_88_avx512_hints_done_1_13 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_13 -L_mldsa_use_hint_88_avx2_hints_done_2_13: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2880(%rdi) - vmovdqu %ymm5, 2912(%rdi) - vmovdqu 2944(%rdi), %ymm0 - vmovdqu 2976(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_13 +L_mldsa_use_hint_88_avx512_hints_done_1_13: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1856(%rdi) + vmovdqu64 1920(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_14: +L_mldsa_use_hint_88_avx512_hints_next_1_14: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_14 + jge L_mldsa_use_hint_88_avx512_hints_done_1_14 mov %r8b, %cl sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_14 + jge L_mldsa_use_hint_88_avx512_hints_done_1_14 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_14 -L_mldsa_use_hint_88_avx2_hints_done_2_14: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 2944(%rdi) - vmovdqu %ymm5, 2976(%rdi) - vmovdqu 3008(%rdi), %ymm0 - vmovdqu 3040(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_14 +L_mldsa_use_hint_88_avx512_hints_done_1_14: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1920(%rdi) + vmovdqu64 1984(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_2_15: +L_mldsa_use_hint_88_avx512_hints_next_1_15: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + jge L_mldsa_use_hint_88_avx512_hints_done_1_15 mov %r8b, %cl sub $0xf0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + jge L_mldsa_use_hint_88_avx512_hints_done_1_15 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_2_15 -L_mldsa_use_hint_88_avx2_hints_done_2_15: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3008(%rdi) - vmovdqu %ymm5, 3040(%rdi) - # 4/4 vectors - mov 83(%rsi), %dl - vmovdqu 3072(%rdi), %ymm0 - vmovdqu 3104(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_15 +L_mldsa_use_hint_88_avx512_hints_done_1_15: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 1984(%rdi) + # 3/4 vectors + mov 82(%rsi), %dl + vmovdqu64 2048(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_0: +L_mldsa_use_hint_88_avx512_hints_next_2_0: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + jge L_mldsa_use_hint_88_avx512_hints_done_2_0 mov %r8b, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + jge L_mldsa_use_hint_88_avx512_hints_done_2_0 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_0 -L_mldsa_use_hint_88_avx2_hints_done_3_0: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3072(%rdi) - vmovdqu %ymm5, 3104(%rdi) - vmovdqu 3136(%rdi), %ymm0 - vmovdqu 3168(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_0 +L_mldsa_use_hint_88_avx512_hints_done_2_0: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2048(%rdi) + vmovdqu64 2112(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_1: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_1 + mov %r8b, %cl + sub $16, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_1 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_1 +L_mldsa_use_hint_88_avx512_hints_done_2_1: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2112(%rdi) + vmovdqu64 2176(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_2: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_2 + mov %r8b, %cl + sub $32, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_2 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_2 +L_mldsa_use_hint_88_avx512_hints_done_2_2: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2176(%rdi) + vmovdqu64 2240(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_1: +L_mldsa_use_hint_88_avx512_hints_next_2_3: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_1 + jge L_mldsa_use_hint_88_avx512_hints_done_2_3 mov %r8b, %cl - sub $16, %cl + sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_1 + jge L_mldsa_use_hint_88_avx512_hints_done_2_3 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_1 -L_mldsa_use_hint_88_avx2_hints_done_3_1: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3136(%rdi) - vmovdqu %ymm5, 3168(%rdi) - vmovdqu 3200(%rdi), %ymm0 - vmovdqu 3232(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_3 +L_mldsa_use_hint_88_avx512_hints_done_2_3: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2240(%rdi) + vmovdqu64 2304(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_2: +L_mldsa_use_hint_88_avx512_hints_next_2_4: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_2 + jge L_mldsa_use_hint_88_avx512_hints_done_2_4 mov %r8b, %cl - sub $32, %cl + sub $0x40, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_2 + jge L_mldsa_use_hint_88_avx512_hints_done_2_4 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_2 -L_mldsa_use_hint_88_avx2_hints_done_3_2: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3200(%rdi) - vmovdqu %ymm5, 3232(%rdi) - vmovdqu 3264(%rdi), %ymm0 - vmovdqu 3296(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_4 +L_mldsa_use_hint_88_avx512_hints_done_2_4: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2304(%rdi) + vmovdqu64 2368(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_3: +L_mldsa_use_hint_88_avx512_hints_next_2_5: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_3 + jge L_mldsa_use_hint_88_avx512_hints_done_2_5 mov %r8b, %cl - sub $48, %cl + sub $0x50, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_3 + jge L_mldsa_use_hint_88_avx512_hints_done_2_5 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_3 -L_mldsa_use_hint_88_avx2_hints_done_3_3: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3264(%rdi) - vmovdqu %ymm5, 3296(%rdi) - vmovdqu 3328(%rdi), %ymm0 - vmovdqu 3360(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_5 +L_mldsa_use_hint_88_avx512_hints_done_2_5: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2368(%rdi) + vmovdqu64 2432(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_4: +L_mldsa_use_hint_88_avx512_hints_next_2_6: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + jge L_mldsa_use_hint_88_avx512_hints_done_2_6 mov %r8b, %cl - sub $0x40, %cl + sub $0x60, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + jge L_mldsa_use_hint_88_avx512_hints_done_2_6 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_4 -L_mldsa_use_hint_88_avx2_hints_done_3_4: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3328(%rdi) - vmovdqu %ymm5, 3360(%rdi) - vmovdqu 3392(%rdi), %ymm0 - vmovdqu 3424(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_6 +L_mldsa_use_hint_88_avx512_hints_done_2_6: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2432(%rdi) + vmovdqu64 2496(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_5: +L_mldsa_use_hint_88_avx512_hints_next_2_7: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + jge L_mldsa_use_hint_88_avx512_hints_done_2_7 mov %r8b, %cl - sub $0x50, %cl + sub $0x70, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + jge L_mldsa_use_hint_88_avx512_hints_done_2_7 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_5 -L_mldsa_use_hint_88_avx2_hints_done_3_5: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3392(%rdi) - vmovdqu %ymm5, 3424(%rdi) - vmovdqu 3456(%rdi), %ymm0 - vmovdqu 3488(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_7 +L_mldsa_use_hint_88_avx512_hints_done_2_7: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2496(%rdi) + vmovdqu64 2560(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_6: +L_mldsa_use_hint_88_avx512_hints_next_2_8: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + jge L_mldsa_use_hint_88_avx512_hints_done_2_8 mov %r8b, %cl - sub $0x60, %cl + sub $0x80, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + jge L_mldsa_use_hint_88_avx512_hints_done_2_8 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_6 -L_mldsa_use_hint_88_avx2_hints_done_3_6: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3456(%rdi) - vmovdqu %ymm5, 3488(%rdi) - vmovdqu 3520(%rdi), %ymm0 - vmovdqu 3552(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_8 +L_mldsa_use_hint_88_avx512_hints_done_2_8: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2560(%rdi) + vmovdqu64 2624(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_9: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_9 + mov %r8b, %cl + sub $0x90, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_9 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_9 +L_mldsa_use_hint_88_avx512_hints_done_2_9: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2624(%rdi) + vmovdqu64 2688(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_10: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_10 + mov %r8b, %cl + sub $0xa0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_10 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_10 +L_mldsa_use_hint_88_avx512_hints_done_2_10: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2688(%rdi) + vmovdqu64 2752(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_11 + mov %r8b, %cl + sub $0xb0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_11 +L_mldsa_use_hint_88_avx512_hints_done_2_11: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2752(%rdi) + vmovdqu64 2816(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_12 + mov %r8b, %cl + sub $0xc0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_12 +L_mldsa_use_hint_88_avx512_hints_done_2_12: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2816(%rdi) + vmovdqu64 2880(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_2_13: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_2_13 + mov %r8b, %cl + sub $0xd0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_2_13 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_2_13 +L_mldsa_use_hint_88_avx512_hints_done_2_13: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2880(%rdi) + vmovdqu64 2944(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_7: +L_mldsa_use_hint_88_avx512_hints_next_2_14: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + jge L_mldsa_use_hint_88_avx512_hints_done_2_14 mov %r8b, %cl - sub $0x70, %cl + sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + jge L_mldsa_use_hint_88_avx512_hints_done_2_14 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_7 -L_mldsa_use_hint_88_avx2_hints_done_3_7: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3520(%rdi) - vmovdqu %ymm5, 3552(%rdi) - vmovdqu 3584(%rdi), %ymm0 - vmovdqu 3616(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_14 +L_mldsa_use_hint_88_avx512_hints_done_2_14: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 2944(%rdi) + vmovdqu64 3008(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_8: +L_mldsa_use_hint_88_avx512_hints_next_2_15: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + jge L_mldsa_use_hint_88_avx512_hints_done_2_15 mov %r8b, %cl - sub $0x80, %cl + sub $0xf0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + jge L_mldsa_use_hint_88_avx512_hints_done_2_15 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_8 -L_mldsa_use_hint_88_avx2_hints_done_3_8: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3584(%rdi) - vmovdqu %ymm5, 3616(%rdi) - vmovdqu 3648(%rdi), %ymm0 - vmovdqu 3680(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_15 +L_mldsa_use_hint_88_avx512_hints_done_2_15: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3008(%rdi) + # 4/4 vectors + mov 83(%rsi), %dl + vmovdqu64 3072(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_9: +L_mldsa_use_hint_88_avx512_hints_next_3_0: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_9 + jge L_mldsa_use_hint_88_avx512_hints_done_3_0 mov %r8b, %cl - sub $0x90, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_9 + jge L_mldsa_use_hint_88_avx512_hints_done_3_0 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_9 -L_mldsa_use_hint_88_avx2_hints_done_3_9: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3648(%rdi) - vmovdqu %ymm5, 3680(%rdi) - vmovdqu 3712(%rdi), %ymm0 - vmovdqu 3744(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_0 +L_mldsa_use_hint_88_avx512_hints_done_3_0: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3072(%rdi) + vmovdqu64 3136(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_10: +L_mldsa_use_hint_88_avx512_hints_next_3_1: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_10 + jge L_mldsa_use_hint_88_avx512_hints_done_3_1 mov %r8b, %cl - sub $0xa0, %cl + sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_10 + jge L_mldsa_use_hint_88_avx512_hints_done_3_1 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_10 -L_mldsa_use_hint_88_avx2_hints_done_3_10: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3712(%rdi) - vmovdqu %ymm5, 3744(%rdi) - vmovdqu 3776(%rdi), %ymm0 - vmovdqu 3808(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_1 +L_mldsa_use_hint_88_avx512_hints_done_3_1: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3136(%rdi) + vmovdqu64 3200(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_11: +L_mldsa_use_hint_88_avx512_hints_next_3_2: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_11 + jge L_mldsa_use_hint_88_avx512_hints_done_3_2 mov %r8b, %cl - sub $0xb0, %cl + sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_11 + jge L_mldsa_use_hint_88_avx512_hints_done_3_2 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_11 -L_mldsa_use_hint_88_avx2_hints_done_3_11: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3776(%rdi) - vmovdqu %ymm5, 3808(%rdi) - vmovdqu 3840(%rdi), %ymm0 - vmovdqu 3872(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_2 +L_mldsa_use_hint_88_avx512_hints_done_3_2: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3200(%rdi) + vmovdqu64 3264(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_12: +L_mldsa_use_hint_88_avx512_hints_next_3_3: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_12 + jge L_mldsa_use_hint_88_avx512_hints_done_3_3 mov %r8b, %cl - sub $0xc0, %cl + sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_12 + jge L_mldsa_use_hint_88_avx512_hints_done_3_3 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_12 -L_mldsa_use_hint_88_avx2_hints_done_3_12: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3840(%rdi) - vmovdqu %ymm5, 3872(%rdi) - vmovdqu 3904(%rdi), %ymm0 - vmovdqu 3936(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_3 +L_mldsa_use_hint_88_avx512_hints_done_3_3: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3264(%rdi) + vmovdqu64 3328(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_4: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_4 + mov %r8b, %cl + sub $0x40, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_4 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_4 +L_mldsa_use_hint_88_avx512_hints_done_3_4: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3328(%rdi) + vmovdqu64 3392(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_5: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_5 + mov %r8b, %cl + sub $0x50, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_5 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_5 +L_mldsa_use_hint_88_avx512_hints_done_3_5: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3392(%rdi) + vmovdqu64 3456(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_6: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_6 + mov %r8b, %cl + sub $0x60, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_6 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_6 +L_mldsa_use_hint_88_avx512_hints_done_3_6: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3456(%rdi) + vmovdqu64 3520(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_7: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_7 + mov %r8b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_7 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_7 +L_mldsa_use_hint_88_avx512_hints_done_3_7: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3520(%rdi) + vmovdqu64 3584(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_13: +L_mldsa_use_hint_88_avx512_hints_next_3_8: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_13 + jge L_mldsa_use_hint_88_avx512_hints_done_3_8 mov %r8b, %cl - sub $0xd0, %cl + sub $0x80, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_13 + jge L_mldsa_use_hint_88_avx512_hints_done_3_8 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_13 -L_mldsa_use_hint_88_avx2_hints_done_3_13: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3904(%rdi) - vmovdqu %ymm5, 3936(%rdi) - vmovdqu 3968(%rdi), %ymm0 - vmovdqu 4000(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_8 +L_mldsa_use_hint_88_avx512_hints_done_3_8: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3584(%rdi) + vmovdqu64 3648(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_14: +L_mldsa_use_hint_88_avx512_hints_next_3_9: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_14 + jge L_mldsa_use_hint_88_avx512_hints_done_3_9 mov %r8b, %cl - sub $0xe0, %cl + sub $0x90, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_14 + jge L_mldsa_use_hint_88_avx512_hints_done_3_9 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_14 -L_mldsa_use_hint_88_avx2_hints_done_3_14: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 3968(%rdi) - vmovdqu %ymm5, 4000(%rdi) - vmovdqu 4032(%rdi), %ymm0 - vmovdqu 4064(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpmulld %ymm12, %ymm0, %ymm4 - vpmulld %ymm12, %ymm1, %ymm5 - vpaddd %ymm11, %ymm4, %ymm4 - vpaddd %ymm11, %ymm5, %ymm5 - vpsrld $23, %ymm4, %ymm4 - vpsrld $23, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpcmpeqd %ymm12, %ymm4, %ymm0 - vpcmpeqd %ymm12, %ymm5, %ymm1 - vpaddd %ymm0, %ymm2, %ymm2 - vpaddd %ymm1, %ymm3, %ymm3 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_9 +L_mldsa_use_hint_88_avx512_hints_done_3_9: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3648(%rdi) + vmovdqu64 3712(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} movq $0x01, %r9 xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_88_avx2_hints_next_3_15: +L_mldsa_use_hint_88_avx512_hints_next_3_10: cmp %dl, %al - jge L_mldsa_use_hint_88_avx2_hints_done_3_15 + jge L_mldsa_use_hint_88_avx512_hints_done_3_10 mov %r8b, %cl - sub $0xf0, %cl + sub $0xa0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_88_avx2_hints_done_3_15 + jge L_mldsa_use_hint_88_avx512_hints_done_3_10 mov %r9, %r11 shlq %cl, %r11 orq %r11, %r10 inc %al mov (%rsi,%rax,1), %r8b - jmp L_mldsa_use_hint_88_avx2_hints_next_3_15 -L_mldsa_use_hint_88_avx2_hints_done_3_15: - movd %r10d, %xmm6 - shr $8, %r10 - movd %r10d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpcmpgtd %ymm4, %ymm12, %ymm0 - vpcmpgtd %ymm5, %ymm12, %ymm1 - vpand %ymm0, %ymm4, %ymm4 - vpand %ymm1, %ymm5, %ymm5 - vpsrad $31, %ymm4, %ymm0 - vpsrad $31, %ymm5, %ymm1 - vpand %ymm12, %ymm0, %ymm0 - vpand %ymm12, %ymm1, %ymm1 - vpaddd %ymm0, %ymm4, %ymm4 - vpaddd %ymm1, %ymm5, %ymm5 - vmovdqu %ymm4, 4032(%rdi) - vmovdqu %ymm5, 4064(%rdi) - vzeroupper - repz retq -#ifndef __APPLE__ -.size wc_mldsa_use_hint_88_avx2,.-wc_mldsa_use_hint_88_avx2 -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_q: -.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 -.long 0x007fe001,0x007fe001,0x007fe001,0x007fe001 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_q_low_32: -.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 -.long 0x0003ff00,0x0003ff00,0x0003ff00,0x0003ff00 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_q_low_32_2: -.long 0x0007fe00,0x0007fe00,0x0007fe00,0x0007fe00 -.long 0x0007fe00,0x0007fe00,0x0007fe00,0x0007fe00 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_q_low_32_m1: -.long 0x0003feff,0x0003feff,0x0003feff,0x0003feff -.long 0x0003feff,0x0003feff,0x0003feff,0x0003feff -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_mask: -.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f -.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_vsl: -.long 0x0000001f,0x0000001e,0x0000001d,0x0000001c -.long 0x0000001b,0x0000001a,0x00000019,0x00000018 -#ifndef __APPLE__ -.data -#else -.section __DATA,__data -#endif /* __APPLE__ */ -#ifndef __APPLE__ -.align 16 -#else -.p2align 4 -#endif /* __APPLE__ */ -L_mldsa_use_hint_32_avx2_one: -.long 0x00000001,0x00000001,0x00000001,0x00000001 -.long 0x00000001,0x00000001,0x00000001,0x00000001 -#ifndef __APPLE__ -.text -.globl wc_mldsa_use_hint_32_avx2 -.type wc_mldsa_use_hint_32_avx2,@function -.align 16 -wc_mldsa_use_hint_32_avx2: -#else -.section __TEXT,__text -.globl _wc_mldsa_use_hint_32_avx2 -.p2align 4 -_wc_mldsa_use_hint_32_avx2: -#endif /* __APPLE__ */ - pushq %r12 - pushq %r13 - vpxor %ymm8, %ymm8, %ymm8 - vmovdqu L_mldsa_use_hint_32_avx2_q(%rip), %ymm8 - vmovdqu L_mldsa_use_hint_32_avx2_q_low_32(%rip), %ymm9 - vmovdqu L_mldsa_use_hint_32_avx2_q_low_32_2(%rip), %ymm10 - vmovdqu L_mldsa_use_hint_32_avx2_q_low_32_m1(%rip), %ymm11 - vmovdqu L_mldsa_use_hint_32_avx2_mask(%rip), %ymm12 - vmovdqu L_mldsa_use_hint_32_avx2_vsl(%rip), %ymm13 - vmovdqu L_mldsa_use_hint_32_avx2_one(%rip), %ymm14 - xorq %r8, %r8 - mov (%rdx), %r9b - imulq $10, %rsi, %r13 - subq $5, %r13 -L_mldsa_use_hint_32_avx2_start_256: - mov (%rdx,%r13,1), %al - incq %r13 - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - movq $0x01, %r10 - xorq %r11, %r11 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_10 +L_mldsa_use_hint_88_avx512_hints_done_3_10: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3712(%rdi) + vmovdqu64 3776(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__0: - cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__0 - mov %r9b, %cl +L_mldsa_use_hint_88_avx512_hints_next_3_11: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_11 + mov %r8b, %cl + sub $0xb0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__0 - mov %r10, %r12 - shlq %cl, %r12 - orq %r12, %r11 - inc %r8b - mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__0 -L_mldsa_use_hint_32_avx2_hints_done__0: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, (%rdi) - vmovdqu %ymm5, 32(%rdi) - vmovdqu 64(%rdi), %ymm0 - vmovdqu 96(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - movq $0x01, %r10 - xorq %r11, %r11 + jge L_mldsa_use_hint_88_avx512_hints_done_3_11 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_11 +L_mldsa_use_hint_88_avx512_hints_done_3_11: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3776(%rdi) + vmovdqu64 3840(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__1: - cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__1 - mov %r9b, %cl - sub $16, %cl +L_mldsa_use_hint_88_avx512_hints_next_3_12: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_12 + mov %r8b, %cl + sub $0xc0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__1 - mov %r10, %r12 - shlq %cl, %r12 - orq %r12, %r11 - inc %r8b - mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__1 -L_mldsa_use_hint_32_avx2_hints_done__1: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 64(%rdi) - vmovdqu %ymm5, 96(%rdi) - vmovdqu 128(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jge L_mldsa_use_hint_88_avx512_hints_done_3_12 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_12 +L_mldsa_use_hint_88_avx512_hints_done_3_12: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3840(%rdi) + vmovdqu64 3904(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_13: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_13 + mov %r8b, %cl + sub $0xd0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_13 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_13 +L_mldsa_use_hint_88_avx512_hints_done_3_13: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3904(%rdi) + vmovdqu64 3968(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_14: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_14 + mov %r8b, %cl + sub $0xe0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_14 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_14 +L_mldsa_use_hint_88_avx512_hints_done_3_14: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 3968(%rdi) + vmovdqu64 4032(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm7, %zmm0, %zmm2 + vpaddd %zmm6, %zmm2, %zmm2 + vpsrld $23, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpcmpeqd %zmm7, %zmm2, %k2 + vpsubd %zmm8, %zmm1, %zmm1{%k2} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + movq $0x01, %r9 + xorq %r10, %r10 + xorq %rcx, %rcx +L_mldsa_use_hint_88_avx512_hints_next_3_15: + cmp %dl, %al + jge L_mldsa_use_hint_88_avx512_hints_done_3_15 + mov %r8b, %cl + sub $0xf0, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_88_avx512_hints_done_3_15 + mov %r9, %r11 + shlq %cl, %r11 + orq %r11, %r10 + inc %al + mov (%rsi,%rax,1), %r8b + jmp L_mldsa_use_hint_88_avx512_hints_next_3_15 +L_mldsa_use_hint_88_avx512_hints_done_3_15: + kmovw %r10d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpcmpgtd %zmm2, %zmm7, %k3 + vmovdqa32 %zmm2, %zmm2{%k3}{z} + vpsrad $31, %zmm2, %zmm0 + vpandd %zmm7, %zmm0, %zmm0 + vpaddd %zmm0, %zmm2, %zmm2 + vmovdqu64 %zmm2, 4032(%rdi) + vzeroupper + popq %r12 + repz retq +#ifndef __APPLE__ +.size wc_mldsa_use_hint_88_avx512,.-wc_mldsa_use_hint_88_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_use_hint_32_avx512 +.type wc_mldsa_use_hint_32_avx512,@function +.align 16 +wc_mldsa_use_hint_32_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_use_hint_32_avx512 +.p2align 4 +_wc_mldsa_use_hint_32_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movq $0x7fe001, %r14 + vmovd %r14d, %xmm3 + vpbroadcastd %xmm3, %zmm3 + movq $0x3ff00, %r14 + vmovd %r14d, %xmm4 + vpbroadcastd %xmm4, %zmm4 + movq $0x7fe00, %r14 + vmovd %r14d, %xmm5 + vpbroadcastd %xmm5, %zmm5 + movq $0x3feff, %r14 + vmovd %r14d, %xmm6 + vpbroadcastd %xmm6, %zmm6 + movq $15, %r14 + vmovd %r14d, %xmm7 + vpbroadcastd %xmm7, %zmm7 + movq $0x01, %r14 + vmovd %r14d, %xmm8 + vpbroadcastd %xmm8, %zmm8 + xorq %r8, %r8 + mov (%rdx), %r9b + imulq $10, %rsi, %r13 + subq $5, %r13 +L_mldsa_use_hint_32_avx512_start_256: + mov (%rdx,%r13,1), %al + incq %r13 + vmovdqu64 (%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__2: +L_mldsa_use_hint_32_avx512_hints_next_0: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__2 + jge L_mldsa_use_hint_32_avx512_hints_done_0 mov %r9b, %cl - sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__2 + jge L_mldsa_use_hint_32_avx512_hints_done_0 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__2 -L_mldsa_use_hint_32_avx2_hints_done__2: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu 192(%rdi), %ymm0 - vmovdqu 224(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_0 +L_mldsa_use_hint_32_avx512_hints_done_0: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, (%rdi) + vmovdqu64 64(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__3: +L_mldsa_use_hint_32_avx512_hints_next_1: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__3 + jge L_mldsa_use_hint_32_avx512_hints_done_1 mov %r9b, %cl - sub $48, %cl + sub $16, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__3 + jge L_mldsa_use_hint_32_avx512_hints_done_1 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__3 -L_mldsa_use_hint_32_avx2_hints_done__3: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 192(%rdi) - vmovdqu %ymm5, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_1 +L_mldsa_use_hint_32_avx512_hints_done_1: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 64(%rdi) + vmovdqu64 128(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__4: +L_mldsa_use_hint_32_avx512_hints_next_2: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__4 + jge L_mldsa_use_hint_32_avx512_hints_done_2 mov %r9b, %cl - sub $0x40, %cl + sub $32, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__4 + jge L_mldsa_use_hint_32_avx512_hints_done_2 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__4 -L_mldsa_use_hint_32_avx2_hints_done__4: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 256(%rdi) - vmovdqu %ymm5, 288(%rdi) - vmovdqu 320(%rdi), %ymm0 - vmovdqu 352(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_2 +L_mldsa_use_hint_32_avx512_hints_done_2: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 192(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__5: +L_mldsa_use_hint_32_avx512_hints_next_3: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__5 + jge L_mldsa_use_hint_32_avx512_hints_done_3 mov %r9b, %cl - sub $0x50, %cl + sub $48, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__5 + jge L_mldsa_use_hint_32_avx512_hints_done_3 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__5 -L_mldsa_use_hint_32_avx2_hints_done__5: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 320(%rdi) - vmovdqu %ymm5, 352(%rdi) - vmovdqu 384(%rdi), %ymm0 - vmovdqu 416(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_3 +L_mldsa_use_hint_32_avx512_hints_done_3: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 192(%rdi) + vmovdqu64 256(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__6: +L_mldsa_use_hint_32_avx512_hints_next_4: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__6 + jge L_mldsa_use_hint_32_avx512_hints_done_4 mov %r9b, %cl - sub $0x60, %cl + sub $0x40, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__6 + jge L_mldsa_use_hint_32_avx512_hints_done_4 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__6 -L_mldsa_use_hint_32_avx2_hints_done__6: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu 448(%rdi), %ymm0 - vmovdqu 480(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_4 +L_mldsa_use_hint_32_avx512_hints_done_4: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 256(%rdi) + vmovdqu64 320(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__7: +L_mldsa_use_hint_32_avx512_hints_next_5: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__7 + jge L_mldsa_use_hint_32_avx512_hints_done_5 mov %r9b, %cl - sub $0x70, %cl + sub $0x50, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__7 + jge L_mldsa_use_hint_32_avx512_hints_done_5 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__7 -L_mldsa_use_hint_32_avx2_hints_done__7: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 448(%rdi) - vmovdqu %ymm5, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_5 +L_mldsa_use_hint_32_avx512_hints_done_5: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 320(%rdi) + vmovdqu64 384(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__8: +L_mldsa_use_hint_32_avx512_hints_next_6: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__8 + jge L_mldsa_use_hint_32_avx512_hints_done_6 mov %r9b, %cl - sub $0x80, %cl + sub $0x60, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__8 - mov %r10, %r12 - shlq %cl, %r12 - orq %r12, %r11 - inc %r8b - mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__8 -L_mldsa_use_hint_32_avx2_hints_done__8: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 512(%rdi) - vmovdqu %ymm5, 544(%rdi) - vmovdqu 576(%rdi), %ymm0 - vmovdqu 608(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jge L_mldsa_use_hint_32_avx512_hints_done_6 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx512_hints_next_6 +L_mldsa_use_hint_32_avx512_hints_done_6: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 384(%rdi) + vmovdqu64 448(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__9: +L_mldsa_use_hint_32_avx512_hints_next_7: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__9 + jge L_mldsa_use_hint_32_avx512_hints_done_7 + mov %r9b, %cl + sub $0x70, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_32_avx512_hints_done_7 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx512_hints_next_7 +L_mldsa_use_hint_32_avx512_hints_done_7: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 + movq $0x01, %r10 + xorq %r11, %r11 + xorq %rcx, %rcx +L_mldsa_use_hint_32_avx512_hints_next_8: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx512_hints_done_8 + mov %r9b, %cl + sub $0x80, %cl + cmpq $16, %rcx + jge L_mldsa_use_hint_32_avx512_hints_done_8 + mov %r10, %r12 + shlq %cl, %r12 + orq %r12, %r11 + inc %r8b + mov (%rdx,%r8,1), %r9b + jmp L_mldsa_use_hint_32_avx512_hints_next_8 +L_mldsa_use_hint_32_avx512_hints_done_8: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 512(%rdi) + vmovdqu64 576(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 + movq $0x01, %r10 + xorq %r11, %r11 + xorq %rcx, %rcx +L_mldsa_use_hint_32_avx512_hints_next_9: + cmp %al, %r8b + jge L_mldsa_use_hint_32_avx512_hints_done_9 mov %r9b, %cl sub $0x90, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__9 + jge L_mldsa_use_hint_32_avx512_hints_done_9 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__9 -L_mldsa_use_hint_32_avx2_hints_done__9: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 576(%rdi) - vmovdqu %ymm5, 608(%rdi) - vmovdqu 640(%rdi), %ymm0 - vmovdqu 672(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_9 +L_mldsa_use_hint_32_avx512_hints_done_9: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 576(%rdi) + vmovdqu64 640(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__10: +L_mldsa_use_hint_32_avx512_hints_next_10: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__10 + jge L_mldsa_use_hint_32_avx512_hints_done_10 mov %r9b, %cl sub $0xa0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__10 + jge L_mldsa_use_hint_32_avx512_hints_done_10 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__10 -L_mldsa_use_hint_32_avx2_hints_done__10: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu 704(%rdi), %ymm0 - vmovdqu 736(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_10 +L_mldsa_use_hint_32_avx512_hints_done_10: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 704(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__11: +L_mldsa_use_hint_32_avx512_hints_next_11: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__11 + jge L_mldsa_use_hint_32_avx512_hints_done_11 mov %r9b, %cl sub $0xb0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__11 + jge L_mldsa_use_hint_32_avx512_hints_done_11 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__11 -L_mldsa_use_hint_32_avx2_hints_done__11: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 704(%rdi) - vmovdqu %ymm5, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_11 +L_mldsa_use_hint_32_avx512_hints_done_11: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 704(%rdi) + vmovdqu64 768(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__12: +L_mldsa_use_hint_32_avx512_hints_next_12: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__12 + jge L_mldsa_use_hint_32_avx512_hints_done_12 mov %r9b, %cl sub $0xc0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__12 + jge L_mldsa_use_hint_32_avx512_hints_done_12 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__12 -L_mldsa_use_hint_32_avx2_hints_done__12: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 768(%rdi) - vmovdqu %ymm5, 800(%rdi) - vmovdqu 832(%rdi), %ymm0 - vmovdqu 864(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_12 +L_mldsa_use_hint_32_avx512_hints_done_12: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 768(%rdi) + vmovdqu64 832(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__13: +L_mldsa_use_hint_32_avx512_hints_next_13: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__13 + jge L_mldsa_use_hint_32_avx512_hints_done_13 mov %r9b, %cl sub $0xd0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__13 + jge L_mldsa_use_hint_32_avx512_hints_done_13 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__13 -L_mldsa_use_hint_32_avx2_hints_done__13: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 832(%rdi) - vmovdqu %ymm5, 864(%rdi) - vmovdqu 896(%rdi), %ymm0 - vmovdqu 928(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_13 +L_mldsa_use_hint_32_avx512_hints_done_13: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 832(%rdi) + vmovdqu64 896(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__14: +L_mldsa_use_hint_32_avx512_hints_next_14: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__14 + jge L_mldsa_use_hint_32_avx512_hints_done_14 mov %r9b, %cl sub $0xe0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__14 + jge L_mldsa_use_hint_32_avx512_hints_done_14 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__14 -L_mldsa_use_hint_32_avx2_hints_done__14: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu 960(%rdi), %ymm0 - vmovdqu 992(%rdi), %ymm1 - vpsrad $31, %ymm0, %ymm2 - vpsrad $31, %ymm1, %ymm3 - vpand %ymm8, %ymm2, %ymm2 - vpand %ymm8, %ymm3, %ymm3 - vpaddd %ymm2, %ymm0, %ymm0 - vpaddd %ymm3, %ymm1, %ymm1 - vpaddd %ymm11, %ymm0, %ymm4 - vpaddd %ymm11, %ymm1, %ymm5 - vpsrld $19, %ymm4, %ymm4 - vpsrld $19, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsubd %ymm2, %ymm9, %ymm2 - vpsubd %ymm3, %ymm9, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpmulld %ymm10, %ymm4, %ymm2 - vpmulld %ymm10, %ymm5, %ymm3 - vpsubd %ymm2, %ymm0, %ymm2 - vpsubd %ymm3, %ymm1, %ymm3 - vpsrld $4, %ymm4, %ymm0 - vpsrld $4, %ymm5, %ymm1 - vpsubd %ymm0, %ymm2, %ymm2 - vpsubd %ymm1, %ymm3, %ymm3 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_14 +L_mldsa_use_hint_32_avx512_hints_done_14: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 896(%rdi) + vmovdqu64 960(%rdi), %zmm0 + vpsrad $31, %zmm0, %zmm1 + vpandd %zmm3, %zmm1, %zmm1 + vpaddd %zmm1, %zmm0, %zmm0 + vpaddd %zmm6, %zmm0, %zmm2 + vpsrld $19, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm4, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2 + vpmulld %zmm5, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsrld $4, %zmm2, %zmm0 + vpsubd %zmm0, %zmm1, %zmm1 + vpandd %zmm7, %zmm2, %zmm2 movq $0x01, %r10 xorq %r11, %r11 xorq %rcx, %rcx -L_mldsa_use_hint_32_avx2_hints_next__15: +L_mldsa_use_hint_32_avx512_hints_next_15: cmp %al, %r8b - jge L_mldsa_use_hint_32_avx2_hints_done__15 + jge L_mldsa_use_hint_32_avx512_hints_done_15 mov %r9b, %cl sub $0xf0, %cl cmpq $16, %rcx - jge L_mldsa_use_hint_32_avx2_hints_done__15 + jge L_mldsa_use_hint_32_avx512_hints_done_15 mov %r10, %r12 shlq %cl, %r12 orq %r12, %r11 inc %r8b mov (%rdx,%r8,1), %r9b - jmp L_mldsa_use_hint_32_avx2_hints_next__15 -L_mldsa_use_hint_32_avx2_hints_done__15: - movd %r11d, %xmm6 - shr $8, %r11 - movd %r11d, %xmm7 - vpbroadcastd %xmm6, %ymm6 - vpbroadcastd %xmm7, %ymm7 - vpsllvd %ymm13, %ymm6, %ymm6 - vpsllvd %ymm13, %ymm7, %ymm7 - vpsrad $31, %ymm6, %ymm6 - vpsrad $31, %ymm7, %ymm7 - vpsubd %ymm14, %ymm2, %ymm2 - vpsubd %ymm14, %ymm3, %ymm3 - vpsrld $31, %ymm2, %ymm2 - vpsrld $31, %ymm3, %ymm3 - vpslld $0x01, %ymm2, %ymm2 - vpslld $0x01, %ymm3, %ymm3 - vpsubd %ymm2, %ymm14, %ymm2 - vpsubd %ymm3, %ymm14, %ymm3 - vpand %ymm6, %ymm2, %ymm2 - vpand %ymm7, %ymm3, %ymm3 - vpaddd %ymm2, %ymm4, %ymm4 - vpaddd %ymm3, %ymm5, %ymm5 - vpand %ymm12, %ymm4, %ymm4 - vpand %ymm12, %ymm5, %ymm5 - vmovdqu %ymm4, 960(%rdi) - vmovdqu %ymm5, 992(%rdi) + jmp L_mldsa_use_hint_32_avx512_hints_next_15 +L_mldsa_use_hint_32_avx512_hints_done_15: + kmovw %r11d, %k1 + vpsubd %zmm8, %zmm1, %zmm1 + vpsrld $31, %zmm1, %zmm1 + vpslld $0x01, %zmm1, %zmm1 + vpsubd %zmm1, %zmm8, %zmm1 + vpaddd %zmm1, %zmm2, %zmm2{%k1} + vpandd %zmm7, %zmm2, %zmm2 + vmovdqu64 %zmm2, 960(%rdi) + addq $0x400, %rdi + sub $0x01, %rsi + jne L_mldsa_use_hint_32_avx512_start_256 + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size wc_mldsa_use_hint_32_avx512,.-wc_mldsa_use_hint_32_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_redistribute_21_rand_x8_avx512 +.type wc_mldsa_redistribute_21_rand_x8_avx512,@function +.align 16 +wc_mldsa_redistribute_21_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_redistribute_21_rand_x8_avx512 +.p2align 4 +_wc_mldsa_redistribute_21_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, 64(%rsi) + vmovdqu64 %zmm1, 64(%rax) + vmovdqu64 %zmm2, 64(%rcx) + vmovdqu64 %zmm3, 64(%r8) + vmovdqu64 %zmm4, 64(%r9) + vmovdqu64 %zmm5, 64(%r10) + vmovdqu64 %zmm6, 64(%r11) + vmovdqu64 %zmm7, 64(%r12) + movq 1024(%rdi), %r14 + movq %r14, 128(%rsi) + movq 1032(%rdi), %r14 + movq %r14, 128(%rax) + movq 1040(%rdi), %r14 + movq %r14, 128(%rcx) + movq 1048(%rdi), %r14 + movq %r14, 128(%r8) + movq 1056(%rdi), %r14 + movq %r14, 128(%r9) + movq 1064(%rdi), %r14 + movq %r14, 128(%r10) + movq 1072(%rdi), %r14 + movq %r14, 128(%r11) + movq 1080(%rdi), %r14 + movq %r14, 128(%r12) + movq 1088(%rdi), %r14 + movq %r14, 136(%rsi) + movq 1096(%rdi), %r14 + movq %r14, 136(%rax) + movq 1104(%rdi), %r14 + movq %r14, 136(%rcx) + movq 1112(%rdi), %r14 + movq %r14, 136(%r8) + movq 1120(%rdi), %r14 + movq %r14, 136(%r9) + movq 1128(%rdi), %r14 + movq %r14, 136(%r10) + movq 1136(%rdi), %r14 + movq %r14, 136(%r11) + movq 1144(%rdi), %r14 + movq %r14, 136(%r12) + movq 1152(%rdi), %r14 + movq %r14, 144(%rsi) + movq 1160(%rdi), %r14 + movq %r14, 144(%rax) + movq 1168(%rdi), %r14 + movq %r14, 144(%rcx) + movq 1176(%rdi), %r14 + movq %r14, 144(%r8) + movq 1184(%rdi), %r14 + movq %r14, 144(%r9) + movq 1192(%rdi), %r14 + movq %r14, 144(%r10) + movq 1200(%rdi), %r14 + movq %r14, 144(%r11) + movq 1208(%rdi), %r14 + movq %r14, 144(%r12) + movq 1216(%rdi), %r14 + movq %r14, 152(%rsi) + movq 1224(%rdi), %r14 + movq %r14, 152(%rax) + movq 1232(%rdi), %r14 + movq %r14, 152(%rcx) + movq 1240(%rdi), %r14 + movq %r14, 152(%r8) + movq 1248(%rdi), %r14 + movq %r14, 152(%r9) + movq 1256(%rdi), %r14 + movq %r14, 152(%r10) + movq 1264(%rdi), %r14 + movq %r14, 152(%r11) + movq 1272(%rdi), %r14 + movq %r14, 152(%r12) + movq 1280(%rdi), %r14 + movq %r14, 160(%rsi) + movq 1288(%rdi), %r14 + movq %r14, 160(%rax) + movq 1296(%rdi), %r14 + movq %r14, 160(%rcx) + movq 1304(%rdi), %r14 + movq %r14, 160(%r8) + movq 1312(%rdi), %r14 + movq %r14, 160(%r9) + movq 1320(%rdi), %r14 + movq %r14, 160(%r10) + movq 1328(%rdi), %r14 + movq %r14, 160(%r11) + movq 1336(%rdi), %r14 + movq %r14, 160(%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size wc_mldsa_redistribute_21_rand_x8_avx512,.-wc_mldsa_redistribute_21_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_redistribute_17_rand_x8_avx512 +.type wc_mldsa_redistribute_17_rand_x8_avx512,@function +.align 16 +wc_mldsa_redistribute_17_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_redistribute_17_rand_x8_avx512 +.p2align 4 +_wc_mldsa_redistribute_17_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, 64(%rsi) + vmovdqu64 %zmm1, 64(%rax) + vmovdqu64 %zmm2, 64(%rcx) + vmovdqu64 %zmm3, 64(%r8) + vmovdqu64 %zmm4, 64(%r9) + vmovdqu64 %zmm5, 64(%r10) + vmovdqu64 %zmm6, 64(%r11) + vmovdqu64 %zmm7, 64(%r12) + movq 1024(%rdi), %r14 + movq %r14, 128(%rsi) + movq 1032(%rdi), %r14 + movq %r14, 128(%rax) + movq 1040(%rdi), %r14 + movq %r14, 128(%rcx) + movq 1048(%rdi), %r14 + movq %r14, 128(%r8) + movq 1056(%rdi), %r14 + movq %r14, 128(%r9) + movq 1064(%rdi), %r14 + movq %r14, 128(%r10) + movq 1072(%rdi), %r14 + movq %r14, 128(%r11) + movq 1080(%rdi), %r14 + movq %r14, 128(%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size wc_mldsa_redistribute_17_rand_x8_avx512,.-wc_mldsa_redistribute_17_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_shuff_0: +.byte 0x00,0x01,0x02,0xff,0x02,0x03,0x04,0xff +.byte 0x04,0x05,0x06,0xff,0x06,0x07,0x08,0xff +.byte 0xff,0x01,0x02,0x03,0xff,0x03,0x04,0x05 +.byte 0xff,0x05,0x06,0x07,0xff,0x07,0x08,0x09 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_shuff_1: +.byte 0x02,0x03,0x04,0xff,0x04,0x05,0x06,0xff +.byte 0x06,0x07,0x08,0xff,0x08,0x09,0x0a,0xff +.byte 0xff,0x03,0x04,0x05,0xff,0x05,0x06,0x07 +.byte 0xff,0x07,0x08,0x09,0xff,0x09,0x0a,0x0b +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_shuff_2: +.byte 0x04,0x05,0x06,0xff,0x06,0x07,0x08,0xff +.byte 0x08,0x09,0x0a,0xff,0x0a,0x0b,0x0c,0xff +.byte 0xff,0x05,0x06,0x07,0xff,0x07,0x08,0x09 +.byte 0xff,0x09,0x0a,0x0b,0xff,0x0b,0x0c,0x0d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_shuff_3: +.byte 0x06,0x07,0x08,0xff,0x08,0x09,0x0a,0xff +.byte 0x0a,0x0b,0x0c,0xff,0x0c,0x0d,0x0e,0xff +.byte 0xff,0x07,0x08,0x09,0xff,0x09,0x0a,0x0b +.byte 0xff,0x0b,0x0c,0x0d,0xff,0x0d,0x0e,0x0f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_vs_8: +.long 0x00000000,0x00000002,0x00000004,0x00000006 +.long 0x00000008,0x0000000a,0x0000000c,0x0000000e +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_mask: +.long 0x0003ffff,0x0003ffff,0x0003ffff,0x0003ffff +.long 0x0003ffff,0x0003ffff,0x0003ffff,0x0003ffff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_17_x2_avx512_gamma17: +.long 0x00020000,0x00020000,0x00020000,0x00020000 +.long 0x00020000,0x00020000,0x00020000,0x00020000 +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_gamma1_17_x2_avx512 +.type wc_mldsa_decode_gamma1_17_x2_avx512,@function +.align 16 +wc_mldsa_decode_gamma1_17_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_gamma1_17_x2_avx512 +.p2align 4 +_wc_mldsa_decode_gamma1_17_x2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_avx512_perm21(%rip), %zmm14 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_shuff_0(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_shuff_1(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_shuff_2(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_shuff_3(%rip), %zmm10 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_vs_8(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_mask(%rip), %zmm12 + vbroadcasti64x4 L_mldsa_decode_gamma1_17_x2_avx512_gamma17(%rip), %zmm13 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vmovdqu64 128(%rdi), %ymm4 + vinserti64x4 $0x01, 128(%rsi), %zmm4, %zmm4 + vmovdqu64 160(%rdi), %ymm5 + vinserti64x4 $0x01, 160(%rsi), %zmm5, %zmm5 + # 0/15 + vpermq $0x94, %zmm0, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, (%rdx) + vextracti64x4 $0x01, %zmm6, (%rcx) + # 1/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm1, %zmm0, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 32(%rdx) + vextracti64x4 $0x01, %zmm6, 32(%rcx) + # 2/15 + vpermq $0x94, %zmm1, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 64(%rdx) + vextracti64x4 $0x01, %zmm6, 64(%rcx) + # 3/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm2, %zmm1, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 96(%rdx) + vextracti64x4 $0x01, %zmm6, 96(%rcx) + # 4/15 + vpermq $0xe9, %zmm2, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 128(%rdx) + vextracti64x4 $0x01, %zmm6, 128(%rcx) + # 5/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm3, %zmm2, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 160(%rdx) + vextracti64x4 $0x01, %zmm6, 160(%rcx) + # 6/15 + vpermq $0xe9, %zmm3, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 192(%rdx) + vextracti64x4 $0x01, %zmm6, 192(%rcx) + # 7/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm4, %zmm3, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 224(%rdx) + vextracti64x4 $0x01, %zmm6, 224(%rcx) + # 8/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm5, %zmm4, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 256(%rdx) + vextracti64x4 $0x01, %zmm6, 256(%rcx) + # 9/15 + vpermq $0x94, %zmm5, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 288(%rdx) + vextracti64x4 $0x01, %zmm6, 288(%rcx) + vmovdqu64 192(%rdi), %ymm0 + vinserti64x4 $0x01, 192(%rsi), %zmm0, %zmm0 + vmovdqu64 224(%rdi), %ymm1 + vinserti64x4 $0x01, 224(%rsi), %zmm1, %zmm1 + vmovdqu64 256(%rdi), %ymm2 + vinserti64x4 $0x01, 256(%rsi), %zmm2, %zmm2 + # 10/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm0, %zmm5, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 320(%rdx) + vextracti64x4 $0x01, %zmm6, 320(%rcx) + # 11/15 + vpermq $0x94, %zmm0, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 352(%rdx) + vextracti64x4 $0x01, %zmm6, 352(%rcx) + # 12/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm1, %zmm0, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 384(%rdx) + vextracti64x4 $0x01, %zmm6, 384(%rcx) + # 13/15 + vpermq $0xe9, %zmm1, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 416(%rdx) + vextracti64x4 $0x01, %zmm6, 416(%rcx) + # 14/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm2, %zmm1, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 448(%rdx) + vextracti64x4 $0x01, %zmm6, 448(%rcx) + # 15/15 + vpermq $0xe9, %zmm2, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 480(%rdx) + vextracti64x4 $0x01, %zmm6, 480(%rcx) + vmovdqu64 288(%rdi), %ymm0 + vinserti64x4 $0x01, 288(%rsi), %zmm0, %zmm0 + vmovdqu64 320(%rdi), %ymm1 + vinserti64x4 $0x01, 320(%rsi), %zmm1, %zmm1 + vmovdqu64 352(%rdi), %ymm2 + vinserti64x4 $0x01, 352(%rsi), %zmm2, %zmm2 + vmovdqu64 384(%rdi), %ymm3 + vinserti64x4 $0x01, 384(%rsi), %zmm3, %zmm3 + vmovdqu64 416(%rdi), %ymm4 + vinserti64x4 $0x01, 416(%rsi), %zmm4, %zmm4 + vmovdqu64 448(%rdi), %ymm5 + vinserti64x4 $0x01, 448(%rsi), %zmm5, %zmm5 + # 0/15 + vpermq $0x94, %zmm0, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 512(%rdx) + vextracti64x4 $0x01, %zmm6, 512(%rcx) + # 1/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm1, %zmm0, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 544(%rdx) + vextracti64x4 $0x01, %zmm6, 544(%rcx) + # 2/15 + vpermq $0x94, %zmm1, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 576(%rdx) + vextracti64x4 $0x01, %zmm6, 576(%rcx) + # 3/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm2, %zmm1, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 608(%rdx) + vextracti64x4 $0x01, %zmm6, 608(%rcx) + # 4/15 + vpermq $0xe9, %zmm2, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 640(%rdx) + vextracti64x4 $0x01, %zmm6, 640(%rcx) + # 5/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm3, %zmm2, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 672(%rdx) + vextracti64x4 $0x01, %zmm6, 672(%rcx) + # 6/15 + vpermq $0xe9, %zmm3, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 704(%rdx) + vextracti64x4 $0x01, %zmm6, 704(%rcx) + # 7/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm4, %zmm3, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 736(%rdx) + vextracti64x4 $0x01, %zmm6, 736(%rcx) + # 8/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm5, %zmm4, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 768(%rdx) + vextracti64x4 $0x01, %zmm6, 768(%rcx) + # 9/15 + vpermq $0x94, %zmm5, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 800(%rdx) + vextracti64x4 $0x01, %zmm6, 800(%rcx) + vmovdqu64 480(%rdi), %ymm0 + vinserti64x4 $0x01, 480(%rsi), %zmm0, %zmm0 + vmovdqu64 512(%rdi), %ymm1 + vinserti64x4 $0x01, 512(%rsi), %zmm1, %zmm1 + vmovdqu64 544(%rdi), %ymm2 + vinserti64x4 $0x01, 544(%rsi), %zmm2, %zmm2 + # 10/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm0, %zmm5, %zmm6 + vpermq $0x94, %zmm6, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 832(%rdx) + vextracti64x4 $0x01, %zmm6, 832(%rcx) + # 11/15 + vpermq $0x94, %zmm0, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 864(%rdx) + vextracti64x4 $0x01, %zmm6, 864(%rcx) + # 12/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm1, %zmm0, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm7, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 896(%rdx) + vextracti64x4 $0x01, %zmm6, 896(%rcx) + # 13/15 + vpermq $0xe9, %zmm1, %zmm6 + vpshufb %zmm8, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 928(%rdx) + vextracti64x4 $0x01, %zmm6, 928(%rcx) + # 14/15 + vmovdqa64 %zmm14, %zmm6 + vpermi2q %zmm2, %zmm1, %zmm6 + vpermq $0xe9, %zmm6, %zmm6 + vpshufb %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 960(%rdx) + vextracti64x4 $0x01, %zmm6, 960(%rcx) + # 15/15 + vpermq $0xe9, %zmm2, %zmm6 + vpshufb %zmm10, %zmm6, %zmm6 + vpsrlvd %zmm11, %zmm6, %zmm6 + vpandd %zmm12, %zmm6, %zmm6 + vpsubd %zmm6, %zmm13, %zmm6 + vmovdqu64 %ymm6, 992(%rdx) + vextracti64x4 $0x01, %zmm6, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_gamma1_17_x2_avx512,.-wc_mldsa_decode_gamma1_17_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_19_x2_avx512_shuff_0: +.byte 0x00,0x01,0x02,0xff,0x02,0x03,0x04,0xff +.byte 0x05,0x06,0x07,0xff,0x07,0x08,0x09,0xff +.byte 0xff,0x02,0x03,0x04,0xff,0x04,0x05,0x06 +.byte 0xff,0x07,0x08,0x09,0xff,0x09,0x0a,0x0b +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_19_x2_avx512_shuff_1: +.byte 0x04,0x05,0x06,0xff,0x06,0x07,0x08,0xff +.byte 0x09,0x0a,0x0b,0xff,0x0b,0x0c,0x0d,0xff +.byte 0xff,0x06,0x07,0x08,0xff,0x08,0x09,0x0a +.byte 0xff,0x0b,0x0c,0x0d,0xff,0x0d,0x0e,0x0f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_19_x2_avx512_vs_8: +.long 0x00000000,0x00000004,0x00000000,0x00000004 +.long 0x00000008,0x0000000c,0x00000008,0x0000000c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_19_x2_avx512_mask: +.long 0x000fffff,0x000fffff,0x000fffff,0x000fffff +.long 0x000fffff,0x000fffff,0x000fffff,0x000fffff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_gamma1_19_x2_avx512_gamma19: +.long 0x00080000,0x00080000,0x00080000,0x00080000 +.long 0x00080000,0x00080000,0x00080000,0x00080000 +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_gamma1_19_x2_avx512 +.type wc_mldsa_decode_gamma1_19_x2_avx512,@function +.align 16 +wc_mldsa_decode_gamma1_19_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_gamma1_19_x2_avx512 +.p2align 4 +_wc_mldsa_decode_gamma1_19_x2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_avx512_perm21(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_decode_gamma1_19_x2_avx512_shuff_0(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_decode_gamma1_19_x2_avx512_shuff_1(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_decode_gamma1_19_x2_avx512_vs_8(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_gamma1_19_x2_avx512_mask(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_gamma1_19_x2_avx512_gamma19(%rip), %zmm10 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vmovdqu64 128(%rdi), %ymm4 + vinserti64x4 $0x01, 128(%rsi), %zmm4, %zmm4 + # 0/7 + vpermq $0x94, %zmm0, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, (%rdx) + vextracti64x4 $0x01, %zmm5, (%rcx) + # 1/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm1, %zmm0, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 32(%rdx) + vextracti64x4 $0x01, %zmm5, 32(%rcx) + # 2/7 + vpermq $0xe9, %zmm1, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 64(%rdx) + vextracti64x4 $0x01, %zmm5, 64(%rcx) + # 3/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm2, %zmm1, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 96(%rdx) + vextracti64x4 $0x01, %zmm5, 96(%rcx) + # 4/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm3, %zmm2, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 128(%rdx) + vextracti64x4 $0x01, %zmm5, 128(%rcx) + # 5/7 + vpermq $0x94, %zmm3, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 160(%rdx) + vextracti64x4 $0x01, %zmm5, 160(%rcx) + # 6/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm4, %zmm3, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 192(%rdx) + vextracti64x4 $0x01, %zmm5, 192(%rcx) + # 7/7 + vpermq $0xe9, %zmm4, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 224(%rdx) + vextracti64x4 $0x01, %zmm5, 224(%rcx) + vmovdqu64 160(%rdi), %ymm0 + vinserti64x4 $0x01, 160(%rsi), %zmm0, %zmm0 + vmovdqu64 192(%rdi), %ymm1 + vinserti64x4 $0x01, 192(%rsi), %zmm1, %zmm1 + vmovdqu64 224(%rdi), %ymm2 + vinserti64x4 $0x01, 224(%rsi), %zmm2, %zmm2 + vmovdqu64 256(%rdi), %ymm3 + vinserti64x4 $0x01, 256(%rsi), %zmm3, %zmm3 + vmovdqu64 288(%rdi), %ymm4 + vinserti64x4 $0x01, 288(%rsi), %zmm4, %zmm4 + # 0/7 + vpermq $0x94, %zmm0, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 256(%rdx) + vextracti64x4 $0x01, %zmm5, 256(%rcx) + # 1/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm1, %zmm0, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 288(%rdx) + vextracti64x4 $0x01, %zmm5, 288(%rcx) + # 2/7 + vpermq $0xe9, %zmm1, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 320(%rdx) + vextracti64x4 $0x01, %zmm5, 320(%rcx) + # 3/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm2, %zmm1, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 352(%rdx) + vextracti64x4 $0x01, %zmm5, 352(%rcx) + # 4/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm3, %zmm2, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 384(%rdx) + vextracti64x4 $0x01, %zmm5, 384(%rcx) + # 5/7 + vpermq $0x94, %zmm3, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 416(%rdx) + vextracti64x4 $0x01, %zmm5, 416(%rcx) + # 6/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm4, %zmm3, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 448(%rdx) + vextracti64x4 $0x01, %zmm5, 448(%rcx) + # 7/7 + vpermq $0xe9, %zmm4, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 480(%rdx) + vextracti64x4 $0x01, %zmm5, 480(%rcx) + vmovdqu64 320(%rdi), %ymm0 + vinserti64x4 $0x01, 320(%rsi), %zmm0, %zmm0 + vmovdqu64 352(%rdi), %ymm1 + vinserti64x4 $0x01, 352(%rsi), %zmm1, %zmm1 + vmovdqu64 384(%rdi), %ymm2 + vinserti64x4 $0x01, 384(%rsi), %zmm2, %zmm2 + vmovdqu64 416(%rdi), %ymm3 + vinserti64x4 $0x01, 416(%rsi), %zmm3, %zmm3 + vmovdqu64 448(%rdi), %ymm4 + vinserti64x4 $0x01, 448(%rsi), %zmm4, %zmm4 + # 0/7 + vpermq $0x94, %zmm0, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 512(%rdx) + vextracti64x4 $0x01, %zmm5, 512(%rcx) + # 1/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm1, %zmm0, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 544(%rdx) + vextracti64x4 $0x01, %zmm5, 544(%rcx) + # 2/7 + vpermq $0xe9, %zmm1, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 576(%rdx) + vextracti64x4 $0x01, %zmm5, 576(%rcx) + # 3/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm2, %zmm1, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 608(%rdx) + vextracti64x4 $0x01, %zmm5, 608(%rcx) + # 4/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm3, %zmm2, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 640(%rdx) + vextracti64x4 $0x01, %zmm5, 640(%rcx) + # 5/7 + vpermq $0x94, %zmm3, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 672(%rdx) + vextracti64x4 $0x01, %zmm5, 672(%rcx) + # 6/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm4, %zmm3, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 704(%rdx) + vextracti64x4 $0x01, %zmm5, 704(%rcx) + # 7/7 + vpermq $0xe9, %zmm4, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 736(%rdx) + vextracti64x4 $0x01, %zmm5, 736(%rcx) + vmovdqu64 480(%rdi), %ymm0 + vinserti64x4 $0x01, 480(%rsi), %zmm0, %zmm0 + vmovdqu64 512(%rdi), %ymm1 + vinserti64x4 $0x01, 512(%rsi), %zmm1, %zmm1 + vmovdqu64 544(%rdi), %ymm2 + vinserti64x4 $0x01, 544(%rsi), %zmm2, %zmm2 + vmovdqu64 576(%rdi), %ymm3 + vinserti64x4 $0x01, 576(%rsi), %zmm3, %zmm3 + vmovdqu64 608(%rdi), %ymm4 + vinserti64x4 $0x01, 608(%rsi), %zmm4, %zmm4 + # 0/7 + vpermq $0x94, %zmm0, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 768(%rdx) + vextracti64x4 $0x01, %zmm5, 768(%rcx) + # 1/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm1, %zmm0, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 800(%rdx) + vextracti64x4 $0x01, %zmm5, 800(%rcx) + # 2/7 + vpermq $0xe9, %zmm1, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 832(%rdx) + vextracti64x4 $0x01, %zmm5, 832(%rcx) + # 3/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm2, %zmm1, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 864(%rdx) + vextracti64x4 $0x01, %zmm5, 864(%rcx) + # 4/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm3, %zmm2, %zmm5 + vpermq $0x94, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 896(%rdx) + vextracti64x4 $0x01, %zmm5, 896(%rcx) + # 5/7 + vpermq $0x94, %zmm3, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 928(%rdx) + vextracti64x4 $0x01, %zmm5, 928(%rcx) + # 6/7 + vmovdqa64 %zmm11, %zmm5 + vpermi2q %zmm4, %zmm3, %zmm5 + vpermq $0xe9, %zmm5, %zmm5 + vpshufb %zmm6, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 960(%rdx) + vextracti64x4 $0x01, %zmm5, 960(%rcx) + # 7/7 + vpermq $0xe9, %zmm4, %zmm5 + vpshufb %zmm7, %zmm5, %zmm5 + vpsrlvd %zmm8, %zmm5, %zmm5 + vpandd %zmm9, %zmm5, %zmm5 + vpsubd %zmm5, %zmm10, %zmm5 + vmovdqu64 %ymm5, 992(%rdx) + vextracti64x4 $0x01, %zmm5, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_gamma1_19_x2_avx512,.-wc_mldsa_decode_gamma1_19_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_0: +.byte 0x00,0x01,0xff,0xff,0xff,0x01,0x02,0x03 +.byte 0x03,0x04,0x05,0xff,0x04,0x05,0x06,0x07 +.byte 0x06,0x07,0x08,0xff,0xff,0x08,0x09,0xff +.byte 0x09,0x0a,0x0b,0xff,0xff,0xff,0x0b,0x0c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_1: +.byte 0x05,0x06,0xff,0xff,0xff,0x06,0x07,0x08 +.byte 0x08,0x09,0xff,0xff,0x09,0x0a,0x0b,0xff +.byte 0x03,0x04,0x05,0xff,0xff,0x05,0x06,0xff +.byte 0x06,0x07,0x08,0xff,0xff,0xff,0x08,0x09 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_2: +.byte 0x02,0x03,0xff,0xff,0xff,0x03,0x04,0x05 +.byte 0x05,0x06,0xff,0xff,0x06,0x07,0x08,0xff +.byte 0x00,0x01,0x02,0xff,0xff,0x02,0x03,0xff +.byte 0x03,0x04,0x05,0xff,0xff,0xff,0x05,0x06 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_3: +.byte 0x07,0x08,0xff,0xff,0xff,0x08,0x09,0x0a +.byte 0x0a,0x0b,0xff,0xff,0x0b,0x0c,0x0d,0xff +.byte 0x05,0x06,0x07,0xff,0xff,0x07,0x08,0xff +.byte 0x08,0x09,0x0a,0xff,0xff,0xff,0x0a,0x0b +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_4: +.byte 0x04,0x05,0xff,0xff,0xff,0x05,0x06,0x07 +.byte 0x07,0x08,0xff,0xff,0x08,0x09,0x0a,0xff +.byte 0x02,0x03,0x04,0xff,0xff,0x04,0x05,0xff +.byte 0x05,0x06,0x07,0xff,0xff,0xff,0x07,0x08 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_5: +.byte 0x01,0x02,0xff,0xff,0xff,0x02,0x03,0x04 +.byte 0x04,0x05,0xff,0xff,0x05,0x06,0x07,0xff +.byte 0x07,0x08,0x09,0xff,0xff,0x09,0x0a,0xff +.byte 0x0a,0x0b,0x0c,0xff,0xff,0xff,0x0c,0x0d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_6: +.byte 0x06,0x07,0xff,0xff,0xff,0x07,0x08,0x09 +.byte 0x09,0x0a,0xff,0xff,0x0a,0x0b,0x0c,0xff +.byte 0x04,0x05,0x06,0xff,0xff,0x06,0x07,0x08 +.byte 0x07,0x08,0x09,0xff,0xff,0xff,0x09,0x0a +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_shuff_7: +.byte 0x03,0x04,0xff,0xff,0xff,0x04,0x05,0x06 +.byte 0x06,0x07,0xff,0xff,0x07,0x08,0x09,0xff +.byte 0x01,0x02,0x03,0xff,0xff,0x03,0x04,0xff +.byte 0x04,0x05,0x06,0xff,0xff,0xff,0x06,0x07 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_vs_8: +.long 0x00000000,0x0000000d,0x00000002,0x00000007 +.long 0x00000004,0x00000009,0x00000006,0x00000013 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_mask: +.long 0x00001fff,0x00001fff,0x00001fff,0x00001fff +.long 0x00001fff,0x00001fff,0x00001fff,0x00001fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t0_x2_avx512_d_max_half: +.long 0x00001000,0x00001000,0x00001000,0x00001000 +.long 0x00001000,0x00001000,0x00001000,0x00001000 +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_t0_x2_avx512 +.type wc_mldsa_decode_t0_x2_avx512,@function +.align 16 +wc_mldsa_decode_t0_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_t0_x2_avx512 +.p2align 4 +_wc_mldsa_decode_t0_x2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_avx512_perm21(%rip), %zmm16 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_0(%rip), %zmm5 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_1(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_2(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_3(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_4(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_5(%rip), %zmm10 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_6(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_shuff_7(%rip), %zmm12 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_vs_8(%rip), %zmm13 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_mask(%rip), %zmm14 + vbroadcasti64x4 L_mldsa_decode_t0_x2_avx512_d_max_half(%rip), %zmm15 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + # 1/32 + vpermq $0x44, %zmm0, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, (%rdx) + vextracti64x4 $0x01, %zmm4, (%rcx) + # 2/32 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 32(%rdx) + vextracti64x4 $0x01, %zmm4, 32(%rcx) + # 3/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm1, %zmm0, %zmm17 + vmovdqa64 %zmm17, %zmm0 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 64(%rdx) + vextracti64x4 $0x01, %zmm4, 64(%rcx) + # 4/32 + vpermq $0x94, %zmm1, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 96(%rdx) + vextracti64x4 $0x01, %zmm4, 96(%rcx) + # 5/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm2, %zmm1, %zmm17 + vmovdqa64 %zmm17, %zmm1 + vpermq $0x94, %zmm1, %zmm4 + vpshufb %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 128(%rdx) + vextracti64x4 $0x01, %zmm4, 128(%rcx) + # 6/32 + vpermq $0x44, %zmm2, %zmm4 + vpshufb %zmm10, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 160(%rdx) + vextracti64x4 $0x01, %zmm4, 160(%rcx) + # 7/32 + vpermq $0xe9, %zmm2, %zmm4 + vpshufb %zmm11, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 192(%rdx) + vextracti64x4 $0x01, %zmm4, 192(%rcx) + # 8/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm3, %zmm2, %zmm17 + vmovdqa64 %zmm17, %zmm2 + vpermq $0xe9, %zmm2, %zmm4 + vpshufb %zmm12, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 224(%rdx) + vextracti64x4 $0x01, %zmm4, 224(%rcx) + # 9/32 + vpermq $0x99, %zmm3, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 256(%rdx) + vextracti64x4 $0x01, %zmm4, 256(%rcx) + # 10/32 + vmovdqu64 128(%rdi), %ymm0 + vinserti64x4 $0x01, 128(%rsi), %zmm0, %zmm0 + vmovdqu64 160(%rdi), %ymm1 + vinserti64x4 $0x01, 160(%rsi), %zmm1, %zmm1 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm0, %zmm3, %zmm17 + vmovdqa64 %zmm17, %zmm3 + vpermq $0x94, %zmm3, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 288(%rdx) + vextracti64x4 $0x01, %zmm4, 288(%rcx) + # 11/32 + vpermq $0x94, %zmm0, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 320(%rdx) + vextracti64x4 $0x01, %zmm4, 320(%rcx) + # 12/32 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 352(%rdx) + vextracti64x4 $0x01, %zmm4, 352(%rcx) + # 13/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm1, %zmm0, %zmm17 + vmovdqa64 %zmm17, %zmm0 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 384(%rdx) + vextracti64x4 $0x01, %zmm4, 384(%rcx) + # 14/32 + vpermq $0x99, %zmm1, %zmm4 + vpshufb %zmm10, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 416(%rdx) + vextracti64x4 $0x01, %zmm4, 416(%rcx) + # 15/32 + vmovdqu64 192(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu64 224(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm2, %zmm1, %zmm17 + vmovdqa64 %zmm17, %zmm1 + vpermq $0x94, %zmm1, %zmm4 + vpshufb %zmm11, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 448(%rdx) + vextracti64x4 $0x01, %zmm4, 448(%rcx) + # 16/32 + vpermq $0x94, %zmm2, %zmm4 + vpshufb %zmm12, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 480(%rdx) + vextracti64x4 $0x01, %zmm4, 480(%rcx) + # 17/32 + vpermq $0xee, %zmm2, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 512(%rdx) + vextracti64x4 $0x01, %zmm4, 512(%rcx) + # 18/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm3, %zmm2, %zmm17 + vmovdqa64 %zmm17, %zmm2 + vpermq $0xe9, %zmm2, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 544(%rdx) + vextracti64x4 $0x01, %zmm4, 544(%rcx) + # 19/32 + vpermq $0xe9, %zmm3, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 576(%rdx) + vextracti64x4 $0x01, %zmm4, 576(%rcx) + # 20/32 + vmovdqu64 256(%rdi), %ymm0 + vinserti64x4 $0x01, 256(%rsi), %zmm0, %zmm0 + vmovdqu64 288(%rdi), %ymm1 + vinserti64x4 $0x01, 288(%rsi), %zmm1, %zmm1 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm0, %zmm3, %zmm17 + vmovdqa64 %zmm17, %zmm3 + vpermq $0x94, %zmm3, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 608(%rdx) + vextracti64x4 $0x01, %zmm4, 608(%rcx) + # 21/32 + vpermq $0x94, %zmm0, %zmm4 + vpshufb %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 640(%rdx) + vextracti64x4 $0x01, %zmm4, 640(%rcx) + # 22/32 + vpermq $0xee, %zmm0, %zmm4 + vpshufb %zmm10, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 672(%rdx) + vextracti64x4 $0x01, %zmm4, 672(%rcx) + # 23/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm1, %zmm0, %zmm17 + vmovdqa64 %zmm17, %zmm0 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm11, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 704(%rdx) + vextracti64x4 $0x01, %zmm4, 704(%rcx) + # 24/32 + vpermq $0xe9, %zmm1, %zmm4 + vpshufb %zmm12, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 736(%rdx) + vextracti64x4 $0x01, %zmm4, 736(%rcx) + # 25/32 + vmovdqu64 320(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu64 352(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm2, %zmm1, %zmm17 + vmovdqa64 %zmm17, %zmm1 + vpermq $0x99, %zmm1, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 768(%rdx) + vextracti64x4 $0x01, %zmm4, 768(%rcx) + # 26/32 + vpermq $0x94, %zmm2, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 800(%rdx) + vextracti64x4 $0x01, %zmm4, 800(%rcx) + # 27/32 + vpermq $62, %zmm2, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 832(%rdx) + vextracti64x4 $0x01, %zmm4, 832(%rcx) + # 28/32 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm3, %zmm2, %zmm17 + vmovdqa64 %zmm17, %zmm2 + vpermq $0xe9, %zmm2, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 864(%rdx) + vextracti64x4 $0x01, %zmm4, 864(%rcx) + # 29/32 + vpermq $0xe9, %zmm3, %zmm4 + vpshufb %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 896(%rdx) + vextracti64x4 $0x01, %zmm4, 896(%rcx) + # 30/32 + vmovdqu64 384(%rdi), %ymm0 + vinserti64x4 $0x01, 384(%rsi), %zmm0, %zmm0 + vmovdqa64 %zmm16, %zmm17 + vpermi2q %zmm0, %zmm3, %zmm17 + vmovdqa64 %zmm17, %zmm3 + vpermq $0x99, %zmm3, %zmm4 + vpshufb %zmm10, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 928(%rdx) + vextracti64x4 $0x01, %zmm4, 928(%rcx) + # 31/32 + vpermq $0x94, %zmm0, %zmm4 + vpshufb %zmm11, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 960(%rdx) + vextracti64x4 $0x01, %zmm4, 960(%rcx) + # 32/32 + vpermq $62, %zmm0, %zmm4 + vpshufb %zmm12, %zmm4, %zmm4 + vpsrlvd %zmm13, %zmm4, %zmm4 + vpandd %zmm14, %zmm4, %zmm4 + vpsubd %zmm4, %zmm15, %zmm4 + vmovdqu64 %ymm4, 992(%rdx) + vextracti64x4 $0x01, %zmm4, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_t0_x2_avx512,.-wc_mldsa_decode_t0_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_shuff_0: +.byte 0x00,0x01,0xff,0xff,0xff,0x01,0x02,0xff +.byte 0x02,0x03,0xff,0xff,0xff,0x03,0x04,0xff +.byte 0x05,0x06,0xff,0xff,0xff,0x06,0x07,0xff +.byte 0x07,0x08,0xff,0xff,0xff,0x08,0x09,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_shuff_1: +.byte 0x02,0x03,0xff,0xff,0xff,0x03,0x04,0xff +.byte 0x04,0x05,0xff,0xff,0xff,0x05,0x06,0xff +.byte 0x07,0x08,0xff,0xff,0xff,0x08,0x09,0xff +.byte 0x09,0x0a,0x08,0xff,0xff,0x0a,0x0b,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_shuff_2: +.byte 0x04,0x05,0xff,0xff,0xff,0x05,0x06,0xff +.byte 0x06,0x07,0xff,0xff,0xff,0x07,0x08,0xff +.byte 0x01,0x02,0xff,0xff,0xff,0x02,0x03,0xff +.byte 0x03,0x04,0xff,0xff,0xff,0x04,0x05,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_shuff_3: +.byte 0x06,0x07,0xff,0xff,0xff,0x07,0x08,0xff +.byte 0x08,0x09,0xff,0xff,0xff,0x09,0x0a,0xff +.byte 0x03,0x04,0xff,0xff,0xff,0x04,0x05,0xff +.byte 0x05,0x06,0xff,0xff,0xff,0x06,0x07,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_vs_8: +.long 0x00000000,0x0000000a,0x00000004,0x0000000e +.long 0x00000000,0x0000000a,0x00000004,0x0000000e +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_t1_x2_avx512_mask: +.long 0x000003ff,0x000003ff,0x000003ff,0x000003ff +.long 0x000003ff,0x000003ff,0x000003ff,0x000003ff +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_t1_x2_avx512 +.type wc_mldsa_decode_t1_x2_avx512,@function +.align 16 +wc_mldsa_decode_t1_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_t1_x2_avx512 +.p2align 4 +_wc_mldsa_decode_t1_x2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_avx512_perm21(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_shuff_0(%rip), %zmm5 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_shuff_1(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_shuff_2(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_shuff_3(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_vs_8(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_t1_x2_avx512_mask(%rip), %zmm10 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + # 1/32 + vpermq $0x44, %zmm0, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, (%rdx) + vextracti64x4 $0x01, %zmm4, (%rcx) + # 2/32 + vpermq $0x99, %zmm0, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 32(%rdx) + vextracti64x4 $0x01, %zmm4, 32(%rcx) + # 3/32 + vpermq $62, %zmm0, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 64(%rdx) + vextracti64x4 $0x01, %zmm4, 64(%rcx) + # 4/32 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm1, %zmm0, %zmm12 + vmovdqa64 %zmm12, %zmm0 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 96(%rdx) + vextracti64x4 $0x01, %zmm4, 96(%rcx) + # 5/32 + vpermq $0x99, %zmm1, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 128(%rdx) + vextracti64x4 $0x01, %zmm4, 128(%rcx) + # 6/32 + vpermq $0xee, %zmm1, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 160(%rdx) + vextracti64x4 $0x01, %zmm4, 160(%rcx) + # 7/32 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm2, %zmm1, %zmm12 + vmovdqa64 %zmm12, %zmm1 + vpermq $0xe9, %zmm1, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 192(%rdx) + vextracti64x4 $0x01, %zmm4, 192(%rcx) + # 8/32 + vpermq $0x94, %zmm2, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 224(%rdx) + vextracti64x4 $0x01, %zmm4, 224(%rcx) + # 9/32 + vpermq $0xee, %zmm2, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 256(%rdx) + vextracti64x4 $0x01, %zmm4, 256(%rcx) + # 10/32 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm3, %zmm2, %zmm12 + vmovdqa64 %zmm12, %zmm2 + vpermq $0x99, %zmm2, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 288(%rdx) + vextracti64x4 $0x01, %zmm4, 288(%rcx) + # 11/32 + vpermq $0x94, %zmm3, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 320(%rdx) + vextracti64x4 $0x01, %zmm4, 320(%rcx) + # 12/32 + vpermq $0xe9, %zmm3, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 352(%rdx) + vextracti64x4 $0x01, %zmm4, 352(%rcx) + # 13/32 + vmovdqu64 128(%rdi), %ymm0 + vinserti64x4 $0x01, 128(%rsi), %zmm0, %zmm0 + vmovdqu64 160(%rdi), %ymm1 + vinserti64x4 $0x01, 160(%rsi), %zmm1, %zmm1 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm0, %zmm3, %zmm12 + vmovdqa64 %zmm12, %zmm3 + vpermq $0x99, %zmm3, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 384(%rdx) + vextracti64x4 $0x01, %zmm4, 384(%rcx) + # 14/32 + vpermq $0x44, %zmm0, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 416(%rdx) + vextracti64x4 $0x01, %zmm4, 416(%rcx) + # 15/32 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 448(%rdx) + vextracti64x4 $0x01, %zmm4, 448(%rcx) + # 16/32 + vpermq $62, %zmm0, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 480(%rdx) + vextracti64x4 $0x01, %zmm4, 480(%rcx) + # 17/32 + vpermq $0x44, %zmm1, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 512(%rdx) + vextracti64x4 $0x01, %zmm4, 512(%rcx) + # 18/32 + vpermq $0x99, %zmm1, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 544(%rdx) + vextracti64x4 $0x01, %zmm4, 544(%rcx) + # 19/32 + vpermq $62, %zmm1, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 576(%rdx) + vextracti64x4 $0x01, %zmm4, 576(%rcx) + # 20/32 + vmovdqu64 192(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu64 224(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm2, %zmm1, %zmm12 + vmovdqa64 %zmm12, %zmm1 + vpermq $0xe9, %zmm1, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 608(%rdx) + vextracti64x4 $0x01, %zmm4, 608(%rcx) + # 21/32 + vpermq $0x99, %zmm2, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 640(%rdx) + vextracti64x4 $0x01, %zmm4, 640(%rcx) + # 22/32 + vpermq $0xee, %zmm2, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 672(%rdx) + vextracti64x4 $0x01, %zmm4, 672(%rcx) + # 23/32 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm3, %zmm2, %zmm12 + vmovdqa64 %zmm12, %zmm2 + vpermq $0xe9, %zmm2, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 704(%rdx) + vextracti64x4 $0x01, %zmm4, 704(%rcx) + # 24/32 + vpermq $0x94, %zmm3, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 736(%rdx) + vextracti64x4 $0x01, %zmm4, 736(%rcx) + # 25/32 + vpermq $0xee, %zmm3, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 768(%rdx) + vextracti64x4 $0x01, %zmm4, 768(%rcx) + # 26/32 + vmovdqu64 256(%rdi), %ymm0 + vinserti64x4 $0x01, 256(%rsi), %zmm0, %zmm0 + vmovdqu64 288(%rdi), %ymm1 + vinserti64x4 $0x01, 288(%rsi), %zmm1, %zmm1 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm0, %zmm3, %zmm12 + vmovdqa64 %zmm12, %zmm3 + vpermq $0x99, %zmm3, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 800(%rdx) + vextracti64x4 $0x01, %zmm4, 800(%rcx) + # 27/32 + vpermq $0x94, %zmm0, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 832(%rdx) + vextracti64x4 $0x01, %zmm4, 832(%rcx) + # 28/32 + vpermq $0xe9, %zmm0, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 864(%rdx) + vextracti64x4 $0x01, %zmm4, 864(%rcx) + # 29/32 + vmovdqa64 %zmm11, %zmm12 + vpermi2q %zmm1, %zmm0, %zmm12 + vmovdqa64 %zmm12, %zmm0 + vpermq $0x99, %zmm0, %zmm4 + vpshufb %zmm5, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 896(%rdx) + vextracti64x4 $0x01, %zmm4, 896(%rcx) + # 30/32 + vpermq $0x44, %zmm1, %zmm4 + vpshufb %zmm6, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 928(%rdx) + vextracti64x4 $0x01, %zmm4, 928(%rcx) + # 31/32 + vpermq $0xe9, %zmm1, %zmm4 + vpshufb %zmm7, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 960(%rdx) + vextracti64x4 $0x01, %zmm4, 960(%rcx) + # 32/32 + vpermq $62, %zmm1, %zmm4 + vpshufb %zmm8, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpandd %zmm10, %zmm4, %zmm4 + vpslld $13, %zmm4, %zmm4 + vmovdqu64 %ymm4, 992(%rdx) + vextracti64x4 $0x01, %zmm4, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_t1_x2_avx512,.-wc_mldsa_decode_t1_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_0: +.byte 0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff +.byte 0x00,0x01,0xff,0xff,0x01,0xff,0xff,0xff +.byte 0x01,0xff,0xff,0xff,0x01,0x02,0xff,0xff +.byte 0x02,0xff,0xff,0xff,0x02,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_1: +.byte 0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff +.byte 0x01,0x02,0xff,0xff,0x02,0xff,0xff,0xff +.byte 0x02,0xff,0xff,0xff,0x02,0x03,0xff,0xff +.byte 0x03,0xff,0xff,0xff,0x03,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_2: +.byte 0x02,0xff,0xff,0xff,0x02,0xff,0xff,0xff +.byte 0x02,0x03,0xff,0xff,0x03,0xff,0xff,0xff +.byte 0x03,0xff,0xff,0xff,0x03,0x04,0xff,0xff +.byte 0x04,0xff,0xff,0xff,0x04,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_3: +.byte 0x03,0xff,0xff,0xff,0x03,0xff,0xff,0xff +.byte 0x03,0x04,0xff,0xff,0x04,0xff,0xff,0xff +.byte 0x04,0xff,0xff,0xff,0x04,0x05,0xff,0xff +.byte 0x05,0xff,0xff,0xff,0x05,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_4: +.byte 0x04,0xff,0xff,0xff,0x04,0xff,0xff,0xff +.byte 0x04,0x05,0xff,0xff,0x05,0xff,0xff,0xff +.byte 0x05,0xff,0xff,0xff,0x05,0x06,0xff,0xff +.byte 0x06,0xff,0xff,0xff,0x06,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_5: +.byte 0x05,0xff,0xff,0xff,0x05,0xff,0xff,0xff +.byte 0x05,0x06,0xff,0xff,0x06,0xff,0xff,0xff +.byte 0x06,0xff,0xff,0xff,0x06,0x07,0xff,0xff +.byte 0x07,0xff,0xff,0xff,0x07,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_6: +.byte 0x06,0xff,0xff,0xff,0x06,0xff,0xff,0xff +.byte 0x06,0x07,0xff,0xff,0x07,0xff,0xff,0xff +.byte 0x07,0xff,0xff,0xff,0x07,0x08,0xff,0xff +.byte 0x08,0xff,0xff,0xff,0x08,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_shuff_7: +.byte 0x07,0xff,0xff,0xff,0x07,0xff,0xff,0xff +.byte 0x07,0x08,0xff,0xff,0x08,0xff,0xff,0xff +.byte 0x08,0xff,0xff,0xff,0x08,0x09,0xff,0xff +.byte 0x09,0xff,0xff,0xff,0x09,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_two: +.long 0x00000002,0x00000002,0x00000002,0x00000002 +.long 0x00000002,0x00000002,0x00000002,0x00000002 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_vs: +.long 0x00000000,0x00000003,0x00000006,0x00000001 +.long 0x00000004,0x00000007,0x00000002,0x00000005 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_2_x2_avx512_mask: +.long 0x00000007,0x00000007,0x00000007,0x00000007 +.long 0x00000007,0x00000007,0x00000007,0x00000007 +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_eta_2_x2_avx512 +.type wc_mldsa_decode_eta_2_x2_avx512,@function +.align 16 +wc_mldsa_decode_eta_2_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_eta_2_x2_avx512 +.p2align 4 +_wc_mldsa_decode_eta_2_x2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm15 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_0(%rip), %zmm4 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_1(%rip), %zmm5 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_2(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_3(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_4(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_5(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_6(%rip), %zmm10 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_shuff_7(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_two(%rip), %zmm12 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_vs(%rip), %zmm13 + vbroadcasti64x4 L_mldsa_decode_eta_2_x2_avx512_mask(%rip), %zmm14 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm4, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, (%rdx) + vextracti64x4 $0x01, %zmm3, (%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm7, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 32(%rdx) + vextracti64x4 $0x01, %zmm3, 32(%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm10, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 64(%rdx) + vextracti64x4 $0x01, %zmm3, 64(%rcx) + vpermq $57, %zmm0, %zmm0 + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm5, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 96(%rdx) + vextracti64x4 $0x01, %zmm3, 96(%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm8, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 128(%rdx) + vextracti64x4 $0x01, %zmm3, 128(%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm11, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 160(%rdx) + vextracti64x4 $0x01, %zmm3, 160(%rcx) + vpermq $57, %zmm0, %zmm0 + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm6, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 192(%rdx) + vextracti64x4 $0x01, %zmm3, 192(%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 224(%rdx) + vextracti64x4 $0x01, %zmm3, 224(%rcx) + vpermq $57, %zmm0, %zmm0 + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm4, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 256(%rdx) + vextracti64x4 $0x01, %zmm3, 256(%rcx) + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm7, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 288(%rdx) + vextracti64x4 $0x01, %zmm3, 288(%rcx) + vmovdqa64 %zmm15, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm0 + vpermq $56, %zmm0, %zmm0 + vpermq $0x44, %zmm0, %zmm3 + vpshufb %zmm10, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 320(%rdx) + vextracti64x4 $0x01, %zmm3, 320(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm5, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 352(%rdx) + vextracti64x4 $0x01, %zmm3, 352(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm8, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 384(%rdx) + vextracti64x4 $0x01, %zmm3, 384(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm11, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 416(%rdx) + vextracti64x4 $0x01, %zmm3, 416(%rcx) + vpermq $57, %zmm1, %zmm1 + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm6, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 448(%rdx) + vextracti64x4 $0x01, %zmm3, 448(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 480(%rdx) + vextracti64x4 $0x01, %zmm3, 480(%rcx) + vpermq $57, %zmm1, %zmm1 + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm4, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 512(%rdx) + vextracti64x4 $0x01, %zmm3, 512(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm7, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 544(%rdx) + vextracti64x4 $0x01, %zmm3, 544(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm10, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 576(%rdx) + vextracti64x4 $0x01, %zmm3, 576(%rcx) + vpermq $57, %zmm1, %zmm1 + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm5, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 608(%rdx) + vextracti64x4 $0x01, %zmm3, 608(%rcx) + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm8, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 640(%rdx) + vextracti64x4 $0x01, %zmm3, 640(%rcx) + vmovdqa64 %zmm15, %zmm16 + vpermi2q %zmm2, %zmm1, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vpermq $56, %zmm1, %zmm1 + vpermq $0x44, %zmm1, %zmm3 + vpshufb %zmm11, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 672(%rdx) + vextracti64x4 $0x01, %zmm3, 672(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm6, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 704(%rdx) + vextracti64x4 $0x01, %zmm3, 704(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 736(%rdx) + vextracti64x4 $0x01, %zmm3, 736(%rcx) + vpermq $57, %zmm2, %zmm2 + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm4, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 768(%rdx) + vextracti64x4 $0x01, %zmm3, 768(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm7, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 800(%rdx) + vextracti64x4 $0x01, %zmm3, 800(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm10, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 832(%rdx) + vextracti64x4 $0x01, %zmm3, 832(%rcx) + vpermq $57, %zmm2, %zmm2 + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm5, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 864(%rdx) + vextracti64x4 $0x01, %zmm3, 864(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm8, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 896(%rdx) + vextracti64x4 $0x01, %zmm3, 896(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm11, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 928(%rdx) + vextracti64x4 $0x01, %zmm3, 928(%rcx) + vpermq $57, %zmm2, %zmm2 + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm6, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 960(%rdx) + vextracti64x4 $0x01, %zmm3, 960(%rcx) + vpermq $0x44, %zmm2, %zmm3 + vpshufb %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm13, %zmm3, %zmm3 + vpandd %zmm14, %zmm3, %zmm3 + vpsubd %zmm3, %zmm12, %zmm3 + vmovdqu64 %ymm3, 992(%rdx) + vextracti64x4 $0x01, %zmm3, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_eta_2_x2_avx512,.-wc_mldsa_decode_eta_2_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_4_x2_avx512_four: +.long 0x00000004,0x00000004,0x00000004,0x00000004 +.long 0x00000004,0x00000004,0x00000004,0x00000004 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_4_x2_avx512_vs: +.long 0x00000000,0x00000004,0x00000008,0x0000000c +.long 0x00000010,0x00000014,0x00000018,0x0000001c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_decode_eta_4_x2_avx512_mask: +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +.long 0x0000000f,0x0000000f,0x0000000f,0x0000000f +#ifndef __APPLE__ +.text +.globl wc_mldsa_decode_eta_4_x2_avx512 +.type wc_mldsa_decode_eta_4_x2_avx512,@function +.align 16 +wc_mldsa_decode_eta_4_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decode_eta_4_x2_avx512 +.p2align 4 +_wc_mldsa_decode_eta_4_x2_avx512: +#endif /* __APPLE__ */ + movl $0xff00, %eax + kmovw %eax, %k1 + vbroadcasti64x4 L_mldsa_decode_eta_4_x2_avx512_four(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_decode_eta_4_x2_avx512_vs(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_decode_eta_4_x2_avx512_mask(%rip), %zmm10 + vpbroadcastd (%rdi), %zmm0 + vpbroadcastd (%rsi), %zmm0{%k1} + vpbroadcastd 4(%rdi), %zmm1 + vpbroadcastd 4(%rsi), %zmm1{%k1} + vpbroadcastd 8(%rdi), %zmm2 + vpbroadcastd 8(%rsi), %zmm2{%k1} + vpbroadcastd 12(%rdi), %zmm3 + vpbroadcastd 12(%rsi), %zmm3{%k1} + vpbroadcastd 16(%rdi), %zmm4 + vpbroadcastd 16(%rsi), %zmm4{%k1} + vpbroadcastd 20(%rdi), %zmm5 + vpbroadcastd 20(%rsi), %zmm5{%k1} + vpbroadcastd 24(%rdi), %zmm6 + vpbroadcastd 24(%rsi), %zmm6{%k1} + vpbroadcastd 28(%rdi), %zmm7 + vpbroadcastd 28(%rsi), %zmm7{%k1} + vpsrlvd %zmm9, %zmm0, %zmm0 + vpsrlvd %zmm9, %zmm1, %zmm1 + vpsrlvd %zmm9, %zmm2, %zmm2 + vpsrlvd %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm5, %zmm5 + vpsrlvd %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm9, %zmm7, %zmm7 + vpandd %zmm10, %zmm0, %zmm0 + vpandd %zmm10, %zmm1, %zmm1 + vpandd %zmm10, %zmm2, %zmm2 + vpandd %zmm10, %zmm3, %zmm3 + vpandd %zmm10, %zmm4, %zmm4 + vpandd %zmm10, %zmm5, %zmm5 + vpandd %zmm10, %zmm6, %zmm6 + vpandd %zmm10, %zmm7, %zmm7 + vpsubd %zmm0, %zmm8, %zmm0 + vpsubd %zmm1, %zmm8, %zmm1 + vpsubd %zmm2, %zmm8, %zmm2 + vpsubd %zmm3, %zmm8, %zmm3 + vpsubd %zmm4, %zmm8, %zmm4 + vpsubd %zmm5, %zmm8, %zmm5 + vpsubd %zmm6, %zmm8, %zmm6 + vpsubd %zmm7, %zmm8, %zmm7 + vmovdqu64 %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, (%rcx) + vmovdqu64 %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 32(%rcx) + vmovdqu64 %ymm2, 64(%rdx) + vextracti64x4 $0x01, %zmm2, 64(%rcx) + vmovdqu64 %ymm3, 96(%rdx) + vextracti64x4 $0x01, %zmm3, 96(%rcx) + vmovdqu64 %ymm4, 128(%rdx) + vextracti64x4 $0x01, %zmm4, 128(%rcx) + vmovdqu64 %ymm5, 160(%rdx) + vextracti64x4 $0x01, %zmm5, 160(%rcx) + vmovdqu64 %ymm6, 192(%rdx) + vextracti64x4 $0x01, %zmm6, 192(%rcx) + vmovdqu64 %ymm7, 224(%rdx) + vextracti64x4 $0x01, %zmm7, 224(%rcx) + vpbroadcastd 32(%rdi), %zmm0 + vpbroadcastd 32(%rsi), %zmm0{%k1} + vpbroadcastd 36(%rdi), %zmm1 + vpbroadcastd 36(%rsi), %zmm1{%k1} + vpbroadcastd 40(%rdi), %zmm2 + vpbroadcastd 40(%rsi), %zmm2{%k1} + vpbroadcastd 44(%rdi), %zmm3 + vpbroadcastd 44(%rsi), %zmm3{%k1} + vpbroadcastd 48(%rdi), %zmm4 + vpbroadcastd 48(%rsi), %zmm4{%k1} + vpbroadcastd 52(%rdi), %zmm5 + vpbroadcastd 52(%rsi), %zmm5{%k1} + vpbroadcastd 56(%rdi), %zmm6 + vpbroadcastd 56(%rsi), %zmm6{%k1} + vpbroadcastd 60(%rdi), %zmm7 + vpbroadcastd 60(%rsi), %zmm7{%k1} + vpsrlvd %zmm9, %zmm0, %zmm0 + vpsrlvd %zmm9, %zmm1, %zmm1 + vpsrlvd %zmm9, %zmm2, %zmm2 + vpsrlvd %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm5, %zmm5 + vpsrlvd %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm9, %zmm7, %zmm7 + vpandd %zmm10, %zmm0, %zmm0 + vpandd %zmm10, %zmm1, %zmm1 + vpandd %zmm10, %zmm2, %zmm2 + vpandd %zmm10, %zmm3, %zmm3 + vpandd %zmm10, %zmm4, %zmm4 + vpandd %zmm10, %zmm5, %zmm5 + vpandd %zmm10, %zmm6, %zmm6 + vpandd %zmm10, %zmm7, %zmm7 + vpsubd %zmm0, %zmm8, %zmm0 + vpsubd %zmm1, %zmm8, %zmm1 + vpsubd %zmm2, %zmm8, %zmm2 + vpsubd %zmm3, %zmm8, %zmm3 + vpsubd %zmm4, %zmm8, %zmm4 + vpsubd %zmm5, %zmm8, %zmm5 + vpsubd %zmm6, %zmm8, %zmm6 + vpsubd %zmm7, %zmm8, %zmm7 + vmovdqu64 %ymm0, 256(%rdx) + vextracti64x4 $0x01, %zmm0, 256(%rcx) + vmovdqu64 %ymm1, 288(%rdx) + vextracti64x4 $0x01, %zmm1, 288(%rcx) + vmovdqu64 %ymm2, 320(%rdx) + vextracti64x4 $0x01, %zmm2, 320(%rcx) + vmovdqu64 %ymm3, 352(%rdx) + vextracti64x4 $0x01, %zmm3, 352(%rcx) + vmovdqu64 %ymm4, 384(%rdx) + vextracti64x4 $0x01, %zmm4, 384(%rcx) + vmovdqu64 %ymm5, 416(%rdx) + vextracti64x4 $0x01, %zmm5, 416(%rcx) + vmovdqu64 %ymm6, 448(%rdx) + vextracti64x4 $0x01, %zmm6, 448(%rcx) + vmovdqu64 %ymm7, 480(%rdx) + vextracti64x4 $0x01, %zmm7, 480(%rcx) + vpbroadcastd 64(%rdi), %zmm0 + vpbroadcastd 64(%rsi), %zmm0{%k1} + vpbroadcastd 68(%rdi), %zmm1 + vpbroadcastd 68(%rsi), %zmm1{%k1} + vpbroadcastd 72(%rdi), %zmm2 + vpbroadcastd 72(%rsi), %zmm2{%k1} + vpbroadcastd 76(%rdi), %zmm3 + vpbroadcastd 76(%rsi), %zmm3{%k1} + vpbroadcastd 80(%rdi), %zmm4 + vpbroadcastd 80(%rsi), %zmm4{%k1} + vpbroadcastd 84(%rdi), %zmm5 + vpbroadcastd 84(%rsi), %zmm5{%k1} + vpbroadcastd 88(%rdi), %zmm6 + vpbroadcastd 88(%rsi), %zmm6{%k1} + vpbroadcastd 92(%rdi), %zmm7 + vpbroadcastd 92(%rsi), %zmm7{%k1} + vpsrlvd %zmm9, %zmm0, %zmm0 + vpsrlvd %zmm9, %zmm1, %zmm1 + vpsrlvd %zmm9, %zmm2, %zmm2 + vpsrlvd %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm5, %zmm5 + vpsrlvd %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm9, %zmm7, %zmm7 + vpandd %zmm10, %zmm0, %zmm0 + vpandd %zmm10, %zmm1, %zmm1 + vpandd %zmm10, %zmm2, %zmm2 + vpandd %zmm10, %zmm3, %zmm3 + vpandd %zmm10, %zmm4, %zmm4 + vpandd %zmm10, %zmm5, %zmm5 + vpandd %zmm10, %zmm6, %zmm6 + vpandd %zmm10, %zmm7, %zmm7 + vpsubd %zmm0, %zmm8, %zmm0 + vpsubd %zmm1, %zmm8, %zmm1 + vpsubd %zmm2, %zmm8, %zmm2 + vpsubd %zmm3, %zmm8, %zmm3 + vpsubd %zmm4, %zmm8, %zmm4 + vpsubd %zmm5, %zmm8, %zmm5 + vpsubd %zmm6, %zmm8, %zmm6 + vpsubd %zmm7, %zmm8, %zmm7 + vmovdqu64 %ymm0, 512(%rdx) + vextracti64x4 $0x01, %zmm0, 512(%rcx) + vmovdqu64 %ymm1, 544(%rdx) + vextracti64x4 $0x01, %zmm1, 544(%rcx) + vmovdqu64 %ymm2, 576(%rdx) + vextracti64x4 $0x01, %zmm2, 576(%rcx) + vmovdqu64 %ymm3, 608(%rdx) + vextracti64x4 $0x01, %zmm3, 608(%rcx) + vmovdqu64 %ymm4, 640(%rdx) + vextracti64x4 $0x01, %zmm4, 640(%rcx) + vmovdqu64 %ymm5, 672(%rdx) + vextracti64x4 $0x01, %zmm5, 672(%rcx) + vmovdqu64 %ymm6, 704(%rdx) + vextracti64x4 $0x01, %zmm6, 704(%rcx) + vmovdqu64 %ymm7, 736(%rdx) + vextracti64x4 $0x01, %zmm7, 736(%rcx) + vpbroadcastd 96(%rdi), %zmm0 + vpbroadcastd 96(%rsi), %zmm0{%k1} + vpbroadcastd 100(%rdi), %zmm1 + vpbroadcastd 100(%rsi), %zmm1{%k1} + vpbroadcastd 104(%rdi), %zmm2 + vpbroadcastd 104(%rsi), %zmm2{%k1} + vpbroadcastd 108(%rdi), %zmm3 + vpbroadcastd 108(%rsi), %zmm3{%k1} + vpbroadcastd 112(%rdi), %zmm4 + vpbroadcastd 112(%rsi), %zmm4{%k1} + vpbroadcastd 116(%rdi), %zmm5 + vpbroadcastd 116(%rsi), %zmm5{%k1} + vpbroadcastd 120(%rdi), %zmm6 + vpbroadcastd 120(%rsi), %zmm6{%k1} + vpbroadcastd 124(%rdi), %zmm7 + vpbroadcastd 124(%rsi), %zmm7{%k1} + vpsrlvd %zmm9, %zmm0, %zmm0 + vpsrlvd %zmm9, %zmm1, %zmm1 + vpsrlvd %zmm9, %zmm2, %zmm2 + vpsrlvd %zmm9, %zmm3, %zmm3 + vpsrlvd %zmm9, %zmm4, %zmm4 + vpsrlvd %zmm9, %zmm5, %zmm5 + vpsrlvd %zmm9, %zmm6, %zmm6 + vpsrlvd %zmm9, %zmm7, %zmm7 + vpandd %zmm10, %zmm0, %zmm0 + vpandd %zmm10, %zmm1, %zmm1 + vpandd %zmm10, %zmm2, %zmm2 + vpandd %zmm10, %zmm3, %zmm3 + vpandd %zmm10, %zmm4, %zmm4 + vpandd %zmm10, %zmm5, %zmm5 + vpandd %zmm10, %zmm6, %zmm6 + vpandd %zmm10, %zmm7, %zmm7 + vpsubd %zmm0, %zmm8, %zmm0 + vpsubd %zmm1, %zmm8, %zmm1 + vpsubd %zmm2, %zmm8, %zmm2 + vpsubd %zmm3, %zmm8, %zmm3 + vpsubd %zmm4, %zmm8, %zmm4 + vpsubd %zmm5, %zmm8, %zmm5 + vpsubd %zmm6, %zmm8, %zmm6 + vpsubd %zmm7, %zmm8, %zmm7 + vmovdqu64 %ymm0, 768(%rdx) + vextracti64x4 $0x01, %zmm0, 768(%rcx) + vmovdqu64 %ymm1, 800(%rdx) + vextracti64x4 $0x01, %zmm1, 800(%rcx) + vmovdqu64 %ymm2, 832(%rdx) + vextracti64x4 $0x01, %zmm2, 832(%rcx) + vmovdqu64 %ymm3, 864(%rdx) + vextracti64x4 $0x01, %zmm3, 864(%rcx) + vmovdqu64 %ymm4, 896(%rdx) + vextracti64x4 $0x01, %zmm4, 896(%rcx) + vmovdqu64 %ymm5, 928(%rdx) + vextracti64x4 $0x01, %zmm5, 928(%rcx) + vmovdqu64 %ymm6, 960(%rdx) + vextracti64x4 $0x01, %zmm6, 960(%rcx) + vmovdqu64 %ymm7, 992(%rdx) + vextracti64x4 $0x01, %zmm7, 992(%rcx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decode_eta_4_x2_avx512,.-wc_mldsa_decode_eta_4_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_gamma: +.long 0x00020000,0x00020000,0x00020000,0x00020000 +.long 0x00020000,0x00020000,0x00020000,0x00020000 +.long 0x00020000,0x00020000,0x00020000,0x00020000 +.long 0x00020000,0x00020000,0x00020000,0x00020000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_perm0: +.long 0x00000000,0x00000001,0x00000003,0x00000005 +.long 0x00000007,0x00000008,0x0000000a,0x0000000c +.long 0x0000000e,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_shift0: +.long 0x00000000,0x0000000e,0x0000000a,0x00000006 +.long 0x00000002,0x00000010,0x0000000c,0x00000008 +.long 0x00000004,0x00000020,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_perm1: +.long 0x00000001,0x00000002,0x00000004,0x00000006 +.long 0x00000008,0x00000009,0x0000000b,0x0000000d +.long 0x0000000f,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_shift1: +.long 0x00000012,0x00000004,0x00000008,0x0000000c +.long 0x00000010,0x00000002,0x00000006,0x0000000a +.long 0x0000000e,0x00000020,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_perm2: +.long 0x00000000,0x00000003,0x00000005,0x00000007 +.long 0x00000000,0x0000000a,0x0000000c,0x0000000e +.long 0x00000000,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_17_avx512_shift2: +.long 0x00000020,0x00000016,0x0000001a,0x0000001e +.long 0x00000020,0x00000014,0x00000018,0x0000001c +.long 0x00000020,0x00000020,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_gamma1_17_avx512 +.type wc_mldsa_encode_gamma1_17_avx512,@function +.align 16 +wc_mldsa_encode_gamma1_17_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_gamma1_17_avx512 +.p2align 4 +_wc_mldsa_encode_gamma1_17_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_gamma(%rip), %zmm10 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_perm0(%rip), %zmm4 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_shift0(%rip), %zmm7 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_perm1(%rip), %zmm5 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_shift1(%rip), %zmm8 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_perm2(%rip), %zmm6 + vmovdqu64 L_mldsa_encode_gamma1_17_avx512_shift2(%rip), %zmm9 + movl $0x1ff, %edx + kmovw %edx, %k1 + vmovdqu64 (%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, (%rsi) + vmovdqu64 64(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 36(%rsi) + vmovdqu64 128(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 72(%rsi) + vmovdqu64 192(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 108(%rsi) + vmovdqu64 256(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 144(%rsi) + vmovdqu64 320(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 180(%rsi) + vmovdqu64 384(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 216(%rsi) + vmovdqu64 448(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 252(%rsi) + vmovdqu64 512(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 288(%rsi) + vmovdqu64 576(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 324(%rsi) + vmovdqu64 640(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 360(%rsi) + vmovdqu64 704(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 396(%rsi) + vmovdqu64 768(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 432(%rsi) + vmovdqu64 832(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 468(%rsi) + vmovdqu64 896(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 504(%rsi) + vmovdqu64 960(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu32 %zmm1, 540(%rsi){%k1} + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_gamma1_17_avx512,.-wc_mldsa_encode_gamma1_17_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_gamma: +.long 0x00080000,0x00080000,0x00080000,0x00080000 +.long 0x00080000,0x00080000,0x00080000,0x00080000 +.long 0x00080000,0x00080000,0x00080000,0x00080000 +.long 0x00080000,0x00080000,0x00080000,0x00080000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_perm0: +.long 0x00000000,0x00000001,0x00000003,0x00000004 +.long 0x00000006,0x00000008,0x00000009,0x0000000b +.long 0x0000000c,0x0000000e,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_shift0: +.long 0x00000000,0x0000000c,0x00000004,0x00000010 +.long 0x00000008,0x00000000,0x0000000c,0x00000004 +.long 0x00000010,0x00000008,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_perm1: +.long 0x00000001,0x00000002,0x00000004,0x00000005 +.long 0x00000007,0x00000009,0x0000000a,0x0000000c +.long 0x0000000d,0x0000000f,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_shift1: +.long 0x00000014,0x00000008,0x00000010,0x00000004 +.long 0x0000000c,0x00000014,0x00000008,0x00000010 +.long 0x00000004,0x0000000c,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_perm2: +.long 0x00000000,0x00000003,0x00000000,0x00000006 +.long 0x00000000,0x00000000,0x0000000b,0x00000000 +.long 0x0000000e,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_gamma1_19_avx512_shift2: +.long 0x00000020,0x0000001c,0x00000020,0x00000018 +.long 0x00000020,0x00000020,0x0000001c,0x00000020 +.long 0x00000018,0x00000020,0x00000020,0x00000020 +.long 0x00000020,0x00000020,0x00000020,0x00000020 +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_gamma1_19_avx512 +.type wc_mldsa_encode_gamma1_19_avx512,@function +.align 16 +wc_mldsa_encode_gamma1_19_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_gamma1_19_avx512 +.p2align 4 +_wc_mldsa_encode_gamma1_19_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_gamma(%rip), %zmm10 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_perm0(%rip), %zmm4 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_shift0(%rip), %zmm7 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_perm1(%rip), %zmm5 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_shift1(%rip), %zmm8 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_perm2(%rip), %zmm6 + vmovdqu64 L_mldsa_encode_gamma1_19_avx512_shift2(%rip), %zmm9 + movl $0x3ff, %edx + kmovw %edx, %k1 + vmovdqu64 (%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, (%rsi) + vmovdqu64 64(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 40(%rsi) + vmovdqu64 128(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 80(%rsi) + vmovdqu64 192(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 120(%rsi) + vmovdqu64 256(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 160(%rsi) + vmovdqu64 320(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 200(%rsi) + vmovdqu64 384(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 240(%rsi) + vmovdqu64 448(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 280(%rsi) + vmovdqu64 512(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 320(%rsi) + vmovdqu64 576(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 360(%rsi) + vmovdqu64 640(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 400(%rsi) + vmovdqu64 704(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 440(%rsi) + vmovdqu64 768(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 480(%rsi) + vmovdqu64 832(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 520(%rsi) + vmovdqu64 896(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu64 %zmm1, 560(%rsi) + vmovdqu64 960(%rdi), %zmm0 + vpsubd %zmm0, %zmm10, %zmm0 + vpermd %zmm0, %zmm4, %zmm1 + vpermd %zmm0, %zmm5, %zmm2 + vpermd %zmm0, %zmm6, %zmm3 + vpsrlvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm9, %zmm3, %zmm3 + vpord %zmm2, %zmm1, %zmm1 + vpord %zmm3, %zmm1, %zmm1 + vmovdqu32 %zmm1, 600(%rsi){%k1} + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_gamma1_19_avx512,.-wc_mldsa_encode_gamma1_19_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_x2_avx512_shuff_0_even: +.byte 0x00,0x09,0x0a,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0x00,0x09,0x0a,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd: +.byte 0x04,0x05,0x0e,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0x04,0x05,0x0e,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_x2_avx512_shuff_1_even: +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x09 +.byte 0x0a,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0x00,0x09,0x0a,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd: +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x04,0x05 +.byte 0x0e,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0x04,0x05,0x0e,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_x2_avx512_vs: +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_w1_88_x2_avx512 +.type wc_mldsa_encode_w1_88_x2_avx512,@function +.align 16 +wc_mldsa_encode_w1_88_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_w1_88_x2_avx512 +.p2align 4 +_wc_mldsa_encode_w1_88_x2_avx512: +#endif /* __APPLE__ */ + vbroadcasti64x4 L_mldsa_encode_w1_88_x2_avx512_shuff_0_even(%rip), %zmm4 + vbroadcasti64x4 L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd(%rip), %zmm5 + vbroadcasti64x4 L_mldsa_encode_w1_88_x2_avx512_shuff_1_even(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_encode_w1_88_x2_avx512_vs(%rip), %zmm8 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 64(%rdi), %ymm0 + vinserti64x4 $0x01, 64(%rsi), %zmm0, %zmm0 + vmovdqu64 96(%rdi), %ymm1 + vinserti64x4 $0x01, 96(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 128(%rdi), %ymm0 + vinserti64x4 $0x01, 128(%rsi), %zmm0, %zmm0 + vmovdqu64 160(%rdi), %ymm1 + vinserti64x4 $0x01, 160(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 192(%rdi), %ymm0 + vinserti64x4 $0x01, 192(%rsi), %zmm0, %zmm0 + vmovdqu64 224(%rdi), %ymm1 + vinserti64x4 $0x01, 224(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 256(%rdi), %ymm0 + vinserti64x4 $0x01, 256(%rsi), %zmm0, %zmm0 + vmovdqu64 288(%rdi), %ymm1 + vinserti64x4 $0x01, 288(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 320(%rdi), %ymm0 + vinserti64x4 $0x01, 320(%rsi), %zmm0, %zmm0 + vmovdqu64 352(%rdi), %ymm1 + vinserti64x4 $0x01, 352(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 384(%rdi), %ymm0 + vinserti64x4 $0x01, 384(%rsi), %zmm0, %zmm0 + vmovdqu64 416(%rdi), %ymm1 + vinserti64x4 $0x01, 416(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 448(%rdi), %ymm0 + vinserti64x4 $0x01, 448(%rsi), %zmm0, %zmm0 + vmovdqu64 480(%rdi), %ymm1 + vinserti64x4 $0x01, 480(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 512(%rdi), %ymm0 + vinserti64x4 $0x01, 512(%rsi), %zmm0, %zmm0 + vmovdqu64 544(%rdi), %ymm1 + vinserti64x4 $0x01, 544(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 576(%rdi), %ymm0 + vinserti64x4 $0x01, 576(%rsi), %zmm0, %zmm0 + vmovdqu64 608(%rdi), %ymm1 + vinserti64x4 $0x01, 608(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 640(%rdi), %ymm0 + vinserti64x4 $0x01, 640(%rsi), %zmm0, %zmm0 + vmovdqu64 672(%rdi), %ymm1 + vinserti64x4 $0x01, 672(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 704(%rdi), %ymm0 + vinserti64x4 $0x01, 704(%rsi), %zmm0, %zmm0 + vmovdqu64 736(%rdi), %ymm1 + vinserti64x4 $0x01, 736(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 768(%rdi), %ymm0 + vinserti64x4 $0x01, 768(%rsi), %zmm0, %zmm0 + vmovdqu64 800(%rdi), %ymm1 + vinserti64x4 $0x01, 800(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 832(%rdi), %ymm0 + vinserti64x4 $0x01, 832(%rsi), %zmm0, %zmm0 + vmovdqu64 864(%rdi), %ymm1 + vinserti64x4 $0x01, 864(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 896(%rdi), %ymm0 + vinserti64x4 $0x01, 896(%rsi), %zmm0, %zmm0 + vmovdqu64 928(%rdi), %ymm1 + vinserti64x4 $0x01, 928(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 960(%rdi), %ymm0 + vinserti64x4 $0x01, 960(%rsi), %zmm0, %zmm0 + vmovdqu64 992(%rdi), %ymm1 + vinserti64x4 $0x01, 992(%rsi), %zmm1, %zmm1 + vpsllvd %zmm8, %zmm0, %zmm0 + vpsllvd %zmm8, %zmm1, %zmm1 + vpshufb %zmm5, %zmm0, %zmm2 + vpshufb %zmm4, %zmm0, %zmm0 + vpshufb %zmm7, %zmm1, %zmm3 + vpshufb %zmm6, %zmm1, %zmm1 + vpord %zmm2, %zmm0, %zmm0 + vpord %zmm3, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm2 + vpord %zmm2, %zmm0, %zmm0 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + vextracti32x4 $2, %zmm0, %xmm2 + movq %xmm2, (%rcx) + vpextrd $2, %xmm2, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_w1_88_x2_avx512,.-wc_mldsa_encode_w1_88_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_w1_32_avx512 +.type wc_mldsa_encode_w1_32_avx512,@function +.align 16 +wc_mldsa_encode_w1_32_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_w1_32_avx512 +.p2align 4 +_wc_mldsa_encode_w1_32_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, (%rsi) + vmovdqu64 64(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 8(%rsi) + vmovdqu64 128(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 16(%rsi) + vmovdqu64 192(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 24(%rsi) + vmovdqu64 256(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 32(%rsi) + vmovdqu64 320(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 40(%rsi) + vmovdqu64 384(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 48(%rsi) + vmovdqu64 448(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 56(%rsi) + vmovdqu64 512(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 64(%rsi) + vmovdqu64 576(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 72(%rsi) + vmovdqu64 640(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 80(%rsi) + vmovdqu64 704(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 88(%rsi) + vmovdqu64 768(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 96(%rsi) + vmovdqu64 832(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 104(%rsi) + vmovdqu64 896(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 112(%rsi) + vmovdqu64 960(%rdi), %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 120(%rsi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_w1_32_avx512,.-wc_mldsa_encode_w1_32_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_two: +.long 0x00000002,0x00000002,0x00000002,0x00000002 +.long 0x00000002,0x00000002,0x00000002,0x00000002 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_vs_3: +.long 0x00000000,0x00000003,0x00000006,0x00000009 +.long 0x00000004,0x00000007,0x0000000a,0x0000000d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_shuff_3_even: +.byte 0x00,0xff,0x04,0x05,0x08,0xff,0x0c,0x0d +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0x00,0xff,0x04,0x05,0x08,0xff,0x0c,0x0d +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd: +.byte 0x02,0xff,0xff,0x07,0x0a,0x0b,0xff,0x0f +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0x02,0xff,0xff,0x07,0x0a,0x0b,0xff,0x0f +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_shuff_6_even: +.byte 0x00,0x04,0x05,0x08,0x0c,0x0d,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x04 +.byte 0x05,0x08,0x0c,0x0d,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd: +.byte 0x02,0x03,0x07,0x0a,0x0b,0x0f,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x02,0x03 +.byte 0x07,0x0a,0x0b,0x0f,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_eta_2_x2_avx512 +.type wc_mldsa_encode_eta_2_x2_avx512,@function +.align 16 +wc_mldsa_encode_eta_2_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_eta_2_x2_avx512 +.p2align 4 +_wc_mldsa_encode_eta_2_x2_avx512: +#endif /* __APPLE__ */ + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_two(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_vs_3(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_shuff_3_even(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_shuff_6_even(%rip), %zmm10 + vbroadcasti64x4 L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd(%rip), %zmm11 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 128(%rdi), %ymm0 + vinserti64x4 $0x01, 128(%rsi), %zmm0, %zmm0 + vmovdqu64 160(%rdi), %ymm1 + vinserti64x4 $0x01, 160(%rsi), %zmm1, %zmm1 + vmovdqu64 192(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu64 224(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 256(%rdi), %ymm0 + vinserti64x4 $0x01, 256(%rsi), %zmm0, %zmm0 + vmovdqu64 288(%rdi), %ymm1 + vinserti64x4 $0x01, 288(%rsi), %zmm1, %zmm1 + vmovdqu64 320(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu64 352(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 384(%rdi), %ymm0 + vinserti64x4 $0x01, 384(%rsi), %zmm0, %zmm0 + vmovdqu64 416(%rdi), %ymm1 + vinserti64x4 $0x01, 416(%rsi), %zmm1, %zmm1 + vmovdqu64 448(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rsi), %zmm2, %zmm2 + vmovdqu64 480(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 512(%rdi), %ymm0 + vinserti64x4 $0x01, 512(%rsi), %zmm0, %zmm0 + vmovdqu64 544(%rdi), %ymm1 + vinserti64x4 $0x01, 544(%rsi), %zmm1, %zmm1 + vmovdqu64 576(%rdi), %ymm2 + vinserti64x4 $0x01, 576(%rsi), %zmm2, %zmm2 + vmovdqu64 608(%rdi), %ymm3 + vinserti64x4 $0x01, 608(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 640(%rdi), %ymm0 + vinserti64x4 $0x01, 640(%rsi), %zmm0, %zmm0 + vmovdqu64 672(%rdi), %ymm1 + vinserti64x4 $0x01, 672(%rsi), %zmm1, %zmm1 + vmovdqu64 704(%rdi), %ymm2 + vinserti64x4 $0x01, 704(%rsi), %zmm2, %zmm2 + vmovdqu64 736(%rdi), %ymm3 + vinserti64x4 $0x01, 736(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 768(%rdi), %ymm0 + vinserti64x4 $0x01, 768(%rsi), %zmm0, %zmm0 + vmovdqu64 800(%rdi), %ymm1 + vinserti64x4 $0x01, 800(%rsi), %zmm1, %zmm1 + vmovdqu64 832(%rdi), %ymm2 + vinserti64x4 $0x01, 832(%rsi), %zmm2, %zmm2 + vmovdqu64 864(%rdi), %ymm3 + vinserti64x4 $0x01, 864(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + vmovdqu64 %xmm0, (%rdx) + vmovdqu64 %xmm4, (%rcx) + addq $12, %rdx + addq $12, %rcx + vmovdqu64 896(%rdi), %ymm0 + vinserti64x4 $0x01, 896(%rsi), %zmm0, %zmm0 + vmovdqu64 928(%rdi), %ymm1 + vinserti64x4 $0x01, 928(%rsi), %zmm1, %zmm1 + vmovdqu64 960(%rdi), %ymm2 + vinserti64x4 $0x01, 960(%rsi), %zmm2, %zmm2 + vmovdqu64 992(%rdi), %ymm3 + vinserti64x4 $0x01, 992(%rsi), %zmm3, %zmm3 + vpsubd %zmm0, %zmm6, %zmm0 + vpsubd %zmm1, %zmm6, %zmm1 + vpsubd %zmm2, %zmm6, %zmm2 + vpsubd %zmm3, %zmm6, %zmm3 + vpsllvd %zmm7, %zmm0, %zmm0 + vpsllvd %zmm7, %zmm1, %zmm1 + vpsllvd %zmm7, %zmm2, %zmm2 + vpsllvd %zmm7, %zmm3, %zmm3 + vpackusdw %zmm2, %zmm0, %zmm0 + vpackusdw %zmm3, %zmm1, %zmm1 + vpermq $0xd8, %zmm0, %zmm0 + vpermq $0xd8, %zmm1, %zmm1 + vpshufb %zmm9, %zmm0, %zmm4 + vpshufb %zmm9, %zmm1, %zmm5 + vpshufb %zmm8, %zmm0, %zmm0 + vpshufb %zmm8, %zmm1, %zmm1 + vpord %zmm4, %zmm0, %zmm0 + vpord %zmm5, %zmm1, %zmm1 + vpermq $0xb1, %zmm1, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpshufb %zmm11, %zmm0, %zmm4 + vpshufb %zmm10, %zmm0, %zmm0 + vpord %zmm4, %zmm0, %zmm0 + vshufi64x2 $0xf5, %zmm0, %zmm0, %zmm4 + vpord %zmm4, %zmm0, %zmm0 + vextracti32x4 $2, %zmm0, %xmm4 + movq %xmm0, (%rdx) + vpextrd $2, %xmm0, 8(%rdx) + movq %xmm4, (%rcx) + vpextrd $2, %xmm4, 8(%rcx) + addq $12, %rdx + addq $12, %rcx + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_eta_2_x2_avx512,.-wc_mldsa_encode_eta_2_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_eta_4_avx512_four: +.long 0x00000004,0x00000004,0x00000004,0x00000004 +.long 0x00000004,0x00000004,0x00000004,0x00000004 +.long 0x00000004,0x00000004,0x00000004,0x00000004 +.long 0x00000004,0x00000004,0x00000004,0x00000004 +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_eta_4_avx512 +.type wc_mldsa_encode_eta_4_avx512,@function +.align 16 +wc_mldsa_encode_eta_4_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_eta_4_avx512 +.p2align 4 +_wc_mldsa_encode_eta_4_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_encode_eta_4_avx512_four(%rip), %zmm2 + vmovdqu64 (%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, (%rsi) + vmovdqu64 64(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 8(%rsi) + vmovdqu64 128(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 16(%rsi) + vmovdqu64 192(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 24(%rsi) + vmovdqu64 256(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 32(%rsi) + vmovdqu64 320(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 40(%rsi) + vmovdqu64 384(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 48(%rsi) + vmovdqu64 448(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 56(%rsi) + vmovdqu64 512(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 64(%rsi) + vmovdqu64 576(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 72(%rsi) + vmovdqu64 640(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 80(%rsi) + vmovdqu64 704(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 88(%rsi) + vmovdqu64 768(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 96(%rsi) + vmovdqu64 832(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 104(%rsi) + vmovdqu64 896(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 112(%rsi) + vmovdqu64 960(%rdi), %zmm0 + vpsubd %zmm0, %zmm2, %zmm0 + vpsrlq $28, %zmm0, %zmm1 + vpord %zmm1, %zmm0, %zmm0 + vpmovqb %zmm0, 120(%rsi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_eta_4_avx512,.-wc_mldsa_encode_eta_4_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_d_max_half: +.long 0x00001000,0x00001000,0x00001000,0x00001000 +.long 0x00001000,0x00001000,0x00001000,0x00001000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_vs_13: +.long 0x00000000,0x0000000d,0x00000002,0x0000000f +.long 0x00000004,0x00000011,0x00000006,0x00000013 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even: +.byte 0x00,0x01,0xff,0x08,0x09,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x01 +.byte 0x02,0x08,0x09,0x0a,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd: +.byte 0xff,0x05,0x06,0x07,0x0d,0x0e,0x0f,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0x06,0x07,0xff,0x0e,0x0f,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_vs_10: +.long 0x00000000,0x0000000a,0x00000004,0x0000000e +.long 0x00000000,0x0000000a,0x00000004,0x0000000e +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even: +.byte 0x00,0x01,0x08,0x09,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0x00,0x01,0x08 +.byte 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd: +.byte 0xff,0x05,0x06,0x0d,0x0e,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x05,0x06 +.byte 0x0d,0x0e,0xff,0xff,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_t0_t1_x2_avx512 +.type wc_mldsa_encode_t0_t1_x2_avx512,@function +.align 16 +wc_mldsa_encode_t0_t1_x2_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_t0_t1_x2_avx512 +.p2align 4 +_wc_mldsa_encode_t0_t1_x2_avx512: +#endif /* __APPLE__ */ + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1(%rip), %zmm6 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_d_max_half(%rip), %zmm7 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_vs_13(%rip), %zmm8 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even(%rip), %zmm9 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd(%rip), %zmm10 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_vs_10(%rip), %zmm11 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even(%rip), %zmm12 + vbroadcasti64x4 L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd(%rip), %zmm13 + vmovdqu64 (%rdi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 64(%rdi), %ymm0 + vinserti64x4 $0x01, 64(%rsi), %zmm0, %zmm0 + vmovdqu64 96(%rdi), %ymm1 + vinserti64x4 $0x01, 96(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 128(%rdi), %ymm0 + vinserti64x4 $0x01, 128(%rsi), %zmm0, %zmm0 + vmovdqu64 160(%rdi), %ymm1 + vinserti64x4 $0x01, 160(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 192(%rdi), %ymm0 + vinserti64x4 $0x01, 192(%rsi), %zmm0, %zmm0 + vmovdqu64 224(%rdi), %ymm1 + vinserti64x4 $0x01, 224(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 256(%rdi), %ymm0 + vinserti64x4 $0x01, 256(%rsi), %zmm0, %zmm0 + vmovdqu64 288(%rdi), %ymm1 + vinserti64x4 $0x01, 288(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 320(%rdi), %ymm0 + vinserti64x4 $0x01, 320(%rsi), %zmm0, %zmm0 + vmovdqu64 352(%rdi), %ymm1 + vinserti64x4 $0x01, 352(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 384(%rdi), %ymm0 + vinserti64x4 $0x01, 384(%rsi), %zmm0, %zmm0 + vmovdqu64 416(%rdi), %ymm1 + vinserti64x4 $0x01, 416(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 448(%rdi), %ymm0 + vinserti64x4 $0x01, 448(%rsi), %zmm0, %zmm0 + vmovdqu64 480(%rdi), %ymm1 + vinserti64x4 $0x01, 480(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 512(%rdi), %ymm0 + vinserti64x4 $0x01, 512(%rsi), %zmm0, %zmm0 + vmovdqu64 544(%rdi), %ymm1 + vinserti64x4 $0x01, 544(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 576(%rdi), %ymm0 + vinserti64x4 $0x01, 576(%rsi), %zmm0, %zmm0 + vmovdqu64 608(%rdi), %ymm1 + vinserti64x4 $0x01, 608(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 640(%rdi), %ymm0 + vinserti64x4 $0x01, 640(%rsi), %zmm0, %zmm0 + vmovdqu64 672(%rdi), %ymm1 + vinserti64x4 $0x01, 672(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 704(%rdi), %ymm0 + vinserti64x4 $0x01, 704(%rsi), %zmm0, %zmm0 + vmovdqu64 736(%rdi), %ymm1 + vinserti64x4 $0x01, 736(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 768(%rdi), %ymm0 + vinserti64x4 $0x01, 768(%rsi), %zmm0, %zmm0 + vmovdqu64 800(%rdi), %ymm1 + vinserti64x4 $0x01, 800(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 832(%rdi), %ymm0 + vinserti64x4 $0x01, 832(%rsi), %zmm0, %zmm0 + vmovdqu64 864(%rdi), %ymm1 + vinserti64x4 $0x01, 864(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 896(%rdi), %ymm0 + vinserti64x4 $0x01, 896(%rsi), %zmm0, %zmm0 + vmovdqu64 928(%rdi), %ymm1 + vinserti64x4 $0x01, 928(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + vmovdqu64 %xmm3, (%rdx) + vmovdqu64 %xmm1, (%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + vmovdqu64 %xmm5, (%r8) + vmovdqu64 %xmm1, (%r9) + addq $10, %r8 + addq $10, %r9 + vmovdqu64 960(%rdi), %ymm0 + vinserti64x4 $0x01, 960(%rsi), %zmm0, %zmm0 + vmovdqu64 992(%rdi), %ymm1 + vinserti64x4 $0x01, 992(%rsi), %zmm1, %zmm1 + vpaddd %zmm6, %zmm0, %zmm4 + vpaddd %zmm6, %zmm1, %zmm5 + vpsrld $13, %zmm4, %zmm4 + vpsrld $13, %zmm5, %zmm5 + vpslld $13, %zmm4, %zmm2 + vpslld $13, %zmm5, %zmm3 + vpsubd %zmm2, %zmm0, %zmm2 + vpsubd %zmm3, %zmm1, %zmm3 + vpsubd %zmm2, %zmm7, %zmm2 + vpsubd %zmm3, %zmm7, %zmm3 + vpsllvd %zmm8, %zmm2, %zmm2 + vpsllvd %zmm8, %zmm3, %zmm3 + vpshufb %zmm10, %zmm2, %zmm0 + vpshufb %zmm10, %zmm3, %zmm1 + vpshufb %zmm9, %zmm2, %zmm2 + vpshufb %zmm9, %zmm3, %zmm3 + vpord %zmm0, %zmm2, %zmm2 + vpord %zmm1, %zmm3, %zmm3 + vshufi64x2 $0xf5, %zmm2, %zmm2, %zmm0 + vpord %zmm0, %zmm2, %zmm2 + vshufi64x2 $0xf5, %zmm3, %zmm3, %zmm1 + vpord %zmm1, %zmm3, %zmm3 + vextracti32x4 $2, %zmm2, %xmm0 + vmovdqu64 %xmm2, (%rdx) + vmovdqu64 %xmm0, (%rcx) + addq $13, %rdx + addq $13, %rcx + vextracti32x4 $2, %zmm3, %xmm1 + movq %xmm3, (%rdx) + vpextrd $2, %xmm3, 8(%rdx) + vpextrb $12, %xmm3, 12(%rdx) + movq %xmm1, (%rcx) + vpextrd $2, %xmm1, 8(%rcx) + vpextrb $12, %xmm1, 12(%rcx) + addq $13, %rdx + addq $13, %rcx + vpsllvd %zmm11, %zmm4, %zmm4 + vpsllvd %zmm11, %zmm5, %zmm5 + vpshufb %zmm13, %zmm4, %zmm0 + vpshufb %zmm13, %zmm5, %zmm1 + vpshufb %zmm12, %zmm4, %zmm4 + vpshufb %zmm12, %zmm5, %zmm5 + vpord %zmm0, %zmm4, %zmm4 + vpord %zmm1, %zmm5, %zmm5 + vshufi64x2 $0xf5, %zmm4, %zmm4, %zmm0 + vpord %zmm0, %zmm4, %zmm4 + vshufi64x2 $0xf5, %zmm5, %zmm5, %zmm1 + vpord %zmm1, %zmm5, %zmm5 + vextracti32x4 $2, %zmm4, %xmm0 + vmovdqu64 %xmm4, (%r8) + vmovdqu64 %xmm0, (%r9) + addq $10, %r8 + addq $10, %r9 + vextracti32x4 $2, %zmm5, %xmm1 + movq %xmm5, (%r8) + vpextrw $4, %xmm5, 8(%r8) + movq %xmm1, (%r9) + vpextrw $4, %xmm1, 8(%r9) + addq $10, %r8 + addq $10, %r9 + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_encode_t0_t1_x2_avx512,.-wc_mldsa_encode_t0_t1_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_avx512_zetas_1p: +.long 0x000064f7,0x000064f7,0x000064f7,0x000064f7 +.long 0x000064f7,0x000064f7,0x000064f7,0x000064f7 +.long 0x000064f7,0x000064f7,0x000064f7,0x000064f7 +.long 0x000064f7,0x000064f7,0x000064f7,0x000064f7 +.long 0x6d1f44f7,0x6d1f44f7,0x6d1f44f7,0x6d1f44f7 +.long 0x6d1f44f7,0x6d1f44f7,0x6d1f44f7,0x6d1f44f7 +.long 0x6d1f44f7,0x6d1f44f7,0x6d1f44f7,0x6d1f44f7 +.long 0x6d1f44f7,0x6d1f44f7,0x6d1f44f7,0x6d1f44f7 +.long 0xffd83102,0xffd83102,0xffd83102,0xffd83102 +.long 0xffd83102,0xffd83102,0xffd83102,0xffd83102 +.long 0xffd83102,0xffd83102,0xffd83102,0xffd83102 +.long 0xffd83102,0xffd83102,0xffd83102,0xffd83102 +.long 0x8cf87102,0x8cf87102,0x8cf87102,0x8cf87102 +.long 0x8cf87102,0x8cf87102,0x8cf87102,0x8cf87102 +.long 0x8cf87102,0x8cf87102,0x8cf87102,0x8cf87102 +.long 0x8cf87102,0x8cf87102,0x8cf87102,0x8cf87102 +.long 0xfff81503,0xfff81503,0xfff81503,0xfff81503 +.long 0xfff81503,0xfff81503,0xfff81503,0xfff81503 +.long 0xfff81503,0xfff81503,0xfff81503,0xfff81503 +.long 0xfff81503,0xfff81503,0xfff81503,0xfff81503 +.long 0x8d187503,0x8d187503,0x8d187503,0x8d187503 +.long 0x8d187503,0x8d187503,0x8d187503,0x8d187503 +.long 0x8d187503,0x8d187503,0x8d187503,0x8d187503 +.long 0x8d187503,0x8d187503,0x8d187503,0x8d187503 +.long 0x00039e44,0x00039e44,0x00039e44,0x00039e44 +.long 0x00039e44,0x00039e44,0x00039e44,0x00039e44 +.long 0x00039e44,0x00039e44,0x00039e44,0x00039e44 +.long 0x00039e44,0x00039e44,0x00039e44,0x00039e44 +.long 0x61cc1e44,0x61cc1e44,0x61cc1e44,0x61cc1e44 +.long 0x61cc1e44,0x61cc1e44,0x61cc1e44,0x61cc1e44 +.long 0x61cc1e44,0x61cc1e44,0x61cc1e44,0x61cc1e44 +.long 0x61cc1e44,0x61cc1e44,0x61cc1e44,0x61cc1e44 +.long 0xfff42118,0xfff42118,0xfff42118,0xfff42118 +.long 0xfff42118,0xfff42118,0xfff42118,0xfff42118 +.long 0xfff42118,0xfff42118,0xfff42118,0xfff42118 +.long 0xfff42118,0xfff42118,0xfff42118,0xfff42118 +.long 0x58172118,0x58172118,0x58172118,0x58172118 +.long 0x58172118,0x58172118,0x58172118,0x58172118 +.long 0x58172118,0x58172118,0x58172118,0x58172118 +.long 0x58172118,0x58172118,0x58172118,0x58172118 +.long 0xfff2a128,0xfff2a128,0xfff2a128,0xfff2a128 +.long 0xfff2a128,0xfff2a128,0xfff2a128,0xfff2a128 +.long 0xfff2a128,0xfff2a128,0xfff2a128,0xfff2a128 +.long 0xfff2a128,0xfff2a128,0xfff2a128,0xfff2a128 +.long 0x6017a128,0x6017a128,0x6017a128,0x6017a128 +.long 0x6017a128,0x6017a128,0x6017a128,0x6017a128 +.long 0x6017a128,0x6017a128,0x6017a128,0x6017a128 +.long 0x6017a128,0x6017a128,0x6017a128,0x6017a128 +.long 0x00071e24,0x00071e24,0x00071e24,0x00071e24 +.long 0x00071e24,0x00071e24,0x00071e24,0x00071e24 +.long 0x00071e24,0x00071e24,0x00071e24,0x00071e24 +.long 0x00071e24,0x00071e24,0x00071e24,0x00071e24 +.long 0x61cb9e24,0x61cb9e24,0x61cb9e24,0x61cb9e24 +.long 0x61cb9e24,0x61cb9e24,0x61cb9e24,0x61cb9e24 +.long 0x61cb9e24,0x61cb9e24,0x61cb9e24,0x61cb9e24 +.long 0x61cb9e24,0x61cb9e24,0x61cb9e24,0x61cb9e24 +.long 0x001bde2b,0x001bde2b,0x001bde2b,0x001bde2b +.long 0x001bde2b,0x001bde2b,0x001bde2b,0x001bde2b +.long 0x001bde2b,0x001bde2b,0x001bde2b,0x001bde2b +.long 0x001bde2b,0x001bde2b,0x001bde2b,0x001bde2b +.long 0x12613e2b,0x12613e2b,0x12613e2b,0x12613e2b +.long 0x12613e2b,0x12613e2b,0x12613e2b,0x12613e2b +.long 0x12613e2b,0x12613e2b,0x12613e2b,0x12613e2b +.long 0x12613e2b,0x12613e2b,0x12613e2b,0x12613e2b +.long 0x0023e92b,0x0023e92b,0x0023e92b,0x0023e92b +.long 0x0023e92b,0x0023e92b,0x0023e92b,0x0023e92b +.long 0x0023e92b,0x0023e92b,0x0023e92b,0x0023e92b +.long 0x0023e92b,0x0023e92b,0x0023e92b,0x0023e92b +.long 0x93c9492b,0x93c9492b,0x93c9492b,0x93c9492b +.long 0x93c9492b,0x93c9492b,0x93c9492b,0x93c9492b +.long 0x93c9492b,0x93c9492b,0x93c9492b,0x93c9492b +.long 0x93c9492b,0x93c9492b,0x93c9492b,0x93c9492b +.long 0xfffa84ad,0xfffa84ad,0xfffa84ad,0xfffa84ad +.long 0xfffa84ad,0xfffa84ad,0xfffa84ad,0xfffa84ad +.long 0xfffa84ad,0xfffa84ad,0xfffa84ad,0xfffa84ad +.long 0xfffa84ad,0xfffa84ad,0xfffa84ad,0xfffa84ad +.long 0xae1024ad,0xae1024ad,0xae1024ad,0xae1024ad +.long 0xae1024ad,0xae1024ad,0xae1024ad,0xae1024ad +.long 0xae1024ad,0xae1024ad,0xae1024ad,0xae1024ad +.long 0xae1024ad,0xae1024ad,0xae1024ad,0xae1024ad +.long 0xffe0147f,0xffe0147f,0xffe0147f,0xffe0147f +.long 0xffe0147f,0xffe0147f,0xffe0147f,0xffe0147f +.long 0xffe0147f,0xffe0147f,0xffe0147f,0xffe0147f +.long 0xffe0147f,0xffe0147f,0xffe0147f,0xffe0147f +.long 0xbeeff47f,0xbeeff47f,0xbeeff47f,0xbeeff47f +.long 0xbeeff47f,0xbeeff47f,0xbeeff47f,0xbeeff47f +.long 0xbeeff47f,0xbeeff47f,0xbeeff47f,0xbeeff47f +.long 0xbeeff47f,0xbeeff47f,0xbeeff47f,0xbeeff47f +.long 0x002f9a75,0x002f9a75,0x002f9a75,0x002f9a75 +.long 0x002f9a75,0x002f9a75,0x002f9a75,0x002f9a75 +.long 0x002f9a75,0x002f9a75,0x002f9a75,0x002f9a75 +.long 0x002f9a75,0x002f9a75,0x002f9a75,0x002f9a75 +.long 0x8cfe3a75,0x8cfe3a75,0x8cfe3a75,0x8cfe3a75 +.long 0x8cfe3a75,0x8cfe3a75,0x8cfe3a75,0x8cfe3a75 +.long 0x8cfe3a75,0x8cfe3a75,0x8cfe3a75,0x8cfe3a75 +.long 0x8cfe3a75,0x8cfe3a75,0x8cfe3a75,0x8cfe3a75 +.long 0xffd3fb09,0xffd3fb09,0xffd3fb09,0xffd3fb09 +.long 0xffd3fb09,0xffd3fb09,0xffd3fb09,0xffd3fb09 +.long 0xffd3fb09,0xffd3fb09,0xffd3fb09,0xffd3fb09 +.long 0xffd3fb09,0xffd3fb09,0xffd3fb09,0xffd3fb09 +.long 0x1eb51b09,0x1eb51b09,0x1eb51b09,0x1eb51b09 +.long 0x1eb51b09,0x1eb51b09,0x1eb51b09,0x1eb51b09 +.long 0x1eb51b09,0x1eb51b09,0x1eb51b09,0x1eb51b09 +.long 0x1eb51b09,0x1eb51b09,0x1eb51b09,0x1eb51b09 +.long 0x002f7a49,0x002f7a49,0x002f7a49,0x002f7a49 +.long 0x002f7a49,0x002f7a49,0x002f7a49,0x002f7a49 +.long 0x002f7a49,0x002f7a49,0x002f7a49,0x002f7a49 +.long 0x002f7a49,0x002f7a49,0x002f7a49,0x002f7a49 +.long 0xeef89a49,0xeef89a49,0xeef89a49,0xeef89a49 +.long 0xeef89a49,0xeef89a49,0xeef89a49,0xeef89a49 +.long 0xeef89a49,0xeef89a49,0xeef89a49,0xeef89a49 +.long 0xeef89a49,0xeef89a49,0xeef89a49,0xeef89a49 +.long 0x0028e527,0x0028e527,0x0028e527,0x0028e527 +.long 0x0028e527,0x0028e527,0x0028e527,0x0028e527 +.long 0x0028e527,0x0028e527,0x0028e527,0x0028e527 +.long 0x0028e527,0x0028e527,0x0028e527,0x0028e527 +.long 0x254dc527,0x254dc527,0x254dc527,0x254dc527 +.long 0x254dc527,0x254dc527,0x254dc527,0x254dc527 +.long 0x254dc527,0x254dc527,0x254dc527,0x254dc527 +.long 0x254dc527,0x254dc527,0x254dc527,0x254dc527 +.long 0x00299658,0x00299658,0x00299658,0x00299658 +.long 0x00299658,0x00299658,0x00299658,0x00299658 +.long 0x000fa070,0x000fa070,0x000fa070,0x000fa070 +.long 0x000fa070,0x000fa070,0x000fa070,0x000fa070 +.long 0x66f49658,0x66f49658,0x66f49658,0x66f49658 +.long 0x66f49658,0x66f49658,0x66f49658,0x66f49658 +.long 0x7c1da070,0x7c1da070,0x7c1da070,0x7c1da070 +.long 0x7c1da070,0x7c1da070,0x7c1da070,0x7c1da070 +.long 0xffef85a4,0xffef85a4,0xffef85a4,0xffef85a4 +.long 0xffef85a4,0xffef85a4,0xffef85a4,0xffef85a4 +.long 0x0036b788,0x0036b788,0x0036b788,0x0036b788 +.long 0x0036b788,0x0036b788,0x0036b788,0x0036b788 +.long 0xaea405a4,0xaea405a4,0xaea405a4,0xaea405a4 +.long 0xaea405a4,0xaea405a4,0xaea405a4,0xaea405a4 +.long 0x3327b788,0x3327b788,0x3327b788,0x3327b788 +.long 0x3327b788,0x3327b788,0x3327b788,0x3327b788 +.long 0xfff79d90,0xfff79d90,0xfff79d90,0xfff79d90 +.long 0xfff79d90,0xfff79d90,0xfff79d90,0xfff79d90 +.long 0xffeeeaa0,0xffeeeaa0,0xffeeeaa0,0xffeeeaa0 +.long 0xffeeeaa0,0xffeeeaa0,0xffeeeaa0,0xffeeeaa0 +.long 0x6ba99d90,0x6ba99d90,0x6ba99d90,0x6ba99d90 +.long 0x6ba99d90,0x6ba99d90,0x6ba99d90,0x6ba99d90 +.long 0x0d42eaa0,0x0d42eaa0,0x0d42eaa0,0x0d42eaa0 +.long 0x0d42eaa0,0x0d42eaa0,0x0d42eaa0,0x0d42eaa0 +.long 0x0027f968,0x0027f968,0x0027f968,0x0027f968 +.long 0x0027f968,0x0027f968,0x0027f968,0x0027f968 +.long 0xffdfd37b,0xffdfd37b,0xffdfd37b,0xffdfd37b +.long 0xffdfd37b,0xffdfd37b,0xffdfd37b,0xffdfd37b +.long 0xeb54f968,0xeb54f968,0xeb54f968,0xeb54f968 +.long 0xeb54f968,0xeb54f968,0xeb54f968,0xeb54f968 +.long 0x28cf337b,0x28cf337b,0x28cf337b,0x28cf337b +.long 0x28cf337b,0x28cf337b,0x28cf337b,0x28cf337b +.long 0xffdfadd6,0xffdfadd6,0xffdfadd6,0xffdfadd6 +.long 0xffdfadd6,0xffdfadd6,0xffdfadd6,0xffdfadd6 +.long 0xffc51ae7,0xffc51ae7,0xffc51ae7,0xffc51ae7 +.long 0xffc51ae7,0xffc51ae7,0xffc51ae7,0xffc51ae7 +.long 0x629a6dd6,0x629a6dd6,0x629a6dd6,0x629a6dd6 +.long 0x629a6dd6,0x629a6dd6,0x629a6dd6,0x629a6dd6 +.long 0xcba1fae7,0xcba1fae7,0xcba1fae7,0xcba1fae7 +.long 0xcba1fae7,0xcba1fae7,0xcba1fae7,0xcba1fae7 +.long 0xffeaa4f7,0xffeaa4f7,0xffeaa4f7,0xffeaa4f7 +.long 0xffeaa4f7,0xffeaa4f7,0xffeaa4f7,0xffeaa4f7 +.long 0xffcdfc98,0xffcdfc98,0xffcdfc98,0xffcdfc98 +.long 0xffcdfc98,0xffcdfc98,0xffcdfc98,0xffcdfc98 +.long 0xb50984f7,0xb50984f7,0xb50984f7,0xb50984f7 +.long 0xb50984f7,0xb50984f7,0xb50984f7,0xb50984f7 +.long 0xd360fc98,0xd360fc98,0xd360fc98,0xd360fc98 +.long 0xd360fc98,0xd360fc98,0xd360fc98,0xd360fc98 +.long 0x001ad035,0x001ad035,0x001ad035,0x001ad035 +.long 0x001ad035,0x001ad035,0x001ad035,0x001ad035 +.long 0xffffb422,0xffffb422,0xffffb422,0xffffb422 +.long 0xffffb422,0xffffb422,0xffffb422,0xffffb422 +.long 0x13a17035,0x13a17035,0x13a17035,0x13a17035 +.long 0x13a17035,0x13a17035,0x13a17035,0x13a17035 +.long 0x6d83f422,0x6d83f422,0x6d83f422,0x6d83f422 +.long 0x6d83f422,0x6d83f422,0x6d83f422,0x6d83f422 +.long 0x003d3201,0x003d3201,0x003d3201,0x003d3201 +.long 0x003d3201,0x003d3201,0x003d3201,0x003d3201 +.long 0x000445c5,0x000445c5,0x000445c5,0x000445c5 +.long 0x000445c5,0x000445c5,0x000445c5,0x000445c5 +.long 0xa9fd5201,0xa9fd5201,0xa9fd5201,0xa9fd5201 +.long 0xa9fd5201,0xa9fd5201,0xa9fd5201,0xa9fd5201 +.long 0xba3ce5c5,0xba3ce5c5,0xba3ce5c5,0xba3ce5c5 +.long 0xba3ce5c5,0xba3ce5c5,0xba3ce5c5,0xba3ce5c5 +.long 0x00294a67,0x00294a67,0x00294a67,0x00294a67 +.long 0x00017620,0x00017620,0x00017620,0x00017620 +.long 0x002ef4cd,0x002ef4cd,0x002ef4cd,0x002ef4cd +.long 0x0035dec5,0x0035dec5,0x0035dec5,0x0035dec5 +.long 0x91f62a67,0x91f62a67,0x91f62a67,0x91f62a67 +.long 0x9ec57620,0x9ec57620,0x9ec57620,0x9ec57620 +.long 0xac4894cd,0xac4894cd,0xac4894cd,0xac4894cd +.long 0x6d8e7ec5,0x6d8e7ec5,0x6d8e7ec5,0x6d8e7ec5 +.long 0xffe6a503,0xffe6a503,0xffe6a503,0xffe6a503 +.long 0xffc9302c,0xffc9302c,0xffc9302c,0xffc9302c +.long 0xffd947d4,0xffd947d4,0xffd947d4,0xffd947d4 +.long 0x003bbeaf,0x003bbeaf,0x003bbeaf,0x003bbeaf +.long 0x5f070503,0x5f070503,0x5f070503,0x5f070503 +.long 0xbfceb02c,0xbfceb02c,0xbfceb02c,0xbfceb02c +.long 0x8ed3c7d4,0x8ed3c7d4,0x8ed3c7d4,0x8ed3c7d4 +.long 0xdc919eaf,0xdc919eaf,0xdc919eaf,0xdc919eaf +.long 0xffc51585,0xffc51585,0xffc51585,0xffc51585 +.long 0xffd18e7c,0xffd18e7c,0xffd18e7c,0xffd18e7c +.long 0x00368a96,0x00368a96,0x00368a96,0x00368a96 +.long 0xffd43e41,0xffd43e41,0xffd43e41,0xffd43e41 +.long 0xf3f5b585,0xf3f5b585,0xf3f5b585,0xf3f5b585 +.long 0xe3a10e7c,0xe3a10e7c,0xe3a10e7c,0xe3a10e7c +.long 0xde894a96,0xde894a96,0xde894a96,0xde894a96 +.long 0x6b1c5e41,0x6b1c5e41,0x6b1c5e41,0x6b1c5e41 +.long 0x00360400,0x00360400,0x00360400,0x00360400 +.long 0xfffb6a4d,0xfffb6a4d,0xfffb6a4d,0xfffb6a4d +.long 0x0023d69c,0x0023d69c,0x0023d69c,0x0023d69c +.long 0xfff7c55d,0xfff7c55d,0xfff7c55d,0xfff7c55d +.long 0xc0b60400,0xc0b60400,0xc0b60400,0xc0b60400 +.long 0x7ac50a4d,0x7ac50a4d,0x7ac50a4d,0x7ac50a4d +.long 0x9cf7569c,0x9cf7569c,0x9cf7569c,0x9cf7569c +.long 0xbe23655d,0xbe23655d,0xbe23655d,0xbe23655d +.long 0xffe6123d,0xffe6123d,0xffe6123d,0xffe6123d +.long 0xffe6ead6,0xffe6ead6,0xffe6ead6,0xffe6ead6 +.long 0x00357e1e,0x00357e1e,0x00357e1e,0x00357e1e +.long 0xffc5af59,0xffc5af59,0xffc5af59,0xffc5af59 +.long 0x97adb23d,0x97adb23d,0x97adb23d,0x97adb23d +.long 0xca41aad6,0xca41aad6,0xca41aad6,0xca41aad6 +.long 0x18f93e1e,0x18f93e1e,0x18f93e1e,0x18f93e1e +.long 0x6d30cf59,0x6d30cf59,0x6d30cf59,0x6d30cf59 +.long 0x0035843f,0x0035843f,0x0035843f,0x0035843f +.long 0xffdf5617,0xffdf5617,0xffdf5617,0xffdf5617 +.long 0xffe7945c,0xffe7945c,0xffe7945c,0xffe7945c +.long 0x0038738c,0x0038738c,0x0038738c,0x0038738c +.long 0x8d3d643f,0x8d3d643f,0x8d3d643f,0x8d3d643f +.long 0x3b223617,0x3b223617,0x3b223617,0x3b223617 +.long 0x3473145c,0x3473145c,0x3473145c,0x3473145c +.long 0x78a9f38c,0x78a9f38c,0x78a9f38c,0x78a9f38c +.long 0x000c63a8,0x000c63a8,0x000c63a8,0x000c63a8 +.long 0x00081b9a,0x00081b9a,0x00081b9a,0x00081b9a +.long 0x000e8f76,0x000e8f76,0x000e8f76,0x000e8f76 +.long 0x003b3853,0x003b3853,0x003b3853,0x003b3853 +.long 0x588163a8,0x588163a8,0x588163a8,0x588163a8 +.long 0x9e7b5b9a,0x9e7b5b9a,0x9e7b5b9a,0x9e7b5b9a +.long 0xeefd4f76,0xeefd4f76,0xeefd4f76,0xeefd4f76 +.long 0x89c59853,0x89c59853,0x89c59853,0x89c59853 +.long 0x003b8534,0x003b8534,0x003b8534,0x003b8534 +.long 0xffd8fc30,0xffd8fc30,0xffd8fc30,0xffd8fc30 +.long 0x001f9d54,0x001f9d54,0x001f9d54,0x001f9d54 +.long 0xffd54f2d,0xffd54f2d,0xffd54f2d,0xffd54f2d +.long 0xa6e20534,0xa6e20534,0xa6e20534,0xa6e20534 +.long 0xc75efc30,0xc75efc30,0xc75efc30,0xc75efc30 +.long 0x99ca1d54,0x99ca1d54,0x99ca1d54,0x99ca1d54 +.long 0xc73aef2d,0xc73aef2d,0xc73aef2d,0xc73aef2d +.long 0xffc406e5,0xffc406e5,0xffe8ac81,0xffe8ac81 +.long 0xffc7e1cf,0xffc7e1cf,0xffd19819,0xffd19819 +.long 0xffe9d65d,0xffe9d65d,0x003509ee,0x003509ee +.long 0x002135c7,0x002135c7,0xffe7cfbb,0xffe7cfbb +.long 0xa220a6e5,0xa220a6e5,0xd8f8cc81,0xd8f8cc81 +.long 0x5081c1cf,0x5081c1cf,0x8a54b819,0x8a54b819 +.long 0x8035765d,0x8035765d,0x6272c9ee,0x6272c9ee +.long 0x5f5a15c7,0x5f5a15c7,0x085f2fbb,0x085f2fbb +.long 0xffeccf75,0xffeccf75,0x001d9772,0x001d9772 +.long 0xffc1b072,0xffc1b072,0xfff0bcf6,0xfff0bcf6 +.long 0xffcf5280,0xffcf5280,0xffcfd2ae,0xffcfd2ae +.long 0xffc890e0,0xffc890e0,0x0001efca,0x0001efca +.long 0xb35b6f75,0xb35b6f75,0xc20bd772,0xc20bd772 +.long 0xc4cff072,0xc4cff072,0x748f7cf6,0x748f7cf6 +.long 0xaa1f5280,0xaa1f5280,0x5b2592ae,0x5b2592ae +.long 0x21e490e0,0x21e490e0,0x80fb2fca,0x80fb2fca +.long 0x003410f2,0x003410f2,0xfff0fe85,0xfff0fe85 +.long 0x0020c638,0x0020c638,0x00296e9f,0x00296e9f +.long 0xffd2b7a3,0xffd2b7a3,0xffc7a44b,0xffc7a44b +.long 0xfff9ba6d,0xfff9ba6d,0xffda3409,0xffda3409 +.long 0xd15250f2,0xd15250f2,0xf1419e85,0xf1419e85 +.long 0xdce7c638,0xdce7c638,0x5a7d4e9f,0x5a7d4e9f +.long 0x114717a3,0x114717a3,0xfad1044b,0xfad1044b +.long 0xb4c75a6d,0xb4c75a6d,0x65db5409,0x65db5409 +.long 0xfff5c282,0xfff5c282,0xffed4113,0xffed4113 +.long 0xffffa63b,0xffffa63b,0xffec09f7,0xffec09f7 +.long 0xfffa2bdd,0xfffa2bdd,0x001495d4,0x001495d4 +.long 0x001c4563,0x001c4563,0xffea2c62,0xffea2c62 +.long 0x7f460282,0x7f460282,0x6a8fa113,0x6a8fa113 +.long 0xc347063b,0xc347063b,0x61aae9f7,0x61aae9f7 +.long 0xcaf5cbdd,0xcaf5cbdd,0xf8cf15d4,0xf8cf15d4 +.long 0x6348a563,0x6348a563,0x9c766c62,0x9c766c62 +.long 0xffccfbe9,0xffccfbe9,0x00040af0,0x00040af0 +.long 0x0007c417,0x0007c417,0x002f4588,0x002f4588 +.long 0x0000ad00,0x0000ad00,0xffef36be,0xffef36be +.long 0x000dcd44,0x000dcd44,0x003c675a,0x003c675a +.long 0x4eca1be9,0x4eca1be9,0xc9620af0,0xc9620af0 +.long 0x490aa417,0x490aa417,0x44e04588,0x44e04588 +.long 0x95a0ad00,0x95a0ad00,0x7fc6f6be,0x7fc6f6be +.long 0x27b64d44,0x27b64d44,0x4827a75a,0x4827a75a +.long 0xffc72bca,0xffc72bca,0xffffde7e,0xffffde7e +.long 0x00193948,0x00193948,0xffce69c0,0xffce69c0 +.long 0x0024756c,0x0024756c,0xfffcc7df,0xfffcc7df +.long 0x000b98a1,0x000b98a1,0xffebe808,0xffebe808 +.long 0x28406bca,0x28406bca,0xb4cf9e7e,0xb4cf9e7e +.long 0xa3423948,0xa3423948,0xed0669c0,0xed0669c0 +.long 0x88d1f56c,0x88d1f56c,0x2578a7df,0x2578a7df +.long 0xa69fb8a1,0xa69fb8a1,0x98ece808,0x98ece808 +.long 0x0002e46c,0x0002e46c,0xffc9c808,0xffc9c808 +.long 0x003036c2,0x003036c2,0xffe3bff6,0xffe3bff6 +.long 0xffdb3c93,0xffdb3c93,0xfffd4ae0,0xfffd4ae0 +.long 0x00141305,0x00141305,0x00147792,0x00147792 +.long 0xd690646c,0xd690646c,0x54cac808,0x54cac808 +.long 0xae0876c2,0xae0876c2,0x54e27ff6,0x54e27ff6 +.long 0x69ed9c93,0x69ed9c93,0xb9594ae0,0xb9594ae0 +.long 0x13f4b305,0x13f4b305,0x0e06b792,0x0e06b792 +.long 0x00139e25,0x00139e25,0xffe7d0e0,0xffe7d0e0 +.long 0xfff39944,0xfff39944,0xffea0802,0xffea0802 +.long 0xffd1eea2,0xffd1eea2,0xffc4c79c,0xffc4c79c +.long 0xffc8a057,0xffc8a057,0x003a97d9,0x003a97d9 +.long 0xf5583e25,0xf5583e25,0x0a03d0e0,0x0a03d0e0 +.long 0xe11c1944,0xe11c1944,0x47ea4802,0x47ea4802 +.long 0x74a62ea2,0x74a62ea2,0x3ab8479c,0x3ab8479c +.long 0x44538057,0x44538057,0xcab5b7d9,0xcab5b7d9 +.long 0x001fea93,0x0033ff5a,0x002358d4,0x003a41f8 +.long 0xffccff72,0x00223dfb,0xffdaab9f,0xffc9a422 +.long 0x000412f5,0x00252587,0xffed24f0,0x00359b5d +.long 0xffca48a0,0xffc6a2fc,0xffedbb56,0xffcf45de +.long 0xfff24a93,0x3b1f3f5a,0x513dd8d4,0x2c7941f8 +.long 0xaebb3f72,0x36619dfb,0x01ce8b9f,0xab4de422 +.long 0xdbe2b2f5,0xfd560587,0xec8b24f0,0x79213b5d +.long 0x78de48a0,0x462622fc,0x64587b56,0x718b05de +.long 0x000dbe5e,0x001c5e1a,0x000de0e6,0x000c7f5a +.long 0x00078f83,0xffe7628a,0xffff5704,0xfff806fc +.long 0xfff60021,0xffd05af6,0x001f0084,0x0030ef86 +.long 0xffc9b97d,0xfff7fcd6,0xfff44592,0xffc921c2 +.long 0x00d97e5e,0xe6df9e1a,0xe12aa0e6,0x4af7bf5a +.long 0x3c77ef83,0xcf38a28a,0x78dfd704,0x72d786fc +.long 0x337a2021,0x682f1af6,0xae2f8084,0x7321af86 +.long 0x6c79597d,0xec92bcd6,0x07a68592,0x4b0161c2 +.long 0x00053919,0x0004610c,0xffdacd41,0x003eb01b +.long 0x003472e7,0xffcd003b,0x001a7cc7,0x00031924 +.long 0x002b5ee5,0x00291199,0xffd87a3a,0x00134d71 +.long 0x003de11c,0x00130984,0x0025f051,0x00185a46 +.long 0x7ea85919,0x3625e10c,0xbd02ed41,0x34c2101b +.long 0xb71152e7,0x6e54603b,0x08335cc7,0x61279924 +.long 0x8d87fee5,0xb9dc3199,0xda1fba3a,0x75416d71 +.long 0x9e61611c,0xaf438984,0xd9b01051,0x00611a46 +.long 0xffc68518,0x001314be,0x00283891,0xffc9db90 +.long 0xffd25089,0x001c853f,0x001d0b4b,0xffeff6a6 +.long 0xffeba8be,0x0012e11b,0xffcd5e3e,0xffea2d2f +.long 0xfff91de4,0x001406c7,0x00327283,0xffe20d6e +.long 0xa4698518,0xfbaad4be,0x02ba5891,0xb33bdb90 +.long 0x29637089,0xed44653f,0x28066b4b,0x43c4b6a6 +.long 0x0e0368be,0x3ab6411b,0x84951e3e,0x6a100d2f +.long 0xc1b59de4,0x396ce6c7,0x1902d283,0x428fcd6e +.long 0xffec7953,0x001d4099,0xffd92578,0xffeb05ad +.long 0x0016e405,0x000bdbe7,0x00221de8,0x0033f8cf +.long 0xfff7b934,0xffd4ca0c,0xffe67ff8,0xffe3d157 +.long 0xffd8911b,0xffc72c12,0x000910d8,0xffc65e1f +.long 0x3196d953,0xbfb06099,0x48882578,0x3e20a5ad +.long 0xee178405,0x2408bbe7,0xefdf1de8,0x53cdd8cf +.long 0x2d1e3934,0xc3164a0c,0xb3e57ff8,0x2a8eb157 +.long 0xf07bf11b,0x24496c12,0x162410d8,0x380a3e1f +.long 0xffe14658,0x00251d8b,0x002573b7,0xfffd7c8f +.long 0x001ddd98,0x00336898,0x0002d4bb,0xffed93a7 +.long 0xffcf6cbe,0x00027c1c,0x0018aa08,0x002dfd71 +.long 0x000c5ca5,0x0019379a,0xffc7a167,0xffe48c3d +.long 0x5cac4658,0x0a567d8b,0xaf1c53b7,0xa40f5c8f +.long 0x4fd0dd98,0x81466898,0xe91a34bb,0x7ae273a7 +.long 0x86672cbe,0xb185fc1c,0x3159aa08,0xcb5c1d71 +.long 0xcd20fca5,0xc20c779a,0xdc748167,0x66ec2c3d +.long 0xffd1a13c,0x0035c539,0x003b0115,0x00041dc0 +.long 0x0021c4f7,0xfff11bf4,0x001a35e7,0x0007340e +.long 0xfff97d45,0x001a4cd0,0xffe47cae,0x001d2668 +.long 0xffe68e98,0xffef2633,0xfffc05da,0xffc57fdb +.long 0x85f9213c,0x005ce539,0x29dda115,0xa3bc1dc0 +.long 0x9940a4f7,0xf96f9bf4,0xef5715e7,0x1788f40e +.long 0xa1221d45,0x21b44cd0,0xf07a3cae,0x10ea2668 +.long 0xe5b98e98,0x97358633,0xfbb745da,0x2e40dfdb +.long 0xffd32764,0xffdde1af,0xfff993dd,0xffdd1d09 +.long 0x0002cc93,0xfff11805,0x00189c2a,0xffc9e5a9 +.long 0xfff78a50,0x003bcf2c,0xffff434e,0xffeb36df +.long 0x003c15ca,0x00155e68,0xfff316b6,0x001e29ce +.long 0x42bfa764,0xa093c1af,0xb7f533dd,0x42fe3d09 +.long 0x5c152c93,0x3471b805,0xa69ddc2a,0x0bff05a9 +.long 0x09418a50,0x94214f2c,0x7969034e,0x734716df +.long 0xc5f555ca,0x17e25e68,0xdfc9d6b6,0x1657e9ce +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_avx512_zeta1_1p: +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +.long 0xffc97e01,0xffc97e01,0xffc97e01,0xffc97e01 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_avx512_half_1p: +.long 0x00400000,0x00400000,0x00400000,0x00400000 +.long 0x00400000,0x00400000,0x00400000,0x00400000 +.long 0x00400000,0x00400000,0x00400000,0x00400000 +.long 0x00400000,0x00400000,0x00400000,0x00400000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_avx512_zetas_inv_1p: +.long 0xffe1d632,0x000ce94a,0xffeaa198,0xffc3ea36 +.long 0x0014c921,0x0000bcb2,0xffc430d4,0x000875b0 +.long 0x00361a57,0xffe763d6,0x000ee7fb,0xfffd336d +.long 0x0022e2f7,0x00066c23,0x00221e51,0x002cd89c +.long 0xe9a81632,0x2036294a,0xe81da198,0x3a0aaa36 +.long 0x8cb8e921,0x8696fcb2,0x6bdeb0d4,0xf6be75b0 +.long 0xf400fa57,0x596223d6,0xcb8e47fb,0xa3ead36d +.long 0xbd01c2f7,0x480acc23,0x5f6c3e51,0xbd40589c +.long 0x003a8025,0x0003fa26,0x0010d9cd,0x00197168 +.long 0xffe2d998,0x001b8352,0xffe5b330,0x000682bb +.long 0xfff8cbf2,0xffe5ca19,0x000ee40c,0xffde3b09 +.long 0xfffbe240,0xffc4feeb,0xffca3ac7,0x002e5ec4 +.long 0xd1bf2025,0x0448ba26,0x68ca79cd,0x1a467168 +.long 0xef15d998,0x0f85c352,0xde4bb330,0x5edde2bb +.long 0xe8770bf2,0x10a8ea19,0x0690640c,0x66bf5b09 +.long 0x5c43e240,0xd6225eeb,0xffa31ac7,0x7a06dec4 +.long 0x001b73c3,0x00385e99,0xffe6c866,0xfff3a35b +.long 0xffd2028f,0xffe755f8,0xfffd83e4,0x00309342 +.long 0x00126c59,0xfffd2b45,0xffcc9768,0xffe22268 +.long 0x00028371,0xffda8c49,0xffdae275,0x001eb9a8 +.long 0x9913d3c3,0x238b7e99,0x3df38866,0x32df035b +.long 0x34a3e28f,0xcea655f8,0x4e7a03e4,0x7998d342 +.long 0x851d8c59,0x16e5cb45,0x7eb99768,0xb02f2268 +.long 0x5bf0a371,0x50e3ac49,0xf5a98275,0xa353b9a8 +.long 0x0039a1e1,0xfff6ef28,0x0038d3ee,0x00276ee5 +.long 0x001c2ea9,0x00198008,0x002b35f4,0x000846cc +.long 0xffcc0731,0xffdde218,0xfff42419,0xffe91bfb +.long 0x0014fa53,0x0026da88,0xffe2bf67,0x001386ad +.long 0xc7f5c1e1,0xe9dbef28,0xdbb693ee,0x0f840ee5 +.long 0xd5714ea9,0x4c1a8008,0x3ce9b5f4,0xd2e1c6cc +.long 0xac322731,0x1020e218,0xdbf74419,0x11e87bfb +.long 0xc1df5a53,0xb777da88,0x404f9f67,0xce6926ad +.long 0x001df292,0xffcd8d7d,0xffebf939,0x0006e21c +.long 0x0015d2d1,0x0032a1c2,0xffed1ee5,0x00145742 +.long 0x0010095a,0xffe2f4b5,0xffe37ac1,0x002daf77 +.long 0x00362470,0xffd7c76f,0xffeceb42,0x00397ae8 +.long 0xbd703292,0xe6fd2d7d,0xc6931939,0x3e4a621c +.long 0x95eff2d1,0x7b6ae1c2,0xc549bee5,0xf1fc9742 +.long 0xbc3b495a,0xd7f994b5,0x12bb9ac1,0xd69c8f77 +.long 0x4cc42470,0xfd45a76f,0x04552b42,0x5b967ae8 +.long 0xffe7a5ba,0xffda0faf,0xffecf67c,0xffc21ee4 +.long 0xffecb28f,0x002785c6,0xffd6ee67,0xffd4a11b +.long 0xfffce6dc,0xffe58339,0x0032ffc5,0xffcb8d19 +.long 0xffc14fe5,0x002532bf,0xfffb9ef4,0xfffac6e7 +.long 0xff9ee5ba,0x264fefaf,0x50bc767c,0x619e9ee4 +.long 0x8abe928f,0x25e045c6,0x4623ce67,0x7278011b +.long 0x9ed866dc,0xf7cca339,0x91ab9fc5,0x48eead19 +.long 0xcb3defe5,0x42fd12bf,0xc9da1ef4,0x8157a6e7 +.long 0x0036de3e,0x000bba6e,0x0008032a,0x00364683 +.long 0xffcf107a,0xffe0ff7c,0x002fa50a,0x0009ffdf +.long 0x0007f904,0x0000a8fc,0x00189d76,0xfff8707d +.long 0xfff380a6,0xfff21f1a,0xffe3a1e6,0xfff241a2 +.long 0xb4fe9e3e,0xf8597a6e,0x136d432a,0x9386a683 +.long 0x8cde507a,0x51d07f7c,0x97d0e50a,0xcc85dfdf +.long 0x8d287904,0x872028fc,0x30c75d76,0xc388107d +.long 0xb50840a6,0x1ed55f1a,0x192061e6,0xff2681a2 +.long 0x0030ba22,0x001244aa,0x00395d04,0x0035b760 +.long 0xffca64a3,0x0012db10,0xffdada79,0xfffbed0b +.long 0x00365bde,0x00255461,0xffddc205,0x0033008e +.long 0xffc5be08,0xffdca72c,0xffcc00a6,0xffe0156d +.long 0x8e74fa22,0x9ba784aa,0xb9d9dd04,0x8721b760 +.long 0x86dec4a3,0x1374db10,0x02a9fa79,0x241d4d0b +.long 0x54b21bde,0xfe317461,0xc99e6205,0x5144c08e +.long 0xd386be08,0xaec2272c,0xc4e0c0a6,0x000db56d +.long 0xffc56827,0xffc56827,0x00375fa9,0x00375fa9 +.long 0x003b3864,0x003b3864,0x002e115e,0x002e115e +.long 0x0015f7fe,0x0015f7fe,0x000c66bc,0x000c66bc +.long 0x00182f20,0x00182f20,0xffec61db,0xffec61db +.long 0x354a4827,0x354a4827,0xbbac7fa9,0xbbac7fa9 +.long 0xc547b864,0xc547b864,0x8b59d15e,0x8b59d15e +.long 0xb815b7fe,0xb815b7fe,0x1ee3e6bc,0x1ee3e6bc +.long 0xf5fc2f20,0xf5fc2f20,0x0aa7c1db,0x0aa7c1db +.long 0xffeb886e,0xffeb886e,0xffebecfb,0xffebecfb +.long 0x0002b520,0x0002b520,0x0024c36d,0x0024c36d +.long 0x001c400a,0x001c400a,0xffcfc93e,0xffcfc93e +.long 0x003637f8,0x003637f8,0xfffd1b94,0xfffd1b94 +.long 0xf1f9486e,0xf1f9486e,0xec0b4cfb,0xec0b4cfb +.long 0x46a6b520,0x46a6b520,0x9612636d,0x9612636d +.long 0xab1d800a,0xab1d800a,0x51f7893e,0x51f7893e +.long 0xab3537f8,0xab3537f8,0x296f9b94,0x296f9b94 +.long 0x001417f8,0x001417f8,0xfff4675f,0xfff4675f +.long 0x00033821,0x00033821,0xffdb8a94,0xffdb8a94 +.long 0x00319640,0x00319640,0xffe6c6b8,0xffe6c6b8 +.long 0x00002182,0x00002182,0x0038d436,0x0038d436 +.long 0x671317f8,0x671317f8,0x5960475f,0x5960475f +.long 0xda875821,0xda875821,0x772e0a94,0x772e0a94 +.long 0x12f99640,0x12f99640,0x5cbdc6b8,0x5cbdc6b8 +.long 0x4b306182,0x4b306182,0xd7bf9436,0xd7bf9436 +.long 0xffc398a6,0xffc398a6,0xfff232bc,0xfff232bc +.long 0x0010c942,0x0010c942,0xffff5300,0xffff5300 +.long 0xffd0ba78,0xffd0ba78,0xfff83be9,0xfff83be9 +.long 0xfffbf510,0xfffbf510,0x00330417,0x00330417 +.long 0xb7d858a6,0xb7d858a6,0xd849b2bc,0xd849b2bc +.long 0x80390942,0x80390942,0x6a5f5300,0x6a5f5300 +.long 0xbb1fba78,0xbb1fba78,0xb6f55be9,0xb6f55be9 +.long 0x369df510,0x369df510,0xb135e417,0xb135e417 +.long 0x0015d39e,0x0015d39e,0xffe3ba9d,0xffe3ba9d +.long 0xffeb6a2c,0xffeb6a2c,0x0005d423,0x0005d423 +.long 0x0013f609,0x0013f609,0x000059c5,0x000059c5 +.long 0x0012beed,0x0012beed,0x000a3d7e,0x000a3d7e +.long 0x6389939e,0x6389939e,0x9cb75a9d,0x9cb75a9d +.long 0x0730ea2c,0x0730ea2c,0x350a3423,0x350a3423 +.long 0x9e551609,0x9e551609,0x3cb8f9c5,0x3cb8f9c5 +.long 0x95705eed,0x95705eed,0x80b9fd7e,0x80b9fd7e +.long 0x0025cbf7,0x0025cbf7,0x00064593,0x00064593 +.long 0x00385bb5,0x00385bb5,0x002d485d,0x002d485d +.long 0xffd69161,0xffd69161,0xffdf39c8,0xffdf39c8 +.long 0x000f017b,0x000f017b,0xffcbef0e,0xffcbef0e +.long 0x9a24abf7,0x9a24abf7,0x4b38a593,0x4b38a593 +.long 0x052efbb5,0x052efbb5,0xeeb8e85d,0xeeb8e85d +.long 0xa582b161,0xa582b161,0x231839c8,0x231839c8 +.long 0x0ebe617b,0x0ebe617b,0x2eadaf0e,0x2eadaf0e +.long 0xfffe1036,0xfffe1036,0x00376f20,0x00376f20 +.long 0x00302d52,0x00302d52,0x0030ad80,0x0030ad80 +.long 0x000f430a,0x000f430a,0x003e4f8e,0x003e4f8e +.long 0xffe2688e,0xffe2688e,0x0013308b,0x0013308b +.long 0x7f04d036,0x7f04d036,0xde1b6f20,0xde1b6f20 +.long 0xa4da6d52,0xa4da6d52,0x55e0ad80,0x55e0ad80 +.long 0x8b70830a,0x8b70830a,0x3b300f8e,0x3b300f8e +.long 0x3df4288e,0x3df4288e,0x4ca4908b,0x4ca4908b +.long 0x00183045,0x00183045,0xffdeca39,0xffdeca39 +.long 0xffcaf612,0xffcaf612,0x001629a3,0x001629a3 +.long 0x002e67e7,0x002e67e7,0x00381e31,0x00381e31 +.long 0x0017537f,0x0017537f,0x003bf91b,0x003bf91b +.long 0xf7a0d045,0xf7a0d045,0xa0a5ea39,0xa0a5ea39 +.long 0x9d8d3612,0x9d8d3612,0x7fca89a3,0x7fca89a3 +.long 0x75ab47e7,0x75ab47e7,0xaf7e3e31,0xaf7e3e31 +.long 0x2707337f,0x2707337f,0x5ddf591b,0x5ddf591b +.long 0x002ab0d3,0x002ab0d3,0x002ab0d3,0x002ab0d3 +.long 0xffe062ac,0xffe062ac,0xffe062ac,0xffe062ac +.long 0x002703d0,0x002703d0,0x002703d0,0x002703d0 +.long 0xffc47acc,0xffc47acc,0xffc47acc,0xffc47acc +.long 0x38c510d3,0x38c510d3,0x38c510d3,0x38c510d3 +.long 0x6635e2ac,0x6635e2ac,0x6635e2ac,0x6635e2ac +.long 0x38a103d0,0x38a103d0,0x38a103d0,0x38a103d0 +.long 0x591dfacc,0x591dfacc,0x591dfacc,0x591dfacc +.long 0xffc4c7ad,0xffc4c7ad,0xffc4c7ad,0xffc4c7ad +.long 0xfff1708a,0xfff1708a,0xfff1708a,0xfff1708a +.long 0xfff7e466,0xfff7e466,0xfff7e466,0xfff7e466 +.long 0xfff39c58,0xfff39c58,0xfff39c58,0xfff39c58 +.long 0x763a67ad,0x763a67ad,0x763a67ad,0x763a67ad +.long 0x1102b08a,0x1102b08a,0x1102b08a,0x1102b08a +.long 0x6184a466,0x6184a466,0x6184a466,0x6184a466 +.long 0xa77e9c58,0xa77e9c58,0xa77e9c58,0xa77e9c58 +.long 0xffc78c74,0xffc78c74,0xffc78c74,0xffc78c74 +.long 0x00186ba4,0x00186ba4,0x00186ba4,0x00186ba4 +.long 0x0020a9e9,0x0020a9e9,0x0020a9e9,0x0020a9e9 +.long 0xffca7bc1,0xffca7bc1,0xffca7bc1,0xffca7bc1 +.long 0x87560c74,0x87560c74,0x87560c74,0x87560c74 +.long 0xcb8ceba4,0xcb8ceba4,0xcb8ceba4,0xcb8ceba4 +.long 0xc4ddc9e9,0xc4ddc9e9,0xc4ddc9e9,0xc4ddc9e9 +.long 0x72c29bc1,0x72c29bc1,0x72c29bc1,0x72c29bc1 +.long 0x003a50a7,0x003a50a7,0x003a50a7,0x003a50a7 +.long 0xffca81e2,0xffca81e2,0xffca81e2,0xffca81e2 +.long 0x0019152a,0x0019152a,0x0019152a,0x0019152a +.long 0x0019edc3,0x0019edc3,0x0019edc3,0x0019edc3 +.long 0x92cf30a7,0x92cf30a7,0x92cf30a7,0x92cf30a7 +.long 0xe706c1e2,0xe706c1e2,0xe706c1e2,0xe706c1e2 +.long 0x35be552a,0x35be552a,0x35be552a,0x35be552a +.long 0x68524dc3,0x68524dc3,0x68524dc3,0x68524dc3 +.long 0x00083aa3,0x00083aa3,0x00083aa3,0x00083aa3 +.long 0xffdc2964,0xffdc2964,0xffdc2964,0xffdc2964 +.long 0x000495b3,0x000495b3,0x000495b3,0x000495b3 +.long 0xffc9fc00,0xffc9fc00,0xffc9fc00,0xffc9fc00 +.long 0x41dc9aa3,0x41dc9aa3,0x41dc9aa3,0x41dc9aa3 +.long 0x6308a964,0x6308a964,0x6308a964,0x6308a964 +.long 0x853af5b3,0x853af5b3,0x853af5b3,0x853af5b3 +.long 0x3f49fc00,0x3f49fc00,0x3f49fc00,0x3f49fc00 +.long 0x002bc1bf,0x002bc1bf,0x002bc1bf,0x002bc1bf +.long 0xffc9756a,0xffc9756a,0xffc9756a,0xffc9756a +.long 0x002e7184,0x002e7184,0x002e7184,0x002e7184 +.long 0x003aea7b,0x003aea7b,0x003aea7b,0x003aea7b +.long 0x94e3a1bf,0x94e3a1bf,0x94e3a1bf,0x94e3a1bf +.long 0x2176b56a,0x2176b56a,0x2176b56a,0x2176b56a +.long 0x1c5ef184,0x1c5ef184,0x1c5ef184,0x1c5ef184 +.long 0x0c0a4a7b,0x0c0a4a7b,0x0c0a4a7b,0x0c0a4a7b +.long 0xffc44151,0xffc44151,0xffc44151,0xffc44151 +.long 0x0026b82c,0x0026b82c,0x0026b82c,0x0026b82c +.long 0x0036cfd4,0x0036cfd4,0x0036cfd4,0x0036cfd4 +.long 0x00195afd,0x00195afd,0x00195afd,0x00195afd +.long 0x236e6151,0x236e6151,0x236e6151,0x236e6151 +.long 0x712c382c,0x712c382c,0x712c382c,0x712c382c +.long 0x40314fd4,0x40314fd4,0x40314fd4,0x40314fd4 +.long 0xa0f8fafd,0xa0f8fafd,0xa0f8fafd,0xa0f8fafd +.long 0xffca213b,0xffca213b,0xffca213b,0xffca213b +.long 0xffd10b33,0xffd10b33,0xffd10b33,0xffd10b33 +.long 0xfffe89e0,0xfffe89e0,0xfffe89e0,0xfffe89e0 +.long 0xffd6b599,0xffd6b599,0xffd6b599,0xffd6b599 +.long 0x9271813b,0x9271813b,0x9271813b,0x9271813b +.long 0x53b76b33,0x53b76b33,0x53b76b33,0x53b76b33 +.long 0x613a89e0,0x613a89e0,0x613a89e0,0x613a89e0 +.long 0x6e09d599,0x6e09d599,0x6e09d599,0x6e09d599 +.long 0xfffbba3b,0xfffbba3b,0xfffbba3b,0xfffbba3b +.long 0xfffbba3b,0xfffbba3b,0xfffbba3b,0xfffbba3b +.long 0xffc2cdff,0xffc2cdff,0xffc2cdff,0xffc2cdff +.long 0xffc2cdff,0xffc2cdff,0xffc2cdff,0xffc2cdff +.long 0x45c31a3b,0x45c31a3b,0x45c31a3b,0x45c31a3b +.long 0x45c31a3b,0x45c31a3b,0x45c31a3b,0x45c31a3b +.long 0x5602adff,0x5602adff,0x5602adff,0x5602adff +.long 0x5602adff,0x5602adff,0x5602adff,0x5602adff +.long 0x00004bde,0x00004bde,0x00004bde,0x00004bde +.long 0x00004bde,0x00004bde,0x00004bde,0x00004bde +.long 0xffe52fcb,0xffe52fcb,0xffe52fcb,0xffe52fcb +.long 0xffe52fcb,0xffe52fcb,0xffe52fcb,0xffe52fcb +.long 0x927c0bde,0x927c0bde,0x927c0bde,0x927c0bde +.long 0x927c0bde,0x927c0bde,0x927c0bde,0x927c0bde +.long 0xec5e8fcb,0xec5e8fcb,0xec5e8fcb,0xec5e8fcb +.long 0xec5e8fcb,0xec5e8fcb,0xec5e8fcb,0xec5e8fcb +.long 0x00320368,0x00320368,0x00320368,0x00320368 +.long 0x00320368,0x00320368,0x00320368,0x00320368 +.long 0x00155b09,0x00155b09,0x00155b09,0x00155b09 +.long 0x00155b09,0x00155b09,0x00155b09,0x00155b09 +.long 0x2c9f0368,0x2c9f0368,0x2c9f0368,0x2c9f0368 +.long 0x2c9f0368,0x2c9f0368,0x2c9f0368,0x2c9f0368 +.long 0x4af67b09,0x4af67b09,0x4af67b09,0x4af67b09 +.long 0x4af67b09,0x4af67b09,0x4af67b09,0x4af67b09 +.long 0x003ae519,0x003ae519,0x003ae519,0x003ae519 +.long 0x003ae519,0x003ae519,0x003ae519,0x003ae519 +.long 0x0020522a,0x0020522a,0x0020522a,0x0020522a +.long 0x0020522a,0x0020522a,0x0020522a,0x0020522a +.long 0x345e0519,0x345e0519,0x345e0519,0x345e0519 +.long 0x345e0519,0x345e0519,0x345e0519,0x345e0519 +.long 0x9d65922a,0x9d65922a,0x9d65922a,0x9d65922a +.long 0x9d65922a,0x9d65922a,0x9d65922a,0x9d65922a +.long 0x00202c85,0x00202c85,0x00202c85,0x00202c85 +.long 0x00202c85,0x00202c85,0x00202c85,0x00202c85 +.long 0xffd80698,0xffd80698,0xffd80698,0xffd80698 +.long 0xffd80698,0xffd80698,0xffd80698,0xffd80698 +.long 0xd730cc85,0xd730cc85,0xd730cc85,0xd730cc85 +.long 0xd730cc85,0xd730cc85,0xd730cc85,0xd730cc85 +.long 0x14ab0698,0x14ab0698,0x14ab0698,0x14ab0698 +.long 0x14ab0698,0x14ab0698,0x14ab0698,0x14ab0698 +.long 0x00111560,0x00111560,0x00111560,0x00111560 +.long 0x00111560,0x00111560,0x00111560,0x00111560 +.long 0x00086270,0x00086270,0x00086270,0x00086270 +.long 0x00086270,0x00086270,0x00086270,0x00086270 +.long 0xf2bd1560,0xf2bd1560,0xf2bd1560,0xf2bd1560 +.long 0xf2bd1560,0xf2bd1560,0xf2bd1560,0xf2bd1560 +.long 0x94566270,0x94566270,0x94566270,0x94566270 +.long 0x94566270,0x94566270,0x94566270,0x94566270 +.long 0xffc94878,0xffc94878,0xffc94878,0xffc94878 +.long 0xffc94878,0xffc94878,0xffc94878,0xffc94878 +.long 0x00107a5c,0x00107a5c,0x00107a5c,0x00107a5c +.long 0x00107a5c,0x00107a5c,0x00107a5c,0x00107a5c +.long 0xccd84878,0xccd84878,0xccd84878,0xccd84878 +.long 0xccd84878,0xccd84878,0xccd84878,0xccd84878 +.long 0x515bfa5c,0x515bfa5c,0x515bfa5c,0x515bfa5c +.long 0x515bfa5c,0x515bfa5c,0x515bfa5c,0x515bfa5c +.long 0xfff05f90,0xfff05f90,0xfff05f90,0xfff05f90 +.long 0xfff05f90,0xfff05f90,0xfff05f90,0xfff05f90 +.long 0xffd669a8,0xffd669a8,0xffd669a8,0xffd669a8 +.long 0xffd669a8,0xffd669a8,0xffd669a8,0xffd669a8 +.long 0x83e25f90,0x83e25f90,0x83e25f90,0x83e25f90 +.long 0x83e25f90,0x83e25f90,0x83e25f90,0x83e25f90 +.long 0x990b69a8,0x990b69a8,0x990b69a8,0x990b69a8 +.long 0x990b69a8,0x990b69a8,0x990b69a8,0x990b69a8 +.long 0xffd71ad9,0xffd71ad9,0xffd71ad9,0xffd71ad9 +.long 0xffd71ad9,0xffd71ad9,0xffd71ad9,0xffd71ad9 +.long 0xffd71ad9,0xffd71ad9,0xffd71ad9,0xffd71ad9 +.long 0xffd71ad9,0xffd71ad9,0xffd71ad9,0xffd71ad9 +.long 0xdab23ad9,0xdab23ad9,0xdab23ad9,0xdab23ad9 +.long 0xdab23ad9,0xdab23ad9,0xdab23ad9,0xdab23ad9 +.long 0xdab23ad9,0xdab23ad9,0xdab23ad9,0xdab23ad9 +.long 0xdab23ad9,0xdab23ad9,0xdab23ad9,0xdab23ad9 +.long 0xffd085b7,0xffd085b7,0xffd085b7,0xffd085b7 +.long 0xffd085b7,0xffd085b7,0xffd085b7,0xffd085b7 +.long 0xffd085b7,0xffd085b7,0xffd085b7,0xffd085b7 +.long 0xffd085b7,0xffd085b7,0xffd085b7,0xffd085b7 +.long 0x110765b7,0x110765b7,0x110765b7,0x110765b7 +.long 0x110765b7,0x110765b7,0x110765b7,0x110765b7 +.long 0x110765b7,0x110765b7,0x110765b7,0x110765b7 +.long 0x110765b7,0x110765b7,0x110765b7,0x110765b7 +.long 0x002c04f7,0x002c04f7,0x002c04f7,0x002c04f7 +.long 0x002c04f7,0x002c04f7,0x002c04f7,0x002c04f7 +.long 0x002c04f7,0x002c04f7,0x002c04f7,0x002c04f7 +.long 0x002c04f7,0x002c04f7,0x002c04f7,0x002c04f7 +.long 0xe14ae4f7,0xe14ae4f7,0xe14ae4f7,0xe14ae4f7 +.long 0xe14ae4f7,0xe14ae4f7,0xe14ae4f7,0xe14ae4f7 +.long 0xe14ae4f7,0xe14ae4f7,0xe14ae4f7,0xe14ae4f7 +.long 0xe14ae4f7,0xe14ae4f7,0xe14ae4f7,0xe14ae4f7 +.long 0xffd0658b,0xffd0658b,0xffd0658b,0xffd0658b +.long 0xffd0658b,0xffd0658b,0xffd0658b,0xffd0658b +.long 0xffd0658b,0xffd0658b,0xffd0658b,0xffd0658b +.long 0xffd0658b,0xffd0658b,0xffd0658b,0xffd0658b +.long 0x7301c58b,0x7301c58b,0x7301c58b,0x7301c58b +.long 0x7301c58b,0x7301c58b,0x7301c58b,0x7301c58b +.long 0x7301c58b,0x7301c58b,0x7301c58b,0x7301c58b +.long 0x7301c58b,0x7301c58b,0x7301c58b,0x7301c58b +.long 0x001feb81,0x001feb81,0x001feb81,0x001feb81 +.long 0x001feb81,0x001feb81,0x001feb81,0x001feb81 +.long 0x001feb81,0x001feb81,0x001feb81,0x001feb81 +.long 0x001feb81,0x001feb81,0x001feb81,0x001feb81 +.long 0x41100b81,0x41100b81,0x41100b81,0x41100b81 +.long 0x41100b81,0x41100b81,0x41100b81,0x41100b81 +.long 0x41100b81,0x41100b81,0x41100b81,0x41100b81 +.long 0x41100b81,0x41100b81,0x41100b81,0x41100b81 +.long 0x00057b53,0x00057b53,0x00057b53,0x00057b53 +.long 0x00057b53,0x00057b53,0x00057b53,0x00057b53 +.long 0x00057b53,0x00057b53,0x00057b53,0x00057b53 +.long 0x00057b53,0x00057b53,0x00057b53,0x00057b53 +.long 0x51efdb53,0x51efdb53,0x51efdb53,0x51efdb53 +.long 0x51efdb53,0x51efdb53,0x51efdb53,0x51efdb53 +.long 0x51efdb53,0x51efdb53,0x51efdb53,0x51efdb53 +.long 0x51efdb53,0x51efdb53,0x51efdb53,0x51efdb53 +.long 0xffdc16d5,0xffdc16d5,0xffdc16d5,0xffdc16d5 +.long 0xffdc16d5,0xffdc16d5,0xffdc16d5,0xffdc16d5 +.long 0xffdc16d5,0xffdc16d5,0xffdc16d5,0xffdc16d5 +.long 0xffdc16d5,0xffdc16d5,0xffdc16d5,0xffdc16d5 +.long 0x6c36b6d5,0x6c36b6d5,0x6c36b6d5,0x6c36b6d5 +.long 0x6c36b6d5,0x6c36b6d5,0x6c36b6d5,0x6c36b6d5 +.long 0x6c36b6d5,0x6c36b6d5,0x6c36b6d5,0x6c36b6d5 +.long 0x6c36b6d5,0x6c36b6d5,0x6c36b6d5,0x6c36b6d5 +.long 0xffe421d5,0xffe421d5,0xffe421d5,0xffe421d5 +.long 0xffe421d5,0xffe421d5,0xffe421d5,0xffe421d5 +.long 0xffe421d5,0xffe421d5,0xffe421d5,0xffe421d5 +.long 0xffe421d5,0xffe421d5,0xffe421d5,0xffe421d5 +.long 0xed9ec1d5,0xed9ec1d5,0xed9ec1d5,0xed9ec1d5 +.long 0xed9ec1d5,0xed9ec1d5,0xed9ec1d5,0xed9ec1d5 +.long 0xed9ec1d5,0xed9ec1d5,0xed9ec1d5,0xed9ec1d5 +.long 0xed9ec1d5,0xed9ec1d5,0xed9ec1d5,0xed9ec1d5 +.long 0xfff8e1dc,0xfff8e1dc,0xfff8e1dc,0xfff8e1dc +.long 0xfff8e1dc,0xfff8e1dc,0xfff8e1dc,0xfff8e1dc +.long 0xfff8e1dc,0xfff8e1dc,0xfff8e1dc,0xfff8e1dc +.long 0xfff8e1dc,0xfff8e1dc,0xfff8e1dc,0xfff8e1dc +.long 0x9e3461dc,0x9e3461dc,0x9e3461dc,0x9e3461dc +.long 0x9e3461dc,0x9e3461dc,0x9e3461dc,0x9e3461dc +.long 0x9e3461dc,0x9e3461dc,0x9e3461dc,0x9e3461dc +.long 0x9e3461dc,0x9e3461dc,0x9e3461dc,0x9e3461dc +.long 0x000d5ed8,0x000d5ed8,0x000d5ed8,0x000d5ed8 +.long 0x000d5ed8,0x000d5ed8,0x000d5ed8,0x000d5ed8 +.long 0x000d5ed8,0x000d5ed8,0x000d5ed8,0x000d5ed8 +.long 0x000d5ed8,0x000d5ed8,0x000d5ed8,0x000d5ed8 +.long 0x9fe85ed8,0x9fe85ed8,0x9fe85ed8,0x9fe85ed8 +.long 0x9fe85ed8,0x9fe85ed8,0x9fe85ed8,0x9fe85ed8 +.long 0x9fe85ed8,0x9fe85ed8,0x9fe85ed8,0x9fe85ed8 +.long 0x9fe85ed8,0x9fe85ed8,0x9fe85ed8,0x9fe85ed8 +.long 0x000bdee8,0x000bdee8,0x000bdee8,0x000bdee8 +.long 0x000bdee8,0x000bdee8,0x000bdee8,0x000bdee8 +.long 0x000bdee8,0x000bdee8,0x000bdee8,0x000bdee8 +.long 0x000bdee8,0x000bdee8,0x000bdee8,0x000bdee8 +.long 0xa7e8dee8,0xa7e8dee8,0xa7e8dee8,0xa7e8dee8 +.long 0xa7e8dee8,0xa7e8dee8,0xa7e8dee8,0xa7e8dee8 +.long 0xa7e8dee8,0xa7e8dee8,0xa7e8dee8,0xa7e8dee8 +.long 0xa7e8dee8,0xa7e8dee8,0xa7e8dee8,0xa7e8dee8 +.long 0xfffc61bc,0xfffc61bc,0xfffc61bc,0xfffc61bc +.long 0xfffc61bc,0xfffc61bc,0xfffc61bc,0xfffc61bc +.long 0xfffc61bc,0xfffc61bc,0xfffc61bc,0xfffc61bc +.long 0xfffc61bc,0xfffc61bc,0xfffc61bc,0xfffc61bc +.long 0x9e33e1bc,0x9e33e1bc,0x9e33e1bc,0x9e33e1bc +.long 0x9e33e1bc,0x9e33e1bc,0x9e33e1bc,0x9e33e1bc +.long 0x9e33e1bc,0x9e33e1bc,0x9e33e1bc,0x9e33e1bc +.long 0x9e33e1bc,0x9e33e1bc,0x9e33e1bc,0x9e33e1bc +.long 0x0007eafd,0x0007eafd,0x0007eafd,0x0007eafd +.long 0x0007eafd,0x0007eafd,0x0007eafd,0x0007eafd +.long 0x0007eafd,0x0007eafd,0x0007eafd,0x0007eafd +.long 0x0007eafd,0x0007eafd,0x0007eafd,0x0007eafd +.long 0x72e78afd,0x72e78afd,0x72e78afd,0x72e78afd +.long 0x72e78afd,0x72e78afd,0x72e78afd,0x72e78afd +.long 0x72e78afd,0x72e78afd,0x72e78afd,0x72e78afd +.long 0x72e78afd,0x72e78afd,0x72e78afd,0x72e78afd +.long 0x0027cefe,0x0027cefe,0x0027cefe,0x0027cefe +.long 0x0027cefe,0x0027cefe,0x0027cefe,0x0027cefe +.long 0x0027cefe,0x0027cefe,0x0027cefe,0x0027cefe +.long 0x0027cefe,0x0027cefe,0x0027cefe,0x0027cefe +.long 0x73078efe,0x73078efe,0x73078efe,0x73078efe +.long 0x73078efe,0x73078efe,0x73078efe,0x73078efe +.long 0x73078efe,0x73078efe,0x73078efe,0x73078efe +.long 0x73078efe,0x73078efe,0x73078efe,0x73078efe +.long 0xffff9b09,0xffff9b09,0xffff9b09,0xffff9b09 +.long 0xffff9b09,0xffff9b09,0xffff9b09,0xffff9b09 +.long 0xffff9b09,0xffff9b09,0xffff9b09,0xffff9b09 +.long 0xffff9b09,0xffff9b09,0xffff9b09,0xffff9b09 +.long 0x92e0bb09,0x92e0bb09,0x92e0bb09,0x92e0bb09 +.long 0x92e0bb09,0x92e0bb09,0x92e0bb09,0x92e0bb09 +.long 0x92e0bb09,0x92e0bb09,0x92e0bb09,0x92e0bb09 +.long 0x92e0bb09,0x92e0bb09,0x92e0bb09,0x92e0bb09 +.long 0x0000a3fa,0x0000a3fa,0x0000a3fa,0x0000a3fa +.long 0x0000a3fa,0x0000a3fa,0x0000a3fa,0x0000a3fa +.long 0x0000a3fa,0x0000a3fa,0x0000a3fa,0x0000a3fa +.long 0x0000a3fa,0x0000a3fa,0x0000a3fa,0x0000a3fa +.long 0xff7fe3fa,0xff7fe3fa,0xff7fe3fa,0xff7fe3fa +.long 0xff7fe3fa,0xff7fe3fa,0xff7fe3fa,0xff7fe3fa +.long 0xff7fe3fa,0xff7fe3fa,0xff7fe3fa,0xff7fe3fa +.long 0xff7fe3fa,0xff7fe3fa,0xff7fe3fa,0xff7fe3fa +#ifndef __APPLE__ +.text +.globl wc_mldsa_ntt_1p_avx512 +.type wc_mldsa_ntt_1p_avx512,@function +.align 16 +wc_mldsa_ntt_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_ntt_1p_avx512 +.p2align 4 +_wc_mldsa_ntt_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + # ntt + leaq L_mldsa_avx512_zetas_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + # len = 128 + vmovdqu64 (%rdx), %zmm21 + vmovdqu64 64(%rdx), %zmm22 + vpmulld %zmm22, %zmm8, %zmm16 + vmovshdup %zmm8, %zmm17 + vpmuldq %zmm21, %zmm8, %zmm8 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm8, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm8 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm9 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm10 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm11 + vpaddd %zmm16, %zmm3, %zmm3 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm12 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm13 + vpaddd %zmm16, %zmm5, %zmm5 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm14 + vpaddd %zmm16, %zmm6, %zmm6 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm7, %zmm15 + vpaddd %zmm16, %zmm7, %zmm7 + # len = 64 + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpmulld %zmm22, %zmm4, %zmm16 + vmovshdup %zmm4, %zmm17 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm4 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm5 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm6 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm7 + vpaddd %zmm16, %zmm3, %zmm3 + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm12 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm13 + vpaddd %zmm16, %zmm9, %zmm9 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm14 + vpaddd %zmm16, %zmm10, %zmm10 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm11, %zmm15 + vpaddd %zmm16, %zmm11, %zmm11 + # len = 32 + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpmulld %zmm22, %zmm2, %zmm16 + vmovshdup %zmm2, %zmm17 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm2 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm3 + vpaddd %zmm16, %zmm1, %zmm1 + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm6 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm7 + vpaddd %zmm16, %zmm5, %zmm5 + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm10 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm11 + vpaddd %zmm16, %zmm9, %zmm9 + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm14 + vpaddd %zmm16, %zmm12, %zmm12 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm13, %zmm15 + vpaddd %zmm16, %zmm13, %zmm13 + # len = 16 + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 8 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 4 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 2 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 1 + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_ntt_1p_avx512,.-wc_mldsa_ntt_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_ntt_small_1p_avx512 +.type wc_mldsa_ntt_small_1p_avx512,@function +.align 16 +wc_mldsa_ntt_small_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_ntt_small_1p_avx512 +.p2align 4 +_wc_mldsa_ntt_small_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + # ntt + leaq L_mldsa_avx512_zetas_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + # len = 128 + vmovdqu64 L_mldsa_avx512_zeta1_1p(%rip), %zmm21 + vmovdqu64 L_mldsa_avx512_half_1p(%rip), %zmm22 + vpmulld %zmm21, %zmm8, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm0, %zmm8 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm21, %zmm9, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm1, %zmm9 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm21, %zmm10, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm2, %zmm10 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm21, %zmm11, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm3, %zmm11 + vpaddd %zmm16, %zmm3, %zmm3 + vpmulld %zmm21, %zmm12, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm4, %zmm12 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm21, %zmm13, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm5, %zmm13 + vpaddd %zmm16, %zmm5, %zmm5 + vpmulld %zmm21, %zmm14, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm6, %zmm14 + vpaddd %zmm16, %zmm6, %zmm6 + vpmulld %zmm21, %zmm15, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm7, %zmm15 + vpaddd %zmm16, %zmm7, %zmm7 + # len = 64 + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpmulld %zmm22, %zmm4, %zmm16 + vmovshdup %zmm4, %zmm17 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm4 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm5 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm6 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm7 + vpaddd %zmm16, %zmm3, %zmm3 + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm12 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm13 + vpaddd %zmm16, %zmm9, %zmm9 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm14 + vpaddd %zmm16, %zmm10, %zmm10 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm11, %zmm15 + vpaddd %zmm16, %zmm11, %zmm11 + # len = 32 + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpmulld %zmm22, %zmm2, %zmm16 + vmovshdup %zmm2, %zmm17 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm2 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm3 + vpaddd %zmm16, %zmm1, %zmm1 + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm6 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm7 + vpaddd %zmm16, %zmm5, %zmm5 + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm10 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm11 + vpaddd %zmm16, %zmm9, %zmm9 + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm14 + vpaddd %zmm16, %zmm12, %zmm12 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm13, %zmm15 + vpaddd %zmm16, %zmm13, %zmm13 + # len = 16 + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 8 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 4 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 2 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 1 + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_ntt_small_1p_avx512,.-wc_mldsa_ntt_small_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_ntt_full_1p_avx512 +.type wc_mldsa_ntt_full_1p_avx512,@function +.align 16 +wc_mldsa_ntt_full_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_ntt_full_1p_avx512 +.p2align 4 +_wc_mldsa_ntt_full_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + vmovdqu64 L_mldsa_avx512_permn0(%rip), %zmm27 + vmovdqu64 L_mldsa_avx512_permn1(%rip), %zmm28 + # ntt + leaq L_mldsa_avx512_zetas_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + # len = 128 + vmovdqu64 (%rdx), %zmm21 + vmovdqu64 64(%rdx), %zmm22 + vpmulld %zmm22, %zmm8, %zmm16 + vmovshdup %zmm8, %zmm17 + vpmuldq %zmm21, %zmm8, %zmm8 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm8, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm8 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm9 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm10 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm11 + vpaddd %zmm16, %zmm3, %zmm3 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm12 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm13 + vpaddd %zmm16, %zmm5, %zmm5 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm14 + vpaddd %zmm16, %zmm6, %zmm6 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm7, %zmm15 + vpaddd %zmm16, %zmm7, %zmm7 + # len = 64 + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpmulld %zmm22, %zmm4, %zmm16 + vmovshdup %zmm4, %zmm17 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm4 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm5 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm6 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm7 + vpaddd %zmm16, %zmm3, %zmm3 + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm12 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm13 + vpaddd %zmm16, %zmm9, %zmm9 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm14 + vpaddd %zmm16, %zmm10, %zmm10 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm11, %zmm15 + vpaddd %zmm16, %zmm11, %zmm11 + # len = 32 + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpmulld %zmm22, %zmm2, %zmm16 + vmovshdup %zmm2, %zmm17 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm2 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm3 + vpaddd %zmm16, %zmm1, %zmm1 + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm6 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm7 + vpaddd %zmm16, %zmm5, %zmm5 + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm10 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm11 + vpaddd %zmm16, %zmm9, %zmm9 + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm14 + vpaddd %zmm16, %zmm12, %zmm12 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm13, %zmm15 + vpaddd %zmm16, %zmm13, %zmm13 + # len = 16 + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 8 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 4 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 2 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 1 + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + vpunpckldq %zmm1, %zmm0, %zmm16 + vpunpckhdq %zmm1, %zmm0, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm1 + vpermi2q %zmm17, %zmm16, %zmm1 + vmovdqa64 %zmm18, %zmm0 + vpunpckldq %zmm3, %zmm2, %zmm16 + vpunpckhdq %zmm3, %zmm2, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm3 + vpermi2q %zmm17, %zmm16, %zmm3 + vmovdqa64 %zmm18, %zmm2 + vpunpckldq %zmm5, %zmm4, %zmm16 + vpunpckhdq %zmm5, %zmm4, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm5 + vpermi2q %zmm17, %zmm16, %zmm5 + vmovdqa64 %zmm18, %zmm4 + vpunpckldq %zmm7, %zmm6, %zmm16 + vpunpckhdq %zmm7, %zmm6, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm7 + vpermi2q %zmm17, %zmm16, %zmm7 + vmovdqa64 %zmm18, %zmm6 + vpunpckldq %zmm9, %zmm8, %zmm16 + vpunpckhdq %zmm9, %zmm8, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm9 + vpermi2q %zmm17, %zmm16, %zmm9 + vmovdqa64 %zmm18, %zmm8 + vpunpckldq %zmm11, %zmm10, %zmm16 + vpunpckhdq %zmm11, %zmm10, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm11 + vpermi2q %zmm17, %zmm16, %zmm11 + vmovdqa64 %zmm18, %zmm10 + vpunpckldq %zmm13, %zmm12, %zmm16 + vpunpckhdq %zmm13, %zmm12, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm13 + vpermi2q %zmm17, %zmm16, %zmm13 + vmovdqa64 %zmm18, %zmm12 + vpunpckldq %zmm15, %zmm14, %zmm16 + vpunpckhdq %zmm15, %zmm14, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm15 + vpermi2q %zmm17, %zmm16, %zmm15 + vmovdqa64 %zmm18, %zmm14 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_ntt_full_1p_avx512,.-wc_mldsa_ntt_full_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_ntt_small_full_1p_avx512 +.type wc_mldsa_ntt_small_full_1p_avx512,@function +.align 16 +wc_mldsa_ntt_small_full_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_ntt_small_full_1p_avx512 +.p2align 4 +_wc_mldsa_ntt_small_full_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + vmovdqu64 L_mldsa_avx512_permn0(%rip), %zmm27 + vmovdqu64 L_mldsa_avx512_permn1(%rip), %zmm28 + # ntt + leaq L_mldsa_avx512_zetas_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + # len = 128 + vmovdqu64 L_mldsa_avx512_zeta1_1p(%rip), %zmm21 + vmovdqu64 L_mldsa_avx512_half_1p(%rip), %zmm22 + vpmulld %zmm21, %zmm8, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm0, %zmm8 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm21, %zmm9, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm1, %zmm9 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm21, %zmm10, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm2, %zmm10 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm21, %zmm11, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm3, %zmm11 + vpaddd %zmm16, %zmm3, %zmm3 + vpmulld %zmm21, %zmm12, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm4, %zmm12 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm21, %zmm13, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm5, %zmm13 + vpaddd %zmm16, %zmm5, %zmm5 + vpmulld %zmm21, %zmm14, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm6, %zmm14 + vpaddd %zmm16, %zmm6, %zmm6 + vpmulld %zmm21, %zmm15, %zmm16 + vpaddd %zmm22, %zmm16, %zmm17 + vpsrad $23, %zmm17, %zmm17 + vpmulld %zmm23, %zmm17, %zmm17 + vpsubd %zmm17, %zmm16, %zmm16 + vpsubd %zmm16, %zmm7, %zmm15 + vpaddd %zmm16, %zmm7, %zmm7 + # len = 64 + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpmulld %zmm22, %zmm4, %zmm16 + vmovshdup %zmm4, %zmm17 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm4 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm5 + vpaddd %zmm16, %zmm1, %zmm1 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm6 + vpaddd %zmm16, %zmm2, %zmm2 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm3, %zmm7 + vpaddd %zmm16, %zmm3, %zmm3 + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpmulld %zmm22, %zmm12, %zmm16 + vmovshdup %zmm12, %zmm17 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm12 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm13 + vpaddd %zmm16, %zmm9, %zmm9 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm14 + vpaddd %zmm16, %zmm10, %zmm10 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm11, %zmm15 + vpaddd %zmm16, %zmm11, %zmm11 + # len = 32 + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpmulld %zmm22, %zmm2, %zmm16 + vmovshdup %zmm2, %zmm17 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm2 + vpaddd %zmm16, %zmm0, %zmm0 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm1, %zmm3 + vpaddd %zmm16, %zmm1, %zmm1 + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpmulld %zmm22, %zmm6, %zmm16 + vmovshdup %zmm6, %zmm17 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm6 + vpaddd %zmm16, %zmm4, %zmm4 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm5, %zmm7 + vpaddd %zmm16, %zmm5, %zmm5 + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpmulld %zmm22, %zmm10, %zmm16 + vmovshdup %zmm10, %zmm17 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm10 + vpaddd %zmm16, %zmm8, %zmm8 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm9, %zmm11 + vpaddd %zmm16, %zmm9, %zmm9 + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpmulld %zmm22, %zmm14, %zmm16 + vmovshdup %zmm14, %zmm17 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm14 + vpaddd %zmm16, %zmm12, %zmm12 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm13, %zmm15 + vpaddd %zmm16, %zmm13, %zmm13 + # len = 16 + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 8 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 4 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 2 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + # len = 1 + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vpmulld %zmm22, %zmm1, %zmm16 + vmovshdup %zmm1, %zmm17 + vpmuldq %zmm21, %zmm1, %zmm1 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm1, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm0, %zmm1 + vpaddd %zmm16, %zmm0, %zmm0 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vpmulld %zmm22, %zmm3, %zmm16 + vmovshdup %zmm3, %zmm17 + vpmuldq %zmm21, %zmm3, %zmm3 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm3, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm2, %zmm3 + vpaddd %zmm16, %zmm2, %zmm2 + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vpmulld %zmm22, %zmm5, %zmm16 + vmovshdup %zmm5, %zmm17 + vpmuldq %zmm21, %zmm5, %zmm5 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm5, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm4, %zmm5 + vpaddd %zmm16, %zmm4, %zmm4 + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vpmulld %zmm22, %zmm7, %zmm16 + vmovshdup %zmm7, %zmm17 + vpmuldq %zmm21, %zmm7, %zmm7 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm7, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm6, %zmm7 + vpaddd %zmm16, %zmm6, %zmm6 + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vpmulld %zmm22, %zmm9, %zmm16 + vmovshdup %zmm9, %zmm17 + vpmuldq %zmm21, %zmm9, %zmm9 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm9, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm8, %zmm9 + vpaddd %zmm16, %zmm8, %zmm8 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vpmulld %zmm22, %zmm11, %zmm16 + vmovshdup %zmm11, %zmm17 + vpmuldq %zmm21, %zmm11, %zmm11 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm11, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm10, %zmm11 + vpaddd %zmm16, %zmm10, %zmm10 + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vpmulld %zmm22, %zmm13, %zmm16 + vmovshdup %zmm13, %zmm17 + vpmuldq %zmm21, %zmm13, %zmm13 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm13, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm12, %zmm13 + vpaddd %zmm16, %zmm12, %zmm12 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + vpmulld %zmm22, %zmm15, %zmm16 + vmovshdup %zmm15, %zmm17 + vpmuldq %zmm21, %zmm15, %zmm15 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm15, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm16, %zmm16 + vpblendmd %zmm18, %zmm16, %zmm16{%k1} + vpsubd %zmm16, %zmm14, %zmm15 + vpaddd %zmm16, %zmm14, %zmm14 + vpunpckldq %zmm1, %zmm0, %zmm16 + vpunpckhdq %zmm1, %zmm0, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm1 + vpermi2q %zmm17, %zmm16, %zmm1 + vmovdqa64 %zmm18, %zmm0 + vpunpckldq %zmm3, %zmm2, %zmm16 + vpunpckhdq %zmm3, %zmm2, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm3 + vpermi2q %zmm17, %zmm16, %zmm3 + vmovdqa64 %zmm18, %zmm2 + vpunpckldq %zmm5, %zmm4, %zmm16 + vpunpckhdq %zmm5, %zmm4, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm5 + vpermi2q %zmm17, %zmm16, %zmm5 + vmovdqa64 %zmm18, %zmm4 + vpunpckldq %zmm7, %zmm6, %zmm16 + vpunpckhdq %zmm7, %zmm6, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm7 + vpermi2q %zmm17, %zmm16, %zmm7 + vmovdqa64 %zmm18, %zmm6 + vpunpckldq %zmm9, %zmm8, %zmm16 + vpunpckhdq %zmm9, %zmm8, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm9 + vpermi2q %zmm17, %zmm16, %zmm9 + vmovdqa64 %zmm18, %zmm8 + vpunpckldq %zmm11, %zmm10, %zmm16 + vpunpckhdq %zmm11, %zmm10, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm11 + vpermi2q %zmm17, %zmm16, %zmm11 + vmovdqa64 %zmm18, %zmm10 + vpunpckldq %zmm13, %zmm12, %zmm16 + vpunpckhdq %zmm13, %zmm12, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm13 + vpermi2q %zmm17, %zmm16, %zmm13 + vmovdqa64 %zmm18, %zmm12 + vpunpckldq %zmm15, %zmm14, %zmm16 + vpunpckhdq %zmm15, %zmm14, %zmm17 + vmovdqa64 %zmm27, %zmm18 + vpermi2q %zmm17, %zmm16, %zmm18 + vmovdqa64 %zmm28, %zmm15 + vpermi2q %zmm17, %zmm16, %zmm15 + vmovdqa64 %zmm18, %zmm14 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_ntt_small_full_1p_avx512,.-wc_mldsa_ntt_small_full_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_invntt_1p_avx512 +.type wc_mldsa_invntt_1p_avx512,@function +.align 16 +wc_mldsa_invntt_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_invntt_1p_avx512 +.p2align 4 +_wc_mldsa_invntt_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + # invntt + leaq L_mldsa_avx512_zetas_inv_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 1 + vmovdqu64 (%rdx), %zmm21 + vmovdqu64 64(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + # len = 2 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 4 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 8 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 16 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 32 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsubd %zmm2, %zmm0, %zmm16 + vpaddd %zmm2, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm2 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm2, %zmm18 + vpmuldq %zmm23, %zmm2, %zmm2 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm2, %zmm16, %zmm2 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm2, %zmm2 + vpblendmd %zmm18, %zmm2, %zmm2{%k1} + vpsubd %zmm3, %zmm1, %zmm16 + vpaddd %zmm3, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsubd %zmm6, %zmm4, %zmm16 + vpaddd %zmm6, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm6 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm6, %zmm18 + vpmuldq %zmm23, %zmm6, %zmm6 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm6, %zmm16, %zmm6 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm6, %zmm6 + vpblendmd %zmm18, %zmm6, %zmm6{%k1} + vpsubd %zmm7, %zmm5, %zmm16 + vpaddd %zmm7, %zmm5, %zmm5 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsubd %zmm10, %zmm8, %zmm16 + vpaddd %zmm10, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm10 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm10, %zmm18 + vpmuldq %zmm23, %zmm10, %zmm10 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm10, %zmm16, %zmm10 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm10, %zmm10 + vpblendmd %zmm18, %zmm10, %zmm10{%k1} + vpsubd %zmm11, %zmm9, %zmm16 + vpaddd %zmm11, %zmm9, %zmm9 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsubd %zmm14, %zmm12, %zmm16 + vpaddd %zmm14, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm13, %zmm16 + vpaddd %zmm15, %zmm13, %zmm13 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 64 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsubd %zmm4, %zmm0, %zmm16 + vpaddd %zmm4, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm4 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm4, %zmm18 + vpmuldq %zmm23, %zmm4, %zmm4 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm4, %zmm16, %zmm4 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm4, %zmm4 + vpblendmd %zmm18, %zmm4, %zmm4{%k1} + vpsubd %zmm5, %zmm1, %zmm16 + vpaddd %zmm5, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpsubd %zmm6, %zmm2, %zmm16 + vpaddd %zmm6, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm6 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm6, %zmm18 + vpmuldq %zmm23, %zmm6, %zmm6 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm6, %zmm16, %zmm6 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm6, %zmm6 + vpblendmd %zmm18, %zmm6, %zmm6{%k1} + vpsubd %zmm7, %zmm3, %zmm16 + vpaddd %zmm7, %zmm3, %zmm3 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsubd %zmm12, %zmm8, %zmm16 + vpaddd %zmm12, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm12 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm12, %zmm18 + vpmuldq %zmm23, %zmm12, %zmm12 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm12, %zmm16, %zmm12 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm12, %zmm12 + vpblendmd %zmm18, %zmm12, %zmm12{%k1} + vpsubd %zmm13, %zmm9, %zmm16 + vpaddd %zmm13, %zmm9, %zmm9 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsubd %zmm14, %zmm10, %zmm16 + vpaddd %zmm14, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm11, %zmm16 + vpaddd %zmm15, %zmm11, %zmm11 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 128 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsubd %zmm8, %zmm0, %zmm16 + vpaddd %zmm8, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm8 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm8, %zmm18 + vpmuldq %zmm23, %zmm8, %zmm8 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm8, %zmm16, %zmm8 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm8, %zmm8 + vpblendmd %zmm18, %zmm8, %zmm8{%k1} + vpsubd %zmm9, %zmm1, %zmm16 + vpaddd %zmm9, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpsubd %zmm10, %zmm2, %zmm16 + vpaddd %zmm10, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm10 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm10, %zmm18 + vpmuldq %zmm23, %zmm10, %zmm10 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm10, %zmm16, %zmm10 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm10, %zmm10 + vpblendmd %zmm18, %zmm10, %zmm10{%k1} + vpsubd %zmm11, %zmm3, %zmm16 + vpaddd %zmm11, %zmm3, %zmm3 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpsubd %zmm12, %zmm4, %zmm16 + vpaddd %zmm12, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm12 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm12, %zmm18 + vpmuldq %zmm23, %zmm12, %zmm12 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm12, %zmm16, %zmm12 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm12, %zmm12 + vpblendmd %zmm18, %zmm12, %zmm12{%k1} + vpsubd %zmm13, %zmm5, %zmm16 + vpaddd %zmm13, %zmm5, %zmm5 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsubd %zmm14, %zmm6, %zmm16 + vpaddd %zmm14, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm7, %zmm16 + vpaddd %zmm15, %zmm7, %zmm7 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vmovdqu64 6016(%rdx), %zmm21 + vmovdqu64 6080(%rdx), %zmm22 + vpmulld %zmm22, %zmm0, %zmm16 + vpmulld %zmm22, %zmm1, %zmm19 + vmovshdup %zmm0, %zmm17 + vmovshdup %zmm1, %zmm20 + vpmuldq %zmm21, %zmm0, %zmm0 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm0, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm1, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm0{%k1} + vpblendmd %zmm17, %zmm19, %zmm1{%k1} + vpmulld %zmm22, %zmm2, %zmm16 + vpmulld %zmm22, %zmm3, %zmm19 + vmovshdup %zmm2, %zmm17 + vmovshdup %zmm3, %zmm20 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm3, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm2{%k1} + vpblendmd %zmm17, %zmm19, %zmm3{%k1} + vpmulld %zmm22, %zmm4, %zmm16 + vpmulld %zmm22, %zmm5, %zmm19 + vmovshdup %zmm4, %zmm17 + vmovshdup %zmm5, %zmm20 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm5, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm4{%k1} + vpblendmd %zmm17, %zmm19, %zmm5{%k1} + vpmulld %zmm22, %zmm6, %zmm16 + vpmulld %zmm22, %zmm7, %zmm19 + vmovshdup %zmm6, %zmm17 + vmovshdup %zmm7, %zmm20 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm7, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm6{%k1} + vpblendmd %zmm17, %zmm19, %zmm7{%k1} + vpmulld %zmm22, %zmm8, %zmm16 + vpmulld %zmm22, %zmm9, %zmm19 + vmovshdup %zmm8, %zmm17 + vmovshdup %zmm9, %zmm20 + vpmuldq %zmm21, %zmm8, %zmm8 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm8, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm9, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm8{%k1} + vpblendmd %zmm17, %zmm19, %zmm9{%k1} + vpmulld %zmm22, %zmm10, %zmm16 + vpmulld %zmm22, %zmm11, %zmm19 + vmovshdup %zmm10, %zmm17 + vmovshdup %zmm11, %zmm20 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm11, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm10{%k1} + vpblendmd %zmm17, %zmm19, %zmm11{%k1} + vpmulld %zmm22, %zmm12, %zmm16 + vpmulld %zmm22, %zmm13, %zmm19 + vmovshdup %zmm12, %zmm17 + vmovshdup %zmm13, %zmm20 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm13, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm12{%k1} + vpblendmd %zmm17, %zmm19, %zmm13{%k1} + vpmulld %zmm22, %zmm14, %zmm16 + vpmulld %zmm22, %zmm15, %zmm19 + vmovshdup %zmm14, %zmm17 + vmovshdup %zmm15, %zmm20 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm15, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm14{%k1} + vpblendmd %zmm17, %zmm19, %zmm15{%k1} + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_invntt_1p_avx512,.-wc_mldsa_invntt_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_invntt_full_1p_avx512 +.type wc_mldsa_invntt_full_1p_avx512,@function +.align 16 +wc_mldsa_invntt_full_1p_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_invntt_full_1p_avx512 +.p2align 4 +_wc_mldsa_invntt_full_1p_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm23 + vpbroadcastd %xmm23, %zmm23 + movl $0xaaaa, %eax + kmovw %eax, %k1 + movl $0x5555, %eax + kmovw %eax, %k2 + vmovdqu64 L_mldsa_avx512_perm20(%rip), %zmm25 + vmovdqu64 L_mldsa_avx512_perm31(%rip), %zmm26 + # invntt + leaq L_mldsa_avx512_zetas_inv_1p(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + # len = 1 + vmovdqu64 (%rdx), %zmm21 + vmovdqu64 64(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vpsllq $32, %zmm1, %zmm16 + vpsrlq $32, %zmm0, %zmm17 + vpblendmd %zmm16, %zmm0, %zmm0{%k1} + vpblendmd %zmm17, %zmm1, %zmm1{%k2} + vmovdqu64 128(%rdx), %zmm21 + vmovdqu64 192(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vpsllq $32, %zmm3, %zmm16 + vpsrlq $32, %zmm2, %zmm17 + vpblendmd %zmm16, %zmm2, %zmm2{%k1} + vpblendmd %zmm17, %zmm3, %zmm3{%k2} + vmovdqu64 256(%rdx), %zmm21 + vmovdqu64 320(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpsllq $32, %zmm5, %zmm16 + vpsrlq $32, %zmm4, %zmm17 + vpblendmd %zmm16, %zmm4, %zmm4{%k1} + vpblendmd %zmm17, %zmm5, %zmm5{%k2} + vmovdqu64 384(%rdx), %zmm21 + vmovdqu64 448(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vpsllq $32, %zmm7, %zmm16 + vpsrlq $32, %zmm6, %zmm17 + vpblendmd %zmm16, %zmm6, %zmm6{%k1} + vpblendmd %zmm17, %zmm7, %zmm7{%k2} + vmovdqu64 512(%rdx), %zmm21 + vmovdqu64 576(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpsllq $32, %zmm9, %zmm16 + vpsrlq $32, %zmm8, %zmm17 + vpblendmd %zmm16, %zmm8, %zmm8{%k1} + vpblendmd %zmm17, %zmm9, %zmm9{%k2} + vmovdqu64 640(%rdx), %zmm21 + vmovdqu64 704(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpsllq $32, %zmm11, %zmm16 + vpsrlq $32, %zmm10, %zmm17 + vpblendmd %zmm16, %zmm10, %zmm10{%k1} + vpblendmd %zmm17, %zmm11, %zmm11{%k2} + vmovdqu64 768(%rdx), %zmm21 + vmovdqu64 832(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsllq $32, %zmm13, %zmm16 + vpsrlq $32, %zmm12, %zmm17 + vpblendmd %zmm16, %zmm12, %zmm12{%k1} + vpblendmd %zmm17, %zmm13, %zmm13{%k2} + vmovdqu64 896(%rdx), %zmm21 + vmovdqu64 960(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vmovshdup %zmm21, %zmm21 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vpsllq $32, %zmm15, %zmm16 + vpsrlq $32, %zmm14, %zmm17 + vpblendmd %zmm16, %zmm14, %zmm14{%k1} + vpblendmd %zmm17, %zmm15, %zmm15{%k2} + # len = 2 + vmovdqu64 1024(%rdx), %zmm21 + vmovdqu64 1088(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vpunpcklqdq %zmm1, %zmm0, %zmm16 + vpunpckhqdq %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 1152(%rdx), %zmm21 + vmovdqu64 1216(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vpunpcklqdq %zmm3, %zmm2, %zmm16 + vpunpckhqdq %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 1280(%rdx), %zmm21 + vmovdqu64 1344(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpunpcklqdq %zmm5, %zmm4, %zmm16 + vpunpckhqdq %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 1408(%rdx), %zmm21 + vmovdqu64 1472(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vpunpcklqdq %zmm7, %zmm6, %zmm16 + vpunpckhqdq %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 1536(%rdx), %zmm21 + vmovdqu64 1600(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpunpcklqdq %zmm9, %zmm8, %zmm16 + vpunpckhqdq %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 1664(%rdx), %zmm21 + vmovdqu64 1728(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpunpcklqdq %zmm11, %zmm10, %zmm16 + vpunpckhqdq %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 1792(%rdx), %zmm21 + vmovdqu64 1856(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpunpcklqdq %zmm13, %zmm12, %zmm16 + vpunpckhqdq %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 1920(%rdx), %zmm21 + vmovdqu64 1984(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vpunpcklqdq %zmm15, %zmm14, %zmm16 + vpunpckhqdq %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 4 + vmovdqu64 2048(%rdx), %zmm21 + vmovdqu64 2112(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm1, %zmm0, %zmm24 + vmovdqa64 %zmm24, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 2176(%rdx), %zmm21 + vmovdqu64 2240(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm3, %zmm2, %zmm24 + vmovdqa64 %zmm24, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 2304(%rdx), %zmm21 + vmovdqu64 2368(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm5, %zmm4, %zmm24 + vmovdqa64 %zmm24, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 2432(%rdx), %zmm21 + vmovdqu64 2496(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm7, %zmm6, %zmm24 + vmovdqa64 %zmm24, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 2560(%rdx), %zmm21 + vmovdqu64 2624(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm9, %zmm8, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vmovdqa64 %zmm24, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 2688(%rdx), %zmm21 + vmovdqu64 2752(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm11, %zmm10, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm11, %zmm10, %zmm24 + vmovdqa64 %zmm24, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 2816(%rdx), %zmm21 + vmovdqu64 2880(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm13, %zmm12, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm13, %zmm12, %zmm24 + vmovdqa64 %zmm24, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 2944(%rdx), %zmm21 + vmovdqu64 3008(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vmovdqa64 %zmm25, %zmm16 + vpermi2q %zmm15, %zmm14, %zmm16 + vmovdqa64 %zmm26, %zmm24 + vpermi2q %zmm15, %zmm14, %zmm24 + vmovdqa64 %zmm24, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 8 + vmovdqu64 3072(%rdx), %zmm21 + vmovdqu64 3136(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vshufi64x2 $0x44, %zmm1, %zmm0, %zmm16 + vshufi64x2 $0xee, %zmm1, %zmm0, %zmm1 + vmovdqa64 %zmm16, %zmm0 + vmovdqu64 3200(%rdx), %zmm21 + vmovdqu64 3264(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vshufi64x2 $0x44, %zmm3, %zmm2, %zmm16 + vshufi64x2 $0xee, %zmm3, %zmm2, %zmm3 + vmovdqa64 %zmm16, %zmm2 + vmovdqu64 3328(%rdx), %zmm21 + vmovdqu64 3392(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vshufi64x2 $0x44, %zmm5, %zmm4, %zmm16 + vshufi64x2 $0xee, %zmm5, %zmm4, %zmm5 + vmovdqa64 %zmm16, %zmm4 + vmovdqu64 3456(%rdx), %zmm21 + vmovdqu64 3520(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vshufi64x2 $0x44, %zmm7, %zmm6, %zmm16 + vshufi64x2 $0xee, %zmm7, %zmm6, %zmm7 + vmovdqa64 %zmm16, %zmm6 + vmovdqu64 3584(%rdx), %zmm21 + vmovdqu64 3648(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vshufi64x2 $0x44, %zmm9, %zmm8, %zmm16 + vshufi64x2 $0xee, %zmm9, %zmm8, %zmm9 + vmovdqa64 %zmm16, %zmm8 + vmovdqu64 3712(%rdx), %zmm21 + vmovdqu64 3776(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vshufi64x2 $0x44, %zmm11, %zmm10, %zmm16 + vshufi64x2 $0xee, %zmm11, %zmm10, %zmm11 + vmovdqa64 %zmm16, %zmm10 + vmovdqu64 3840(%rdx), %zmm21 + vmovdqu64 3904(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vshufi64x2 $0x44, %zmm13, %zmm12, %zmm16 + vshufi64x2 $0xee, %zmm13, %zmm12, %zmm13 + vmovdqa64 %zmm16, %zmm12 + vmovdqu64 3968(%rdx), %zmm21 + vmovdqu64 4032(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vshufi64x2 $0x44, %zmm15, %zmm14, %zmm16 + vshufi64x2 $0xee, %zmm15, %zmm14, %zmm15 + vmovdqa64 %zmm16, %zmm14 + # len = 16 + vmovdqu64 4096(%rdx), %zmm21 + vmovdqu64 4160(%rdx), %zmm22 + vpsubd %zmm1, %zmm0, %zmm16 + vpaddd %zmm1, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm1 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm1, %zmm18 + vpmuldq %zmm23, %zmm1, %zmm1 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm1, %zmm16, %zmm1 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm1, %zmm1 + vpblendmd %zmm18, %zmm1, %zmm1{%k1} + vmovdqu64 4224(%rdx), %zmm21 + vmovdqu64 4288(%rdx), %zmm22 + vpsubd %zmm3, %zmm2, %zmm16 + vpaddd %zmm3, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqu64 4352(%rdx), %zmm21 + vmovdqu64 4416(%rdx), %zmm22 + vpsubd %zmm5, %zmm4, %zmm16 + vpaddd %zmm5, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vmovdqu64 4480(%rdx), %zmm21 + vmovdqu64 4544(%rdx), %zmm22 + vpsubd %zmm7, %zmm6, %zmm16 + vpaddd %zmm7, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 4608(%rdx), %zmm21 + vmovdqu64 4672(%rdx), %zmm22 + vpsubd %zmm9, %zmm8, %zmm16 + vpaddd %zmm9, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vmovdqu64 4736(%rdx), %zmm21 + vmovdqu64 4800(%rdx), %zmm22 + vpsubd %zmm11, %zmm10, %zmm16 + vpaddd %zmm11, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqu64 4864(%rdx), %zmm21 + vmovdqu64 4928(%rdx), %zmm22 + vpsubd %zmm13, %zmm12, %zmm16 + vpaddd %zmm13, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vmovdqu64 4992(%rdx), %zmm21 + vmovdqu64 5056(%rdx), %zmm22 + vpsubd %zmm15, %zmm14, %zmm16 + vpaddd %zmm15, %zmm14, %zmm14 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 32 + vmovdqu64 5120(%rdx), %zmm21 + vmovdqu64 5184(%rdx), %zmm22 + vpsubd %zmm2, %zmm0, %zmm16 + vpaddd %zmm2, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm2 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm2, %zmm18 + vpmuldq %zmm23, %zmm2, %zmm2 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm2, %zmm16, %zmm2 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm2, %zmm2 + vpblendmd %zmm18, %zmm2, %zmm2{%k1} + vpsubd %zmm3, %zmm1, %zmm16 + vpaddd %zmm3, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm3 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm3, %zmm18 + vpmuldq %zmm23, %zmm3, %zmm3 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm3, %zmm16, %zmm3 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm3, %zmm3 + vpblendmd %zmm18, %zmm3, %zmm3{%k1} + vmovdqu64 5248(%rdx), %zmm21 + vmovdqu64 5312(%rdx), %zmm22 + vpsubd %zmm6, %zmm4, %zmm16 + vpaddd %zmm6, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm6 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm6, %zmm18 + vpmuldq %zmm23, %zmm6, %zmm6 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm6, %zmm16, %zmm6 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm6, %zmm6 + vpblendmd %zmm18, %zmm6, %zmm6{%k1} + vpsubd %zmm7, %zmm5, %zmm16 + vpaddd %zmm7, %zmm5, %zmm5 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 5376(%rdx), %zmm21 + vmovdqu64 5440(%rdx), %zmm22 + vpsubd %zmm10, %zmm8, %zmm16 + vpaddd %zmm10, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm10 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm10, %zmm18 + vpmuldq %zmm23, %zmm10, %zmm10 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm10, %zmm16, %zmm10 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm10, %zmm10 + vpblendmd %zmm18, %zmm10, %zmm10{%k1} + vpsubd %zmm11, %zmm9, %zmm16 + vpaddd %zmm11, %zmm9, %zmm9 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vmovdqu64 5504(%rdx), %zmm21 + vmovdqu64 5568(%rdx), %zmm22 + vpsubd %zmm14, %zmm12, %zmm16 + vpaddd %zmm14, %zmm12, %zmm12 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm13, %zmm16 + vpaddd %zmm15, %zmm13, %zmm13 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 64 + vmovdqu64 5632(%rdx), %zmm21 + vmovdqu64 5696(%rdx), %zmm22 + vpsubd %zmm4, %zmm0, %zmm16 + vpaddd %zmm4, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm4 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm4, %zmm18 + vpmuldq %zmm23, %zmm4, %zmm4 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm4, %zmm16, %zmm4 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm4, %zmm4 + vpblendmd %zmm18, %zmm4, %zmm4{%k1} + vpsubd %zmm5, %zmm1, %zmm16 + vpaddd %zmm5, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm5 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm5, %zmm18 + vpmuldq %zmm23, %zmm5, %zmm5 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm5, %zmm16, %zmm5 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm5, %zmm5 + vpblendmd %zmm18, %zmm5, %zmm5{%k1} + vpsubd %zmm6, %zmm2, %zmm16 + vpaddd %zmm6, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm6 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm6, %zmm18 + vpmuldq %zmm23, %zmm6, %zmm6 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm6, %zmm16, %zmm6 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm6, %zmm6 + vpblendmd %zmm18, %zmm6, %zmm6{%k1} + vpsubd %zmm7, %zmm3, %zmm16 + vpaddd %zmm7, %zmm3, %zmm3 + vpmulld %zmm22, %zmm16, %zmm7 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm7, %zmm18 + vpmuldq %zmm23, %zmm7, %zmm7 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm7, %zmm16, %zmm7 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm7, %zmm7 + vpblendmd %zmm18, %zmm7, %zmm7{%k1} + vmovdqu64 5760(%rdx), %zmm21 + vmovdqu64 5824(%rdx), %zmm22 + vpsubd %zmm12, %zmm8, %zmm16 + vpaddd %zmm12, %zmm8, %zmm8 + vpmulld %zmm22, %zmm16, %zmm12 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm12, %zmm18 + vpmuldq %zmm23, %zmm12, %zmm12 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm12, %zmm16, %zmm12 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm12, %zmm12 + vpblendmd %zmm18, %zmm12, %zmm12{%k1} + vpsubd %zmm13, %zmm9, %zmm16 + vpaddd %zmm13, %zmm9, %zmm9 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsubd %zmm14, %zmm10, %zmm16 + vpaddd %zmm14, %zmm10, %zmm10 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm11, %zmm16 + vpaddd %zmm15, %zmm11, %zmm11 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + # len = 128 + vmovdqu64 5888(%rdx), %zmm21 + vmovdqu64 5952(%rdx), %zmm22 + vpsubd %zmm8, %zmm0, %zmm16 + vpaddd %zmm8, %zmm0, %zmm0 + vpmulld %zmm22, %zmm16, %zmm8 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm8, %zmm18 + vpmuldq %zmm23, %zmm8, %zmm8 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm8, %zmm16, %zmm8 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm8, %zmm8 + vpblendmd %zmm18, %zmm8, %zmm8{%k1} + vpsubd %zmm9, %zmm1, %zmm16 + vpaddd %zmm9, %zmm1, %zmm1 + vpmulld %zmm22, %zmm16, %zmm9 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm9, %zmm18 + vpmuldq %zmm23, %zmm9, %zmm9 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm9, %zmm16, %zmm9 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm9, %zmm9 + vpblendmd %zmm18, %zmm9, %zmm9{%k1} + vpsubd %zmm10, %zmm2, %zmm16 + vpaddd %zmm10, %zmm2, %zmm2 + vpmulld %zmm22, %zmm16, %zmm10 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm10, %zmm18 + vpmuldq %zmm23, %zmm10, %zmm10 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm10, %zmm16, %zmm10 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm10, %zmm10 + vpblendmd %zmm18, %zmm10, %zmm10{%k1} + vpsubd %zmm11, %zmm3, %zmm16 + vpaddd %zmm11, %zmm3, %zmm3 + vpmulld %zmm22, %zmm16, %zmm11 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm11, %zmm18 + vpmuldq %zmm23, %zmm11, %zmm11 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm11, %zmm16, %zmm11 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm11, %zmm11 + vpblendmd %zmm18, %zmm11, %zmm11{%k1} + vpsubd %zmm12, %zmm4, %zmm16 + vpaddd %zmm12, %zmm4, %zmm4 + vpmulld %zmm22, %zmm16, %zmm12 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm12, %zmm18 + vpmuldq %zmm23, %zmm12, %zmm12 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm12, %zmm16, %zmm12 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm12, %zmm12 + vpblendmd %zmm18, %zmm12, %zmm12{%k1} + vpsubd %zmm13, %zmm5, %zmm16 + vpaddd %zmm13, %zmm5, %zmm5 + vpmulld %zmm22, %zmm16, %zmm13 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm13, %zmm18 + vpmuldq %zmm23, %zmm13, %zmm13 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm13, %zmm16, %zmm13 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm13, %zmm13 + vpblendmd %zmm18, %zmm13, %zmm13{%k1} + vpsubd %zmm14, %zmm6, %zmm16 + vpaddd %zmm14, %zmm6, %zmm6 + vpmulld %zmm22, %zmm16, %zmm14 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm14, %zmm18 + vpmuldq %zmm23, %zmm14, %zmm14 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm14, %zmm16, %zmm14 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm14, %zmm14 + vpblendmd %zmm18, %zmm14, %zmm14{%k1} + vpsubd %zmm15, %zmm7, %zmm16 + vpaddd %zmm15, %zmm7, %zmm7 + vpmulld %zmm22, %zmm16, %zmm15 + vmovshdup %zmm16, %zmm17 + vpmuldq %zmm21, %zmm16, %zmm16 + vpmuldq %zmm21, %zmm17, %zmm17 + vmovshdup %zmm15, %zmm18 + vpmuldq %zmm23, %zmm15, %zmm15 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm15, %zmm16, %zmm15 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm15, %zmm15 + vpblendmd %zmm18, %zmm15, %zmm15{%k1} + vmovdqu64 6016(%rdx), %zmm21 + vmovdqu64 6080(%rdx), %zmm22 + vpmulld %zmm22, %zmm0, %zmm16 + vpmulld %zmm22, %zmm1, %zmm19 + vmovshdup %zmm0, %zmm17 + vmovshdup %zmm1, %zmm20 + vpmuldq %zmm21, %zmm0, %zmm0 + vpmuldq %zmm21, %zmm1, %zmm1 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm0, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm1, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm0{%k1} + vpblendmd %zmm17, %zmm19, %zmm1{%k1} + vpmulld %zmm22, %zmm2, %zmm16 + vpmulld %zmm22, %zmm3, %zmm19 + vmovshdup %zmm2, %zmm17 + vmovshdup %zmm3, %zmm20 + vpmuldq %zmm21, %zmm2, %zmm2 + vpmuldq %zmm21, %zmm3, %zmm3 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm2, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm3, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm2{%k1} + vpblendmd %zmm17, %zmm19, %zmm3{%k1} + vpmulld %zmm22, %zmm4, %zmm16 + vpmulld %zmm22, %zmm5, %zmm19 + vmovshdup %zmm4, %zmm17 + vmovshdup %zmm5, %zmm20 + vpmuldq %zmm21, %zmm4, %zmm4 + vpmuldq %zmm21, %zmm5, %zmm5 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm4, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm5, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm4{%k1} + vpblendmd %zmm17, %zmm19, %zmm5{%k1} + vpmulld %zmm22, %zmm6, %zmm16 + vpmulld %zmm22, %zmm7, %zmm19 + vmovshdup %zmm6, %zmm17 + vmovshdup %zmm7, %zmm20 + vpmuldq %zmm21, %zmm6, %zmm6 + vpmuldq %zmm21, %zmm7, %zmm7 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm6, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm7, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm6{%k1} + vpblendmd %zmm17, %zmm19, %zmm7{%k1} + vpmulld %zmm22, %zmm8, %zmm16 + vpmulld %zmm22, %zmm9, %zmm19 + vmovshdup %zmm8, %zmm17 + vmovshdup %zmm9, %zmm20 + vpmuldq %zmm21, %zmm8, %zmm8 + vpmuldq %zmm21, %zmm9, %zmm9 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm8, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm9, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm8{%k1} + vpblendmd %zmm17, %zmm19, %zmm9{%k1} + vpmulld %zmm22, %zmm10, %zmm16 + vpmulld %zmm22, %zmm11, %zmm19 + vmovshdup %zmm10, %zmm17 + vmovshdup %zmm11, %zmm20 + vpmuldq %zmm21, %zmm10, %zmm10 + vpmuldq %zmm21, %zmm11, %zmm11 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm10, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm11, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm10{%k1} + vpblendmd %zmm17, %zmm19, %zmm11{%k1} + vpmulld %zmm22, %zmm12, %zmm16 + vpmulld %zmm22, %zmm13, %zmm19 + vmovshdup %zmm12, %zmm17 + vmovshdup %zmm13, %zmm20 + vpmuldq %zmm21, %zmm12, %zmm12 + vpmuldq %zmm21, %zmm13, %zmm13 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm12, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm13, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm12{%k1} + vpblendmd %zmm17, %zmm19, %zmm13{%k1} + vpmulld %zmm22, %zmm14, %zmm16 + vpmulld %zmm22, %zmm15, %zmm19 + vmovshdup %zmm14, %zmm17 + vmovshdup %zmm15, %zmm20 + vpmuldq %zmm21, %zmm14, %zmm14 + vpmuldq %zmm21, %zmm15, %zmm15 + vpmuldq %zmm21, %zmm17, %zmm17 + vpmuldq %zmm21, %zmm20, %zmm20 + vmovshdup %zmm16, %zmm18 + vpmuldq %zmm23, %zmm16, %zmm16 + vpmuldq %zmm23, %zmm18, %zmm18 + vpsubq %zmm16, %zmm14, %zmm16 + vpsubq %zmm18, %zmm17, %zmm18 + vmovshdup %zmm19, %zmm17 + vpmuldq %zmm23, %zmm19, %zmm19 + vpmuldq %zmm23, %zmm17, %zmm17 + vpsubq %zmm19, %zmm15, %zmm19 + vpsubq %zmm17, %zmm20, %zmm17 + vmovshdup %zmm16, %zmm16 + vmovshdup %zmm19, %zmm19 + vpblendmd %zmm18, %zmm16, %zmm14{%k1} + vpblendmd %zmm17, %zmm19, %zmm15{%k1} + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_invntt_full_1p_avx512,.-wc_mldsa_invntt_full_1p_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_red_avx512 +.type wc_mldsa_poly_red_avx512,@function +.align 16 +wc_mldsa_poly_red_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_red_avx512 +.p2align 4 +_wc_mldsa_poly_red_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rdx + vmovd %edx, %xmm10 + vpbroadcastd %xmm10, %zmm10 + movq $0x400000, %rdx + vmovd %edx, %xmm11 + vpbroadcastd %xmm11, %zmm11 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpaddd %zmm11, %zmm0, %zmm8 + vpaddd %zmm11, %zmm1, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm0, %zmm0 + vpsubd %zmm9, %zmm1, %zmm1 + vpaddd %zmm11, %zmm2, %zmm8 + vpaddd %zmm11, %zmm3, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm2, %zmm2 + vpsubd %zmm9, %zmm3, %zmm3 + vpaddd %zmm11, %zmm4, %zmm8 + vpaddd %zmm11, %zmm5, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm4, %zmm4 + vpsubd %zmm9, %zmm5, %zmm5 + vpaddd %zmm11, %zmm6, %zmm8 + vpaddd %zmm11, %zmm7, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm6, %zmm6 + vpsubd %zmm9, %zmm7, %zmm7 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpaddd %zmm11, %zmm0, %zmm8 + vpaddd %zmm11, %zmm1, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm0, %zmm0 + vpsubd %zmm9, %zmm1, %zmm1 + vpaddd %zmm11, %zmm2, %zmm8 + vpaddd %zmm11, %zmm3, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm2, %zmm2 + vpsubd %zmm9, %zmm3, %zmm3 + vpaddd %zmm11, %zmm4, %zmm8 + vpaddd %zmm11, %zmm5, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm4, %zmm4 + vpsubd %zmm9, %zmm5, %zmm5 + vpaddd %zmm11, %zmm6, %zmm8 + vpaddd %zmm11, %zmm7, %zmm9 + vpsrad $23, %zmm8, %zmm8 + vpsrad $23, %zmm9, %zmm9 + vpmulld %zmm10, %zmm8, %zmm8 + vpmulld %zmm10, %zmm9, %zmm9 + vpsubd %zmm8, %zmm6, %zmm6 + vpsubd %zmm9, %zmm7, %zmm7 + vmovdqu64 %zmm0, 512(%rdi) + vmovdqu64 %zmm1, 576(%rdi) + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 %zmm3, 704(%rdi) + vmovdqu64 %zmm4, 768(%rdi) + vmovdqu64 %zmm5, 832(%rdi) + vmovdqu64 %zmm6, 896(%rdi) + vmovdqu64 %zmm7, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_red_avx512,.-wc_mldsa_poly_red_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_mul_avx512 +.type wc_mldsa_mul_avx512,@function +.align 16 +wc_mldsa_mul_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_mul_avx512 +.p2align 4 +_wc_mldsa_mul_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm8 + vpbroadcastd %xmm8, %zmm8 + movq $0x3802001, %rax + vmovd %eax, %xmm9 + vpbroadcastd %xmm9, %zmm9 + # 0..31 + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 64(%rsi), %zmm2 + vmovdqu64 (%rdx), %zmm4 + vmovdqu64 64(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm2, 64(%rdi) + # 32..63 + vmovdqu64 128(%rsi), %zmm0 + vmovdqu64 192(%rsi), %zmm2 + vmovdqu64 128(%rdx), %zmm4 + vmovdqu64 192(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 128(%rdi) + vmovdqu64 %zmm2, 192(%rdi) + # 64..95 + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 320(%rsi), %zmm2 + vmovdqu64 256(%rdx), %zmm4 + vmovdqu64 320(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 256(%rdi) + vmovdqu64 %zmm2, 320(%rdi) + # 96..127 + vmovdqu64 384(%rsi), %zmm0 + vmovdqu64 448(%rsi), %zmm2 + vmovdqu64 384(%rdx), %zmm4 + vmovdqu64 448(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 384(%rdi) + vmovdqu64 %zmm2, 448(%rdi) + # 128..159 + vmovdqu64 512(%rsi), %zmm0 + vmovdqu64 576(%rsi), %zmm2 + vmovdqu64 512(%rdx), %zmm4 + vmovdqu64 576(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 512(%rdi) + vmovdqu64 %zmm2, 576(%rdi) + # 160..191 + vmovdqu64 640(%rsi), %zmm0 + vmovdqu64 704(%rsi), %zmm2 + vmovdqu64 640(%rdx), %zmm4 + vmovdqu64 704(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 640(%rdi) + vmovdqu64 %zmm2, 704(%rdi) + # 192..223 + vmovdqu64 768(%rsi), %zmm0 + vmovdqu64 832(%rsi), %zmm2 + vmovdqu64 768(%rdx), %zmm4 + vmovdqu64 832(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 768(%rdi) + vmovdqu64 %zmm2, 832(%rdi) + # 224..255 + vmovdqu64 896(%rsi), %zmm0 + vmovdqu64 960(%rsi), %zmm2 + vmovdqu64 896(%rdx), %zmm4 + vmovdqu64 960(%rdx), %zmm6 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm6, %zmm7 + vpmuldq %zmm4, %zmm0, %zmm0 + vpmuldq %zmm5, %zmm1, %zmm1 + vpmuldq %zmm6, %zmm2, %zmm2 + vpmuldq %zmm7, %zmm3, %zmm3 + # Mont Reduce + vpmulld %zmm9, %zmm0, %zmm4 + vpmulld %zmm9, %zmm1, %zmm5 + vpmulld %zmm9, %zmm2, %zmm6 + vpmulld %zmm9, %zmm3, %zmm7 + vpmuldq %zmm8, %zmm4, %zmm4 + vpmuldq %zmm8, %zmm5, %zmm5 + vpmuldq %zmm8, %zmm6, %zmm6 + vpmuldq %zmm8, %zmm7, %zmm7 + vpsubd %zmm4, %zmm0, %zmm0 + vpsubd %zmm5, %zmm1, %zmm1 + vpsubd %zmm6, %zmm2, %zmm2 + vpsubd %zmm7, %zmm3, %zmm3 + vpsrlq $32, %zmm0, %zmm0 + vpsrlq $32, %zmm2, %zmm2 + vpord %zmm1, %zmm0, %zmm0 + vpord %zmm3, %zmm2, %zmm2 + vmovdqu64 %zmm0, 896(%rdi) + vmovdqu64 %zmm2, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_mul_avx512,.-wc_mldsa_mul_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_mul_vec_4_avx512 +.type wc_mldsa_mul_vec_4_avx512,@function +.align 16 +wc_mldsa_mul_vec_4_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_mul_vec_4_avx512 +.p2align 4 +_wc_mldsa_mul_vec_4_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm12 + vpbroadcastd %xmm12, %zmm12 + movq $0x3802001, %rax + vmovd %eax, %xmm13 + vpbroadcastd %xmm13, %zmm13 + # 0..15 + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 1024(%rsi), %zmm2 + vmovdqu64 (%rdx), %zmm6 + vmovdqu64 1024(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2048(%rsi), %zmm2 + vmovdqu64 3072(%rsi), %zmm4 + vmovdqu64 2048(%rdx), %zmm8 + vmovdqu64 3072(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + # 16..31 + vmovdqu64 64(%rsi), %zmm0 + vmovdqu64 1088(%rsi), %zmm2 + vmovdqu64 64(%rdx), %zmm6 + vmovdqu64 1088(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2112(%rsi), %zmm2 + vmovdqu64 3136(%rsi), %zmm4 + vmovdqu64 2112(%rdx), %zmm8 + vmovdqu64 3136(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 64(%rdi) + # 32..47 + vmovdqu64 128(%rsi), %zmm0 + vmovdqu64 1152(%rsi), %zmm2 + vmovdqu64 128(%rdx), %zmm6 + vmovdqu64 1152(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2176(%rsi), %zmm2 + vmovdqu64 3200(%rsi), %zmm4 + vmovdqu64 2176(%rdx), %zmm8 + vmovdqu64 3200(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 128(%rdi) + # 48..63 + vmovdqu64 192(%rsi), %zmm0 + vmovdqu64 1216(%rsi), %zmm2 + vmovdqu64 192(%rdx), %zmm6 + vmovdqu64 1216(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2240(%rsi), %zmm2 + vmovdqu64 3264(%rsi), %zmm4 + vmovdqu64 2240(%rdx), %zmm8 + vmovdqu64 3264(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 192(%rdi) + # 64..79 + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 1280(%rsi), %zmm2 + vmovdqu64 256(%rdx), %zmm6 + vmovdqu64 1280(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2304(%rsi), %zmm2 + vmovdqu64 3328(%rsi), %zmm4 + vmovdqu64 2304(%rdx), %zmm8 + vmovdqu64 3328(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 256(%rdi) + # 80..95 + vmovdqu64 320(%rsi), %zmm0 + vmovdqu64 1344(%rsi), %zmm2 + vmovdqu64 320(%rdx), %zmm6 + vmovdqu64 1344(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2368(%rsi), %zmm2 + vmovdqu64 3392(%rsi), %zmm4 + vmovdqu64 2368(%rdx), %zmm8 + vmovdqu64 3392(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 320(%rdi) + # 96..111 + vmovdqu64 384(%rsi), %zmm0 + vmovdqu64 1408(%rsi), %zmm2 + vmovdqu64 384(%rdx), %zmm6 + vmovdqu64 1408(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2432(%rsi), %zmm2 + vmovdqu64 3456(%rsi), %zmm4 + vmovdqu64 2432(%rdx), %zmm8 + vmovdqu64 3456(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 384(%rdi) + # 112..127 + vmovdqu64 448(%rsi), %zmm0 + vmovdqu64 1472(%rsi), %zmm2 + vmovdqu64 448(%rdx), %zmm6 + vmovdqu64 1472(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2496(%rsi), %zmm2 + vmovdqu64 3520(%rsi), %zmm4 + vmovdqu64 2496(%rdx), %zmm8 + vmovdqu64 3520(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 448(%rdi) + # 128..143 + vmovdqu64 512(%rsi), %zmm0 + vmovdqu64 1536(%rsi), %zmm2 + vmovdqu64 512(%rdx), %zmm6 + vmovdqu64 1536(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2560(%rsi), %zmm2 + vmovdqu64 3584(%rsi), %zmm4 + vmovdqu64 2560(%rdx), %zmm8 + vmovdqu64 3584(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 512(%rdi) + # 144..159 + vmovdqu64 576(%rsi), %zmm0 + vmovdqu64 1600(%rsi), %zmm2 + vmovdqu64 576(%rdx), %zmm6 + vmovdqu64 1600(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2624(%rsi), %zmm2 + vmovdqu64 3648(%rsi), %zmm4 + vmovdqu64 2624(%rdx), %zmm8 + vmovdqu64 3648(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 576(%rdi) + # 160..175 + vmovdqu64 640(%rsi), %zmm0 + vmovdqu64 1664(%rsi), %zmm2 + vmovdqu64 640(%rdx), %zmm6 + vmovdqu64 1664(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2688(%rsi), %zmm2 + vmovdqu64 3712(%rsi), %zmm4 + vmovdqu64 2688(%rdx), %zmm8 + vmovdqu64 3712(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 640(%rdi) + # 176..191 + vmovdqu64 704(%rsi), %zmm0 + vmovdqu64 1728(%rsi), %zmm2 + vmovdqu64 704(%rdx), %zmm6 + vmovdqu64 1728(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2752(%rsi), %zmm2 + vmovdqu64 3776(%rsi), %zmm4 + vmovdqu64 2752(%rdx), %zmm8 + vmovdqu64 3776(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 704(%rdi) + # 192..207 + vmovdqu64 768(%rsi), %zmm0 + vmovdqu64 1792(%rsi), %zmm2 + vmovdqu64 768(%rdx), %zmm6 + vmovdqu64 1792(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2816(%rsi), %zmm2 + vmovdqu64 3840(%rsi), %zmm4 + vmovdqu64 2816(%rdx), %zmm8 + vmovdqu64 3840(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 768(%rdi) + # 208..223 + vmovdqu64 832(%rsi), %zmm0 + vmovdqu64 1856(%rsi), %zmm2 + vmovdqu64 832(%rdx), %zmm6 + vmovdqu64 1856(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2880(%rsi), %zmm2 + vmovdqu64 3904(%rsi), %zmm4 + vmovdqu64 2880(%rdx), %zmm8 + vmovdqu64 3904(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 832(%rdi) + # 224..239 + vmovdqu64 896(%rsi), %zmm0 + vmovdqu64 1920(%rsi), %zmm2 + vmovdqu64 896(%rdx), %zmm6 + vmovdqu64 1920(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2944(%rsi), %zmm2 + vmovdqu64 3968(%rsi), %zmm4 + vmovdqu64 2944(%rdx), %zmm8 + vmovdqu64 3968(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 896(%rdi) + # 240..255 + vmovdqu64 960(%rsi), %zmm0 + vmovdqu64 1984(%rsi), %zmm2 + vmovdqu64 960(%rdx), %zmm6 + vmovdqu64 1984(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 3008(%rsi), %zmm2 + vmovdqu64 4032(%rsi), %zmm4 + vmovdqu64 3008(%rdx), %zmm8 + vmovdqu64 4032(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_mul_vec_4_avx512,.-wc_mldsa_mul_vec_4_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_mul_vec_5_avx512 +.type wc_mldsa_mul_vec_5_avx512,@function +.align 16 +wc_mldsa_mul_vec_5_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_mul_vec_5_avx512 +.p2align 4 +_wc_mldsa_mul_vec_5_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm12 + vpbroadcastd %xmm12, %zmm12 + movq $0x3802001, %rax + vmovd %eax, %xmm13 + vpbroadcastd %xmm13, %zmm13 + # 0..15 + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 1024(%rsi), %zmm2 + vmovdqu64 (%rdx), %zmm6 + vmovdqu64 1024(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2048(%rsi), %zmm2 + vmovdqu64 3072(%rsi), %zmm4 + vmovdqu64 2048(%rdx), %zmm8 + vmovdqu64 3072(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4096(%rsi), %zmm2 + vmovdqu64 4096(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + # 16..31 + vmovdqu64 64(%rsi), %zmm0 + vmovdqu64 1088(%rsi), %zmm2 + vmovdqu64 64(%rdx), %zmm6 + vmovdqu64 1088(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2112(%rsi), %zmm2 + vmovdqu64 3136(%rsi), %zmm4 + vmovdqu64 2112(%rdx), %zmm8 + vmovdqu64 3136(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4160(%rsi), %zmm2 + vmovdqu64 4160(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 64(%rdi) + # 32..47 + vmovdqu64 128(%rsi), %zmm0 + vmovdqu64 1152(%rsi), %zmm2 + vmovdqu64 128(%rdx), %zmm6 + vmovdqu64 1152(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2176(%rsi), %zmm2 + vmovdqu64 3200(%rsi), %zmm4 + vmovdqu64 2176(%rdx), %zmm8 + vmovdqu64 3200(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4224(%rsi), %zmm2 + vmovdqu64 4224(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 128(%rdi) + # 48..63 + vmovdqu64 192(%rsi), %zmm0 + vmovdqu64 1216(%rsi), %zmm2 + vmovdqu64 192(%rdx), %zmm6 + vmovdqu64 1216(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2240(%rsi), %zmm2 + vmovdqu64 3264(%rsi), %zmm4 + vmovdqu64 2240(%rdx), %zmm8 + vmovdqu64 3264(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4288(%rsi), %zmm2 + vmovdqu64 4288(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 192(%rdi) + # 64..79 + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 1280(%rsi), %zmm2 + vmovdqu64 256(%rdx), %zmm6 + vmovdqu64 1280(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2304(%rsi), %zmm2 + vmovdqu64 3328(%rsi), %zmm4 + vmovdqu64 2304(%rdx), %zmm8 + vmovdqu64 3328(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4352(%rsi), %zmm2 + vmovdqu64 4352(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 256(%rdi) + # 80..95 + vmovdqu64 320(%rsi), %zmm0 + vmovdqu64 1344(%rsi), %zmm2 + vmovdqu64 320(%rdx), %zmm6 + vmovdqu64 1344(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2368(%rsi), %zmm2 + vmovdqu64 3392(%rsi), %zmm4 + vmovdqu64 2368(%rdx), %zmm8 + vmovdqu64 3392(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4416(%rsi), %zmm2 + vmovdqu64 4416(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 320(%rdi) + # 96..111 + vmovdqu64 384(%rsi), %zmm0 + vmovdqu64 1408(%rsi), %zmm2 + vmovdqu64 384(%rdx), %zmm6 + vmovdqu64 1408(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2432(%rsi), %zmm2 + vmovdqu64 3456(%rsi), %zmm4 + vmovdqu64 2432(%rdx), %zmm8 + vmovdqu64 3456(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4480(%rsi), %zmm2 + vmovdqu64 4480(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 384(%rdi) + # 112..127 + vmovdqu64 448(%rsi), %zmm0 + vmovdqu64 1472(%rsi), %zmm2 + vmovdqu64 448(%rdx), %zmm6 + vmovdqu64 1472(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2496(%rsi), %zmm2 + vmovdqu64 3520(%rsi), %zmm4 + vmovdqu64 2496(%rdx), %zmm8 + vmovdqu64 3520(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4544(%rsi), %zmm2 + vmovdqu64 4544(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 448(%rdi) + # 128..143 + vmovdqu64 512(%rsi), %zmm0 + vmovdqu64 1536(%rsi), %zmm2 + vmovdqu64 512(%rdx), %zmm6 + vmovdqu64 1536(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2560(%rsi), %zmm2 + vmovdqu64 3584(%rsi), %zmm4 + vmovdqu64 2560(%rdx), %zmm8 + vmovdqu64 3584(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4608(%rsi), %zmm2 + vmovdqu64 4608(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 512(%rdi) + # 144..159 + vmovdqu64 576(%rsi), %zmm0 + vmovdqu64 1600(%rsi), %zmm2 + vmovdqu64 576(%rdx), %zmm6 + vmovdqu64 1600(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2624(%rsi), %zmm2 + vmovdqu64 3648(%rsi), %zmm4 + vmovdqu64 2624(%rdx), %zmm8 + vmovdqu64 3648(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4672(%rsi), %zmm2 + vmovdqu64 4672(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 576(%rdi) + # 160..175 + vmovdqu64 640(%rsi), %zmm0 + vmovdqu64 1664(%rsi), %zmm2 + vmovdqu64 640(%rdx), %zmm6 + vmovdqu64 1664(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2688(%rsi), %zmm2 + vmovdqu64 3712(%rsi), %zmm4 + vmovdqu64 2688(%rdx), %zmm8 + vmovdqu64 3712(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4736(%rsi), %zmm2 + vmovdqu64 4736(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 640(%rdi) + # 176..191 + vmovdqu64 704(%rsi), %zmm0 + vmovdqu64 1728(%rsi), %zmm2 + vmovdqu64 704(%rdx), %zmm6 + vmovdqu64 1728(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2752(%rsi), %zmm2 + vmovdqu64 3776(%rsi), %zmm4 + vmovdqu64 2752(%rdx), %zmm8 + vmovdqu64 3776(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4800(%rsi), %zmm2 + vmovdqu64 4800(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 704(%rdi) + # 192..207 + vmovdqu64 768(%rsi), %zmm0 + vmovdqu64 1792(%rsi), %zmm2 + vmovdqu64 768(%rdx), %zmm6 + vmovdqu64 1792(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2816(%rsi), %zmm2 + vmovdqu64 3840(%rsi), %zmm4 + vmovdqu64 2816(%rdx), %zmm8 + vmovdqu64 3840(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4864(%rsi), %zmm2 + vmovdqu64 4864(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 768(%rdi) + # 208..223 + vmovdqu64 832(%rsi), %zmm0 + vmovdqu64 1856(%rsi), %zmm2 + vmovdqu64 832(%rdx), %zmm6 + vmovdqu64 1856(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2880(%rsi), %zmm2 + vmovdqu64 3904(%rsi), %zmm4 + vmovdqu64 2880(%rdx), %zmm8 + vmovdqu64 3904(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4928(%rsi), %zmm2 + vmovdqu64 4928(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 832(%rdi) + # 224..239 + vmovdqu64 896(%rsi), %zmm0 + vmovdqu64 1920(%rsi), %zmm2 + vmovdqu64 896(%rdx), %zmm6 + vmovdqu64 1920(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2944(%rsi), %zmm2 + vmovdqu64 3968(%rsi), %zmm4 + vmovdqu64 2944(%rdx), %zmm8 + vmovdqu64 3968(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4992(%rsi), %zmm2 + vmovdqu64 4992(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 896(%rdi) + # 240..255 + vmovdqu64 960(%rsi), %zmm0 + vmovdqu64 1984(%rsi), %zmm2 + vmovdqu64 960(%rdx), %zmm6 + vmovdqu64 1984(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 3008(%rsi), %zmm2 + vmovdqu64 4032(%rsi), %zmm4 + vmovdqu64 3008(%rdx), %zmm8 + vmovdqu64 4032(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 5056(%rsi), %zmm2 + vmovdqu64 5056(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_mul_vec_5_avx512,.-wc_mldsa_mul_vec_5_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_mul_vec_7_avx512 +.type wc_mldsa_mul_vec_7_avx512,@function +.align 16 +wc_mldsa_mul_vec_7_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_mul_vec_7_avx512 +.p2align 4 +_wc_mldsa_mul_vec_7_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rax + vmovd %eax, %xmm12 + vpbroadcastd %xmm12, %zmm12 + movq $0x3802001, %rax + vmovd %eax, %xmm13 + vpbroadcastd %xmm13, %zmm13 + # 0..15 + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 1024(%rsi), %zmm2 + vmovdqu64 (%rdx), %zmm6 + vmovdqu64 1024(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2048(%rsi), %zmm2 + vmovdqu64 3072(%rsi), %zmm4 + vmovdqu64 2048(%rdx), %zmm8 + vmovdqu64 3072(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4096(%rsi), %zmm2 + vmovdqu64 5120(%rsi), %zmm4 + vmovdqu64 4096(%rdx), %zmm8 + vmovdqu64 5120(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6144(%rsi), %zmm2 + vmovdqu64 6144(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + # 16..31 + vmovdqu64 64(%rsi), %zmm0 + vmovdqu64 1088(%rsi), %zmm2 + vmovdqu64 64(%rdx), %zmm6 + vmovdqu64 1088(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2112(%rsi), %zmm2 + vmovdqu64 3136(%rsi), %zmm4 + vmovdqu64 2112(%rdx), %zmm8 + vmovdqu64 3136(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4160(%rsi), %zmm2 + vmovdqu64 5184(%rsi), %zmm4 + vmovdqu64 4160(%rdx), %zmm8 + vmovdqu64 5184(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6208(%rsi), %zmm2 + vmovdqu64 6208(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 64(%rdi) + # 32..47 + vmovdqu64 128(%rsi), %zmm0 + vmovdqu64 1152(%rsi), %zmm2 + vmovdqu64 128(%rdx), %zmm6 + vmovdqu64 1152(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2176(%rsi), %zmm2 + vmovdqu64 3200(%rsi), %zmm4 + vmovdqu64 2176(%rdx), %zmm8 + vmovdqu64 3200(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4224(%rsi), %zmm2 + vmovdqu64 5248(%rsi), %zmm4 + vmovdqu64 4224(%rdx), %zmm8 + vmovdqu64 5248(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6272(%rsi), %zmm2 + vmovdqu64 6272(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 128(%rdi) + # 48..63 + vmovdqu64 192(%rsi), %zmm0 + vmovdqu64 1216(%rsi), %zmm2 + vmovdqu64 192(%rdx), %zmm6 + vmovdqu64 1216(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2240(%rsi), %zmm2 + vmovdqu64 3264(%rsi), %zmm4 + vmovdqu64 2240(%rdx), %zmm8 + vmovdqu64 3264(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4288(%rsi), %zmm2 + vmovdqu64 5312(%rsi), %zmm4 + vmovdqu64 4288(%rdx), %zmm8 + vmovdqu64 5312(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6336(%rsi), %zmm2 + vmovdqu64 6336(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 192(%rdi) + # 64..79 + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 1280(%rsi), %zmm2 + vmovdqu64 256(%rdx), %zmm6 + vmovdqu64 1280(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2304(%rsi), %zmm2 + vmovdqu64 3328(%rsi), %zmm4 + vmovdqu64 2304(%rdx), %zmm8 + vmovdqu64 3328(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4352(%rsi), %zmm2 + vmovdqu64 5376(%rsi), %zmm4 + vmovdqu64 4352(%rdx), %zmm8 + vmovdqu64 5376(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6400(%rsi), %zmm2 + vmovdqu64 6400(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 256(%rdi) + # 80..95 + vmovdqu64 320(%rsi), %zmm0 + vmovdqu64 1344(%rsi), %zmm2 + vmovdqu64 320(%rdx), %zmm6 + vmovdqu64 1344(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2368(%rsi), %zmm2 + vmovdqu64 3392(%rsi), %zmm4 + vmovdqu64 2368(%rdx), %zmm8 + vmovdqu64 3392(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4416(%rsi), %zmm2 + vmovdqu64 5440(%rsi), %zmm4 + vmovdqu64 4416(%rdx), %zmm8 + vmovdqu64 5440(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6464(%rsi), %zmm2 + vmovdqu64 6464(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 320(%rdi) + # 96..111 + vmovdqu64 384(%rsi), %zmm0 + vmovdqu64 1408(%rsi), %zmm2 + vmovdqu64 384(%rdx), %zmm6 + vmovdqu64 1408(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2432(%rsi), %zmm2 + vmovdqu64 3456(%rsi), %zmm4 + vmovdqu64 2432(%rdx), %zmm8 + vmovdqu64 3456(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4480(%rsi), %zmm2 + vmovdqu64 5504(%rsi), %zmm4 + vmovdqu64 4480(%rdx), %zmm8 + vmovdqu64 5504(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6528(%rsi), %zmm2 + vmovdqu64 6528(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 384(%rdi) + # 112..127 + vmovdqu64 448(%rsi), %zmm0 + vmovdqu64 1472(%rsi), %zmm2 + vmovdqu64 448(%rdx), %zmm6 + vmovdqu64 1472(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2496(%rsi), %zmm2 + vmovdqu64 3520(%rsi), %zmm4 + vmovdqu64 2496(%rdx), %zmm8 + vmovdqu64 3520(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4544(%rsi), %zmm2 + vmovdqu64 5568(%rsi), %zmm4 + vmovdqu64 4544(%rdx), %zmm8 + vmovdqu64 5568(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6592(%rsi), %zmm2 + vmovdqu64 6592(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 448(%rdi) + # 128..143 + vmovdqu64 512(%rsi), %zmm0 + vmovdqu64 1536(%rsi), %zmm2 + vmovdqu64 512(%rdx), %zmm6 + vmovdqu64 1536(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2560(%rsi), %zmm2 + vmovdqu64 3584(%rsi), %zmm4 + vmovdqu64 2560(%rdx), %zmm8 + vmovdqu64 3584(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4608(%rsi), %zmm2 + vmovdqu64 5632(%rsi), %zmm4 + vmovdqu64 4608(%rdx), %zmm8 + vmovdqu64 5632(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6656(%rsi), %zmm2 + vmovdqu64 6656(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 512(%rdi) + # 144..159 + vmovdqu64 576(%rsi), %zmm0 + vmovdqu64 1600(%rsi), %zmm2 + vmovdqu64 576(%rdx), %zmm6 + vmovdqu64 1600(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2624(%rsi), %zmm2 + vmovdqu64 3648(%rsi), %zmm4 + vmovdqu64 2624(%rdx), %zmm8 + vmovdqu64 3648(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4672(%rsi), %zmm2 + vmovdqu64 5696(%rsi), %zmm4 + vmovdqu64 4672(%rdx), %zmm8 + vmovdqu64 5696(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6720(%rsi), %zmm2 + vmovdqu64 6720(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 576(%rdi) + # 160..175 + vmovdqu64 640(%rsi), %zmm0 + vmovdqu64 1664(%rsi), %zmm2 + vmovdqu64 640(%rdx), %zmm6 + vmovdqu64 1664(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2688(%rsi), %zmm2 + vmovdqu64 3712(%rsi), %zmm4 + vmovdqu64 2688(%rdx), %zmm8 + vmovdqu64 3712(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4736(%rsi), %zmm2 + vmovdqu64 5760(%rsi), %zmm4 + vmovdqu64 4736(%rdx), %zmm8 + vmovdqu64 5760(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6784(%rsi), %zmm2 + vmovdqu64 6784(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 640(%rdi) + # 176..191 + vmovdqu64 704(%rsi), %zmm0 + vmovdqu64 1728(%rsi), %zmm2 + vmovdqu64 704(%rdx), %zmm6 + vmovdqu64 1728(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2752(%rsi), %zmm2 + vmovdqu64 3776(%rsi), %zmm4 + vmovdqu64 2752(%rdx), %zmm8 + vmovdqu64 3776(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4800(%rsi), %zmm2 + vmovdqu64 5824(%rsi), %zmm4 + vmovdqu64 4800(%rdx), %zmm8 + vmovdqu64 5824(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6848(%rsi), %zmm2 + vmovdqu64 6848(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 704(%rdi) + # 192..207 + vmovdqu64 768(%rsi), %zmm0 + vmovdqu64 1792(%rsi), %zmm2 + vmovdqu64 768(%rdx), %zmm6 + vmovdqu64 1792(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2816(%rsi), %zmm2 + vmovdqu64 3840(%rsi), %zmm4 + vmovdqu64 2816(%rdx), %zmm8 + vmovdqu64 3840(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4864(%rsi), %zmm2 + vmovdqu64 5888(%rsi), %zmm4 + vmovdqu64 4864(%rdx), %zmm8 + vmovdqu64 5888(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6912(%rsi), %zmm2 + vmovdqu64 6912(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 768(%rdi) + # 208..223 + vmovdqu64 832(%rsi), %zmm0 + vmovdqu64 1856(%rsi), %zmm2 + vmovdqu64 832(%rdx), %zmm6 + vmovdqu64 1856(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2880(%rsi), %zmm2 + vmovdqu64 3904(%rsi), %zmm4 + vmovdqu64 2880(%rdx), %zmm8 + vmovdqu64 3904(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4928(%rsi), %zmm2 + vmovdqu64 5952(%rsi), %zmm4 + vmovdqu64 4928(%rdx), %zmm8 + vmovdqu64 5952(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 6976(%rsi), %zmm2 + vmovdqu64 6976(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 832(%rdi) + # 224..239 + vmovdqu64 896(%rsi), %zmm0 + vmovdqu64 1920(%rsi), %zmm2 + vmovdqu64 896(%rdx), %zmm6 + vmovdqu64 1920(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 2944(%rsi), %zmm2 + vmovdqu64 3968(%rsi), %zmm4 + vmovdqu64 2944(%rdx), %zmm8 + vmovdqu64 3968(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 4992(%rsi), %zmm2 + vmovdqu64 6016(%rsi), %zmm4 + vmovdqu64 4992(%rdx), %zmm8 + vmovdqu64 6016(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 7040(%rsi), %zmm2 + vmovdqu64 7040(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 896(%rdi) + # 240..255 + vmovdqu64 960(%rsi), %zmm0 + vmovdqu64 1984(%rsi), %zmm2 + vmovdqu64 960(%rdx), %zmm6 + vmovdqu64 1984(%rdx), %zmm8 + vpshufd $0xf5, %zmm0, %zmm1 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm6, %zmm7 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm6, %zmm0, %zmm0 + vpmuldq %zmm7, %zmm1, %zmm1 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vmovdqu64 3008(%rsi), %zmm2 + vmovdqu64 4032(%rsi), %zmm4 + vmovdqu64 3008(%rdx), %zmm8 + vmovdqu64 4032(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 5056(%rsi), %zmm2 + vmovdqu64 6080(%rsi), %zmm4 + vmovdqu64 5056(%rdx), %zmm8 + vmovdqu64 6080(%rdx), %zmm10 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm4, %zmm5 + vpshufd $0xf5, %zmm8, %zmm9 + vpshufd $0xf5, %zmm10, %zmm11 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpmuldq %zmm10, %zmm4, %zmm4 + vpmuldq %zmm11, %zmm5, %zmm5 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + vpaddq %zmm4, %zmm0, %zmm0 + vpaddq %zmm5, %zmm1, %zmm1 + vmovdqu64 7104(%rsi), %zmm2 + vmovdqu64 7104(%rdx), %zmm8 + vpshufd $0xf5, %zmm2, %zmm3 + vpshufd $0xf5, %zmm8, %zmm9 + vpmuldq %zmm8, %zmm2, %zmm2 + vpmuldq %zmm9, %zmm3, %zmm3 + vpaddq %zmm2, %zmm0, %zmm0 + vpaddq %zmm3, %zmm1, %zmm1 + # Mont Reduce + vpmulld %zmm13, %zmm0, %zmm6 + vpmulld %zmm13, %zmm1, %zmm7 + vpmuldq %zmm12, %zmm6, %zmm6 + vpmuldq %zmm12, %zmm7, %zmm7 + vpsubd %zmm6, %zmm0, %zmm0 + vpsubd %zmm7, %zmm1, %zmm1 + vpsrlq $32, %zmm0, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu64 %zmm0, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_mul_vec_7_avx512,.-wc_mldsa_mul_vec_7_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_decompose_q88_avx512 +.type wc_mldsa_decompose_q88_avx512,@function +.align 16 +wc_mldsa_decompose_q88_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decompose_q88_avx512 +.p2align 4 +_wc_mldsa_decompose_q88_avx512: +#endif /* __APPLE__ */ + movq $0x17400, %rax + vmovd %eax, %xmm12 + vpbroadcastd %xmm12, %zmm12 + movq $0x2e800, %rax + vmovd %eax, %xmm13 + vpbroadcastd %xmm13, %zmm13 + movq $0x3fefd4, %rax + vmovd %eax, %xmm14 + vpbroadcastd %xmm14, %zmm14 + movq $44, %rax + vmovd %eax, %xmm15 + vpbroadcastd %xmm15, %zmm15 + movq $0x01, %rax + vmovd %eax, %xmm16 + vpbroadcastd %xmm16, %zmm16 + # 1/4 vectors + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, (%rsi) + vmovdqu64 %zmm5, 64(%rsi) + vmovdqu64 %zmm6, 128(%rsi) + vmovdqu64 %zmm7, 192(%rsi) + vmovdqu64 %zmm8, (%rdx) + vmovdqu64 %zmm9, 64(%rdx) + vmovdqu64 %zmm10, 128(%rdx) + vmovdqu64 %zmm11, 192(%rdx) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 384(%rdi), %zmm2 + vmovdqu64 448(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 256(%rsi) + vmovdqu64 %zmm5, 320(%rsi) + vmovdqu64 %zmm6, 384(%rsi) + vmovdqu64 %zmm7, 448(%rsi) + vmovdqu64 %zmm8, 256(%rdx) + vmovdqu64 %zmm9, 320(%rdx) + vmovdqu64 %zmm10, 384(%rdx) + vmovdqu64 %zmm11, 448(%rdx) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 512(%rsi) + vmovdqu64 %zmm5, 576(%rsi) + vmovdqu64 %zmm6, 640(%rsi) + vmovdqu64 %zmm7, 704(%rsi) + vmovdqu64 %zmm8, 512(%rdx) + vmovdqu64 %zmm9, 576(%rdx) + vmovdqu64 %zmm10, 640(%rdx) + vmovdqu64 %zmm11, 704(%rdx) + vmovdqu64 768(%rdi), %zmm0 + vmovdqu64 832(%rdi), %zmm1 + vmovdqu64 896(%rdi), %zmm2 + vmovdqu64 960(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 768(%rsi) + vmovdqu64 %zmm5, 832(%rsi) + vmovdqu64 %zmm6, 896(%rsi) + vmovdqu64 %zmm7, 960(%rsi) + vmovdqu64 %zmm8, 768(%rdx) + vmovdqu64 %zmm9, 832(%rdx) + vmovdqu64 %zmm10, 896(%rdx) + vmovdqu64 %zmm11, 960(%rdx) + # 2/4 vectors + vmovdqu64 1024(%rdi), %zmm0 + vmovdqu64 1088(%rdi), %zmm1 + vmovdqu64 1152(%rdi), %zmm2 + vmovdqu64 1216(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 1024(%rsi) + vmovdqu64 %zmm5, 1088(%rsi) + vmovdqu64 %zmm6, 1152(%rsi) + vmovdqu64 %zmm7, 1216(%rsi) + vmovdqu64 %zmm8, 1024(%rdx) + vmovdqu64 %zmm9, 1088(%rdx) + vmovdqu64 %zmm10, 1152(%rdx) + vmovdqu64 %zmm11, 1216(%rdx) + vmovdqu64 1280(%rdi), %zmm0 + vmovdqu64 1344(%rdi), %zmm1 + vmovdqu64 1408(%rdi), %zmm2 + vmovdqu64 1472(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 1280(%rsi) + vmovdqu64 %zmm5, 1344(%rsi) + vmovdqu64 %zmm6, 1408(%rsi) + vmovdqu64 %zmm7, 1472(%rsi) + vmovdqu64 %zmm8, 1280(%rdx) + vmovdqu64 %zmm9, 1344(%rdx) + vmovdqu64 %zmm10, 1408(%rdx) + vmovdqu64 %zmm11, 1472(%rdx) + vmovdqu64 1536(%rdi), %zmm0 + vmovdqu64 1600(%rdi), %zmm1 + vmovdqu64 1664(%rdi), %zmm2 + vmovdqu64 1728(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 1536(%rsi) + vmovdqu64 %zmm5, 1600(%rsi) + vmovdqu64 %zmm6, 1664(%rsi) + vmovdqu64 %zmm7, 1728(%rsi) + vmovdqu64 %zmm8, 1536(%rdx) + vmovdqu64 %zmm9, 1600(%rdx) + vmovdqu64 %zmm10, 1664(%rdx) + vmovdqu64 %zmm11, 1728(%rdx) + vmovdqu64 1792(%rdi), %zmm0 + vmovdqu64 1856(%rdi), %zmm1 + vmovdqu64 1920(%rdi), %zmm2 + vmovdqu64 1984(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 1792(%rsi) + vmovdqu64 %zmm5, 1856(%rsi) + vmovdqu64 %zmm6, 1920(%rsi) + vmovdqu64 %zmm7, 1984(%rsi) + vmovdqu64 %zmm8, 1792(%rdx) + vmovdqu64 %zmm9, 1856(%rdx) + vmovdqu64 %zmm10, 1920(%rdx) + vmovdqu64 %zmm11, 1984(%rdx) + # 3/4 vectors + vmovdqu64 2048(%rdi), %zmm0 + vmovdqu64 2112(%rdi), %zmm1 + vmovdqu64 2176(%rdi), %zmm2 + vmovdqu64 2240(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 2048(%rsi) + vmovdqu64 %zmm5, 2112(%rsi) + vmovdqu64 %zmm6, 2176(%rsi) + vmovdqu64 %zmm7, 2240(%rsi) + vmovdqu64 %zmm8, 2048(%rdx) + vmovdqu64 %zmm9, 2112(%rdx) + vmovdqu64 %zmm10, 2176(%rdx) + vmovdqu64 %zmm11, 2240(%rdx) + vmovdqu64 2304(%rdi), %zmm0 + vmovdqu64 2368(%rdi), %zmm1 + vmovdqu64 2432(%rdi), %zmm2 + vmovdqu64 2496(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 2304(%rsi) + vmovdqu64 %zmm5, 2368(%rsi) + vmovdqu64 %zmm6, 2432(%rsi) + vmovdqu64 %zmm7, 2496(%rsi) + vmovdqu64 %zmm8, 2304(%rdx) + vmovdqu64 %zmm9, 2368(%rdx) + vmovdqu64 %zmm10, 2432(%rdx) + vmovdqu64 %zmm11, 2496(%rdx) + vmovdqu64 2560(%rdi), %zmm0 + vmovdqu64 2624(%rdi), %zmm1 + vmovdqu64 2688(%rdi), %zmm2 + vmovdqu64 2752(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 2560(%rsi) + vmovdqu64 %zmm5, 2624(%rsi) + vmovdqu64 %zmm6, 2688(%rsi) + vmovdqu64 %zmm7, 2752(%rsi) + vmovdqu64 %zmm8, 2560(%rdx) + vmovdqu64 %zmm9, 2624(%rdx) + vmovdqu64 %zmm10, 2688(%rdx) + vmovdqu64 %zmm11, 2752(%rdx) + vmovdqu64 2816(%rdi), %zmm0 + vmovdqu64 2880(%rdi), %zmm1 + vmovdqu64 2944(%rdi), %zmm2 + vmovdqu64 3008(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 2816(%rsi) + vmovdqu64 %zmm5, 2880(%rsi) + vmovdqu64 %zmm6, 2944(%rsi) + vmovdqu64 %zmm7, 3008(%rsi) + vmovdqu64 %zmm8, 2816(%rdx) + vmovdqu64 %zmm9, 2880(%rdx) + vmovdqu64 %zmm10, 2944(%rdx) + vmovdqu64 %zmm11, 3008(%rdx) + # 4/4 vectors + vmovdqu64 3072(%rdi), %zmm0 + vmovdqu64 3136(%rdi), %zmm1 + vmovdqu64 3200(%rdi), %zmm2 + vmovdqu64 3264(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 3072(%rsi) + vmovdqu64 %zmm5, 3136(%rsi) + vmovdqu64 %zmm6, 3200(%rsi) + vmovdqu64 %zmm7, 3264(%rsi) + vmovdqu64 %zmm8, 3072(%rdx) + vmovdqu64 %zmm9, 3136(%rdx) + vmovdqu64 %zmm10, 3200(%rdx) + vmovdqu64 %zmm11, 3264(%rdx) + vmovdqu64 3328(%rdi), %zmm0 + vmovdqu64 3392(%rdi), %zmm1 + vmovdqu64 3456(%rdi), %zmm2 + vmovdqu64 3520(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 3328(%rsi) + vmovdqu64 %zmm5, 3392(%rsi) + vmovdqu64 %zmm6, 3456(%rsi) + vmovdqu64 %zmm7, 3520(%rsi) + vmovdqu64 %zmm8, 3328(%rdx) + vmovdqu64 %zmm9, 3392(%rdx) + vmovdqu64 %zmm10, 3456(%rdx) + vmovdqu64 %zmm11, 3520(%rdx) + vmovdqu64 3584(%rdi), %zmm0 + vmovdqu64 3648(%rdi), %zmm1 + vmovdqu64 3712(%rdi), %zmm2 + vmovdqu64 3776(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 3584(%rsi) + vmovdqu64 %zmm5, 3648(%rsi) + vmovdqu64 %zmm6, 3712(%rsi) + vmovdqu64 %zmm7, 3776(%rsi) + vmovdqu64 %zmm8, 3584(%rdx) + vmovdqu64 %zmm9, 3648(%rdx) + vmovdqu64 %zmm10, 3712(%rdx) + vmovdqu64 %zmm11, 3776(%rdx) + vmovdqu64 3840(%rdi), %zmm0 + vmovdqu64 3904(%rdi), %zmm1 + vmovdqu64 3968(%rdi), %zmm2 + vmovdqu64 4032(%rdi), %zmm3 + vpmulld %zmm15, %zmm0, %zmm8 + vpmulld %zmm15, %zmm1, %zmm9 + vpmulld %zmm15, %zmm2, %zmm10 + vpmulld %zmm15, %zmm3, %zmm11 + vpaddd %zmm14, %zmm8, %zmm8 + vpaddd %zmm14, %zmm9, %zmm9 + vpaddd %zmm14, %zmm10, %zmm10 + vpaddd %zmm14, %zmm11, %zmm11 + vpsrld $23, %zmm8, %zmm8 + vpsrld $23, %zmm9, %zmm9 + vpsrld $23, %zmm10, %zmm10 + vpsrld $23, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpcmpeqd %zmm15, %zmm8, %k1 + vpsubd %zmm16, %zmm4, %zmm4{%k1} + vpcmpeqd %zmm15, %zmm9, %k1 + vpsubd %zmm16, %zmm5, %zmm5{%k1} + vpcmpeqd %zmm15, %zmm10, %k1 + vpsubd %zmm16, %zmm6, %zmm6{%k1} + vpcmpeqd %zmm15, %zmm11, %k1 + vpsubd %zmm16, %zmm7, %zmm7{%k1} + vpcmpgtd %zmm8, %zmm15, %k2 + vmovdqa32 %zmm8, %zmm8{%k2}{z} + vpcmpgtd %zmm9, %zmm15, %k2 + vmovdqa32 %zmm9, %zmm9{%k2}{z} + vpcmpgtd %zmm10, %zmm15, %k2 + vmovdqa32 %zmm10, %zmm10{%k2}{z} + vpcmpgtd %zmm11, %zmm15, %k2 + vmovdqa32 %zmm11, %zmm11{%k2}{z} + vmovdqu64 %zmm4, 3840(%rsi) + vmovdqu64 %zmm5, 3904(%rsi) + vmovdqu64 %zmm6, 3968(%rsi) + vmovdqu64 %zmm7, 4032(%rsi) + vmovdqu64 %zmm8, 3840(%rdx) + vmovdqu64 %zmm9, 3904(%rdx) + vmovdqu64 %zmm10, 3968(%rdx) + vmovdqu64 %zmm11, 4032(%rdx) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_decompose_q88_avx512,.-wc_mldsa_decompose_q88_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_decompose_q32_avx512 +.type wc_mldsa_decompose_q32_avx512,@function +.align 16 +wc_mldsa_decompose_q32_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_decompose_q32_avx512 +.p2align 4 +_wc_mldsa_decompose_q32_avx512: +#endif /* __APPLE__ */ + movq $0x3ff00, %rax + vmovd %eax, %xmm12 + vpbroadcastd %xmm12, %zmm12 + movq $0x7fe00, %rax + vmovd %eax, %xmm13 + vpbroadcastd %xmm13, %zmm13 + movq $0x3feff, %rax + vmovd %eax, %xmm14 + vpbroadcastd %xmm14, %zmm14 + movq $15, %rax + vmovd %eax, %xmm15 + vpbroadcastd %xmm15, %zmm15 +L_mldsa_decompose_q32_avx512_start_256: + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vpaddd %zmm14, %zmm0, %zmm8 + vpaddd %zmm14, %zmm1, %zmm9 + vpaddd %zmm14, %zmm2, %zmm10 + vpaddd %zmm14, %zmm3, %zmm11 + vpsrld $19, %zmm8, %zmm8 + vpsrld $19, %zmm9, %zmm9 + vpsrld $19, %zmm10, %zmm10 + vpsrld $19, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsrld $4, %zmm8, %zmm0 + vpsrld $4, %zmm9, %zmm1 + vpsrld $4, %zmm10, %zmm2 + vpsrld $4, %zmm11, %zmm3 + vpsubd %zmm0, %zmm4, %zmm4 + vpsubd %zmm1, %zmm5, %zmm5 + vpsubd %zmm2, %zmm6, %zmm6 + vpsubd %zmm3, %zmm7, %zmm7 + vpandd %zmm15, %zmm8, %zmm8 + vpandd %zmm15, %zmm9, %zmm9 + vpandd %zmm15, %zmm10, %zmm10 + vpandd %zmm15, %zmm11, %zmm11 + vmovdqu64 %zmm4, (%rdx) + vmovdqu64 %zmm5, 64(%rdx) + vmovdqu64 %zmm6, 128(%rdx) + vmovdqu64 %zmm7, 192(%rdx) + vmovdqu64 %zmm8, (%rcx) + vmovdqu64 %zmm9, 64(%rcx) + vmovdqu64 %zmm10, 128(%rcx) + vmovdqu64 %zmm11, 192(%rcx) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 384(%rdi), %zmm2 + vmovdqu64 448(%rdi), %zmm3 + vpaddd %zmm14, %zmm0, %zmm8 + vpaddd %zmm14, %zmm1, %zmm9 + vpaddd %zmm14, %zmm2, %zmm10 + vpaddd %zmm14, %zmm3, %zmm11 + vpsrld $19, %zmm8, %zmm8 + vpsrld $19, %zmm9, %zmm9 + vpsrld $19, %zmm10, %zmm10 + vpsrld $19, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsrld $4, %zmm8, %zmm0 + vpsrld $4, %zmm9, %zmm1 + vpsrld $4, %zmm10, %zmm2 + vpsrld $4, %zmm11, %zmm3 + vpsubd %zmm0, %zmm4, %zmm4 + vpsubd %zmm1, %zmm5, %zmm5 + vpsubd %zmm2, %zmm6, %zmm6 + vpsubd %zmm3, %zmm7, %zmm7 + vpandd %zmm15, %zmm8, %zmm8 + vpandd %zmm15, %zmm9, %zmm9 + vpandd %zmm15, %zmm10, %zmm10 + vpandd %zmm15, %zmm11, %zmm11 + vmovdqu64 %zmm4, 256(%rdx) + vmovdqu64 %zmm5, 320(%rdx) + vmovdqu64 %zmm6, 384(%rdx) + vmovdqu64 %zmm7, 448(%rdx) + vmovdqu64 %zmm8, 256(%rcx) + vmovdqu64 %zmm9, 320(%rcx) + vmovdqu64 %zmm10, 384(%rcx) + vmovdqu64 %zmm11, 448(%rcx) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vpaddd %zmm14, %zmm0, %zmm8 + vpaddd %zmm14, %zmm1, %zmm9 + vpaddd %zmm14, %zmm2, %zmm10 + vpaddd %zmm14, %zmm3, %zmm11 + vpsrld $19, %zmm8, %zmm8 + vpsrld $19, %zmm9, %zmm9 + vpsrld $19, %zmm10, %zmm10 + vpsrld $19, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsrld $4, %zmm8, %zmm0 + vpsrld $4, %zmm9, %zmm1 + vpsrld $4, %zmm10, %zmm2 + vpsrld $4, %zmm11, %zmm3 + vpsubd %zmm0, %zmm4, %zmm4 + vpsubd %zmm1, %zmm5, %zmm5 + vpsubd %zmm2, %zmm6, %zmm6 + vpsubd %zmm3, %zmm7, %zmm7 + vpandd %zmm15, %zmm8, %zmm8 + vpandd %zmm15, %zmm9, %zmm9 + vpandd %zmm15, %zmm10, %zmm10 + vpandd %zmm15, %zmm11, %zmm11 + vmovdqu64 %zmm4, 512(%rdx) + vmovdqu64 %zmm5, 576(%rdx) + vmovdqu64 %zmm6, 640(%rdx) + vmovdqu64 %zmm7, 704(%rdx) + vmovdqu64 %zmm8, 512(%rcx) + vmovdqu64 %zmm9, 576(%rcx) + vmovdqu64 %zmm10, 640(%rcx) + vmovdqu64 %zmm11, 704(%rcx) + vmovdqu64 768(%rdi), %zmm0 + vmovdqu64 832(%rdi), %zmm1 + vmovdqu64 896(%rdi), %zmm2 + vmovdqu64 960(%rdi), %zmm3 + vpaddd %zmm14, %zmm0, %zmm8 + vpaddd %zmm14, %zmm1, %zmm9 + vpaddd %zmm14, %zmm2, %zmm10 + vpaddd %zmm14, %zmm3, %zmm11 + vpsrld $19, %zmm8, %zmm8 + vpsrld $19, %zmm9, %zmm9 + vpsrld $19, %zmm10, %zmm10 + vpsrld $19, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsubd %zmm4, %zmm12, %zmm4 + vpsubd %zmm5, %zmm12, %zmm5 + vpsubd %zmm6, %zmm12, %zmm6 + vpsubd %zmm7, %zmm12, %zmm7 + vpsrld $31, %zmm4, %zmm4 + vpsrld $31, %zmm5, %zmm5 + vpsrld $31, %zmm6, %zmm6 + vpsrld $31, %zmm7, %zmm7 + vpaddd %zmm4, %zmm8, %zmm8 + vpaddd %zmm5, %zmm9, %zmm9 + vpaddd %zmm6, %zmm10, %zmm10 + vpaddd %zmm7, %zmm11, %zmm11 + vpmulld %zmm13, %zmm8, %zmm4 + vpmulld %zmm13, %zmm9, %zmm5 + vpmulld %zmm13, %zmm10, %zmm6 + vpmulld %zmm13, %zmm11, %zmm7 + vpsubd %zmm4, %zmm0, %zmm4 + vpsubd %zmm5, %zmm1, %zmm5 + vpsubd %zmm6, %zmm2, %zmm6 + vpsubd %zmm7, %zmm3, %zmm7 + vpsrld $4, %zmm8, %zmm0 + vpsrld $4, %zmm9, %zmm1 + vpsrld $4, %zmm10, %zmm2 + vpsrld $4, %zmm11, %zmm3 + vpsubd %zmm0, %zmm4, %zmm4 + vpsubd %zmm1, %zmm5, %zmm5 + vpsubd %zmm2, %zmm6, %zmm6 + vpsubd %zmm3, %zmm7, %zmm7 + vpandd %zmm15, %zmm8, %zmm8 + vpandd %zmm15, %zmm9, %zmm9 + vpandd %zmm15, %zmm10, %zmm10 + vpandd %zmm15, %zmm11, %zmm11 + vmovdqu64 %zmm4, 768(%rdx) + vmovdqu64 %zmm5, 832(%rdx) + vmovdqu64 %zmm6, 896(%rdx) + vmovdqu64 %zmm7, 960(%rdx) + vmovdqu64 %zmm8, 768(%rcx) + vmovdqu64 %zmm9, 832(%rcx) + vmovdqu64 %zmm10, 896(%rcx) + vmovdqu64 %zmm11, 960(%rcx) addq $0x400, %rdi + addq $0x400, %rdx + addq $0x400, %rcx sub $0x01, %rsi - jne L_mldsa_use_hint_32_avx2_start_256 + jne L_mldsa_decompose_q32_avx512_start_256 vzeroupper - popq %r13 - popq %r12 repz retq #ifndef __APPLE__ -.size wc_mldsa_use_hint_32_avx2,.-wc_mldsa_use_hint_32_avx2 +.size wc_mldsa_decompose_q32_avx512,.-wc_mldsa_decompose_q32_avx512 #endif /* __APPLE__ */ #ifndef __APPLE__ .text -.globl wc_mldsa_vec_check_low_avx2 -.type wc_mldsa_vec_check_low_avx2,@function +.globl wc_mldsa_vec_check_low_avx512 +.type wc_mldsa_vec_check_low_avx512,@function .align 16 -wc_mldsa_vec_check_low_avx2: +wc_mldsa_vec_check_low_avx512: #else .section __TEXT,__text -.globl _wc_mldsa_vec_check_low_avx2 +.globl _wc_mldsa_vec_check_low_avx512 .p2align 4 -_wc_mldsa_vec_check_low_avx2: +_wc_mldsa_vec_check_low_avx512: #endif /* __APPLE__ */ subl $0x01, %edx movd %edx, %xmm2 negl %edx movd %edx, %xmm3 - vpbroadcastd %xmm2, %ymm2 - vpbroadcastd %xmm3, %ymm3 -L_mldsa_vec_check_low_vx2_start_256: - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 64(%rdi), %ymm0 - vmovdqu 96(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 128(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + vpbroadcastd %xmm2, %zmm2 + vpbroadcastd %xmm3, %zmm3 +L_mldsa_vec_check_low_avx512_start_256: + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 192(%rdi), %ymm0 - vmovdqu 224(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 320(%rdi), %ymm0 - vmovdqu 352(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 384(%rdi), %ymm0 - vmovdqu 416(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 448(%rdi), %ymm0 - vmovdqu 480(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 128(%rdi), %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 576(%rdi), %ymm0 - vmovdqu 608(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax - movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 640(%rdi), %ymm0 - vmovdqu 672(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 704(%rdi), %ymm0 - vmovdqu 736(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 384(%rdi), %zmm0 + vmovdqu64 448(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 832(%rdi), %ymm0 - vmovdqu 864(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 640(%rdi), %zmm0 + vmovdqu64 704(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 896(%rdi), %ymm0 - vmovdqu 928(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 768(%rdi), %zmm0 + vmovdqu64 832(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done - vmovdqu 960(%rdi), %ymm0 - vmovdqu 992(%rdi), %ymm1 - vpcmpgtd %ymm2, %ymm0, %ymm4 - vpcmpgtd %ymm2, %ymm1, %ymm5 - vpcmpgtd %ymm0, %ymm3, %ymm6 - vpcmpgtd %ymm1, %ymm3, %ymm7 - vpor %ymm5, %ymm4, %ymm4 - vpor %ymm7, %ymm6, %ymm6 - vpor %ymm6, %ymm4, %ymm4 - vpmovmskb %ymm4, %rax - cmp $0x00, %rax + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 896(%rdi), %zmm0 + vmovdqu64 960(%rdi), %zmm1 + vpcmpgtd %zmm2, %zmm0, %k1 + vpcmpgtd %zmm2, %zmm1, %k3 + vpcmpgtd %zmm0, %zmm3, %k2 + vpcmpgtd %zmm1, %zmm3, %k4 + korw %k3, %k1, %k1 + korw %k4, %k2, %k2 + korw %k2, %k1, %k1 + kortestw %k1, %k1 movq $0x00, %rax - jne L_mldsa_vec_check_low_vx2_done + jne L_mldsa_vec_check_low_avx512_done addq $0x400, %rdi sub $0x01, %rsi - jne L_mldsa_vec_check_low_vx2_start_256 + jne L_mldsa_vec_check_low_avx512_start_256 movq $0x01, %rax -L_mldsa_vec_check_low_vx2_done: +L_mldsa_vec_check_low_avx512_done: + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_vec_check_low_avx512,.-wc_mldsa_vec_check_low_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_add_avx512 +.type wc_mldsa_poly_add_avx512,@function +.align 16 +wc_mldsa_poly_add_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_add_avx512 +.p2align 4 +_wc_mldsa_poly_add_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 (%rsi), %zmm8 + vmovdqu64 64(%rsi), %zmm9 + vmovdqu64 128(%rsi), %zmm10 + vmovdqu64 192(%rsi), %zmm11 + vmovdqu64 256(%rsi), %zmm12 + vmovdqu64 320(%rsi), %zmm13 + vmovdqu64 384(%rsi), %zmm14 + vmovdqu64 448(%rsi), %zmm15 + vpaddd %zmm8, %zmm0, %zmm0 + vpaddd %zmm9, %zmm1, %zmm1 + vpaddd %zmm10, %zmm2, %zmm2 + vpaddd %zmm11, %zmm3, %zmm3 + vpaddd %zmm12, %zmm4, %zmm4 + vpaddd %zmm13, %zmm5, %zmm5 + vpaddd %zmm14, %zmm6, %zmm6 + vpaddd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vmovdqu64 512(%rsi), %zmm8 + vmovdqu64 576(%rsi), %zmm9 + vmovdqu64 640(%rsi), %zmm10 + vmovdqu64 704(%rsi), %zmm11 + vmovdqu64 768(%rsi), %zmm12 + vmovdqu64 832(%rsi), %zmm13 + vmovdqu64 896(%rsi), %zmm14 + vmovdqu64 960(%rsi), %zmm15 + vpaddd %zmm8, %zmm0, %zmm0 + vpaddd %zmm9, %zmm1, %zmm1 + vpaddd %zmm10, %zmm2, %zmm2 + vpaddd %zmm11, %zmm3, %zmm3 + vpaddd %zmm12, %zmm4, %zmm4 + vpaddd %zmm13, %zmm5, %zmm5 + vpaddd %zmm14, %zmm6, %zmm6 + vpaddd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, 512(%rdi) + vmovdqu64 %zmm1, 576(%rdi) + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 %zmm3, 704(%rdi) + vmovdqu64 %zmm4, 768(%rdi) + vmovdqu64 %zmm5, 832(%rdi) + vmovdqu64 %zmm6, 896(%rdi) + vmovdqu64 %zmm7, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_add_avx512,.-wc_mldsa_poly_add_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_sub_avx512 +.type wc_mldsa_poly_sub_avx512,@function +.align 16 +wc_mldsa_poly_sub_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_sub_avx512 +.p2align 4 +_wc_mldsa_poly_sub_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 (%rsi), %zmm8 + vmovdqu64 64(%rsi), %zmm9 + vmovdqu64 128(%rsi), %zmm10 + vmovdqu64 192(%rsi), %zmm11 + vmovdqu64 256(%rsi), %zmm12 + vmovdqu64 320(%rsi), %zmm13 + vmovdqu64 384(%rsi), %zmm14 + vmovdqu64 448(%rsi), %zmm15 + vpsubd %zmm8, %zmm0, %zmm0 + vpsubd %zmm9, %zmm1, %zmm1 + vpsubd %zmm10, %zmm2, %zmm2 + vpsubd %zmm11, %zmm3, %zmm3 + vpsubd %zmm12, %zmm4, %zmm4 + vpsubd %zmm13, %zmm5, %zmm5 + vpsubd %zmm14, %zmm6, %zmm6 + vpsubd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vmovdqu64 512(%rsi), %zmm8 + vmovdqu64 576(%rsi), %zmm9 + vmovdqu64 640(%rsi), %zmm10 + vmovdqu64 704(%rsi), %zmm11 + vmovdqu64 768(%rsi), %zmm12 + vmovdqu64 832(%rsi), %zmm13 + vmovdqu64 896(%rsi), %zmm14 + vmovdqu64 960(%rsi), %zmm15 + vpsubd %zmm8, %zmm0, %zmm0 + vpsubd %zmm9, %zmm1, %zmm1 + vpsubd %zmm10, %zmm2, %zmm2 + vpsubd %zmm11, %zmm3, %zmm3 + vpsubd %zmm12, %zmm4, %zmm4 + vpsubd %zmm13, %zmm5, %zmm5 + vpsubd %zmm14, %zmm6, %zmm6 + vpsubd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, 512(%rdi) + vmovdqu64 %zmm1, 576(%rdi) + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 %zmm3, 704(%rdi) + vmovdqu64 %zmm4, 768(%rdi) + vmovdqu64 %zmm5, 832(%rdi) + vmovdqu64 %zmm6, 896(%rdi) + vmovdqu64 %zmm7, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_sub_avx512,.-wc_mldsa_poly_sub_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl wc_mldsa_poly_make_pos_avx512 +.type wc_mldsa_poly_make_pos_avx512,@function +.align 16 +wc_mldsa_poly_make_pos_avx512: +#else +.section __TEXT,__text +.globl _wc_mldsa_poly_make_pos_avx512 +.p2align 4 +_wc_mldsa_poly_make_pos_avx512: +#endif /* __APPLE__ */ + movq $0x7fe001, %rdx + vmovd %edx, %xmm16 + vpbroadcastd %xmm16, %zmm16 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpsrad $31, %zmm0, %zmm8 + vpsrad $31, %zmm1, %zmm9 + vpsrad $31, %zmm2, %zmm10 + vpsrad $31, %zmm3, %zmm11 + vpsrad $31, %zmm4, %zmm12 + vpsrad $31, %zmm5, %zmm13 + vpsrad $31, %zmm6, %zmm14 + vpsrad $31, %zmm7, %zmm15 + vpandd %zmm16, %zmm8, %zmm8 + vpandd %zmm16, %zmm9, %zmm9 + vpandd %zmm16, %zmm10, %zmm10 + vpandd %zmm16, %zmm11, %zmm11 + vpandd %zmm16, %zmm12, %zmm12 + vpandd %zmm16, %zmm13, %zmm13 + vpandd %zmm16, %zmm14, %zmm14 + vpandd %zmm16, %zmm15, %zmm15 + vpaddd %zmm8, %zmm0, %zmm0 + vpaddd %zmm9, %zmm1, %zmm1 + vpaddd %zmm10, %zmm2, %zmm2 + vpaddd %zmm11, %zmm3, %zmm3 + vpaddd %zmm12, %zmm4, %zmm4 + vpaddd %zmm13, %zmm5, %zmm5 + vpaddd %zmm14, %zmm6, %zmm6 + vpaddd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpsrad $31, %zmm0, %zmm8 + vpsrad $31, %zmm1, %zmm9 + vpsrad $31, %zmm2, %zmm10 + vpsrad $31, %zmm3, %zmm11 + vpsrad $31, %zmm4, %zmm12 + vpsrad $31, %zmm5, %zmm13 + vpsrad $31, %zmm6, %zmm14 + vpsrad $31, %zmm7, %zmm15 + vpandd %zmm16, %zmm8, %zmm8 + vpandd %zmm16, %zmm9, %zmm9 + vpandd %zmm16, %zmm10, %zmm10 + vpandd %zmm16, %zmm11, %zmm11 + vpandd %zmm16, %zmm12, %zmm12 + vpandd %zmm16, %zmm13, %zmm13 + vpandd %zmm16, %zmm14, %zmm14 + vpandd %zmm16, %zmm15, %zmm15 + vpaddd %zmm8, %zmm0, %zmm0 + vpaddd %zmm9, %zmm1, %zmm1 + vpaddd %zmm10, %zmm2, %zmm2 + vpaddd %zmm11, %zmm3, %zmm3 + vpaddd %zmm12, %zmm4, %zmm4 + vpaddd %zmm13, %zmm5, %zmm5 + vpaddd %zmm14, %zmm6, %zmm6 + vpaddd %zmm15, %zmm7, %zmm7 + vmovdqu64 %zmm0, 512(%rdi) + vmovdqu64 %zmm1, 576(%rdi) + vmovdqu64 %zmm2, 640(%rdi) + vmovdqu64 %zmm3, 704(%rdi) + vmovdqu64 %zmm4, 768(%rdi) + vmovdqu64 %zmm5, 832(%rdi) + vmovdqu64 %zmm6, 896(%rdi) + vmovdqu64 %zmm7, 960(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size wc_mldsa_poly_make_pos_avx512,.-wc_mldsa_poly_make_pos_avx512 +#endif /* __APPLE__ */ +#endif /* HAVE_INTEL_AVX512 */ +#endif /* WOLFSSL_HAVE_MLDSA */ +#ifdef WOLFSSL_HAVE_MLDSA +#ifndef NO_AVX512_SUPPORT +#ifndef NO_AVX512_VBMI_SUPPORT +#ifndef HAVE_INTEL_AVX512_VBMI +#define HAVE_INTEL_AVX512_VBMI +#endif /* HAVE_INTEL_AVX512_VBMI */ +#endif /* NO_AVX512_VBMI_SUPPORT */ +#endif /* NO_AVX512_SUPPORT */ +#ifdef HAVE_INTEL_AVX512_VBMI +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_avx512_vbmi_vs: +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +.long 0x00000000,0x00000006,0x0000000c,0x00000012 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_avx512_vbmi_idx_a: +.byte 0x00,0x05,0x0a,0x10,0x15,0x1a,0x20,0x25 +.byte 0x2a,0x30,0x35,0x3a,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_w1_88_avx512_vbmi_idx_b: +.byte 0x04,0x09,0x0e,0x14,0x19,0x1e,0x24,0x29 +.byte 0x2e,0x34,0x39,0x3e,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +#ifndef __APPLE__ +.text +.globl wc_mldsa_encode_w1_88_avx512_vbmi +.type wc_mldsa_encode_w1_88_avx512_vbmi,@function +.align 16 +wc_mldsa_encode_w1_88_avx512_vbmi: +#else +.section __TEXT,__text +.globl _wc_mldsa_encode_w1_88_avx512_vbmi +.p2align 4 +_wc_mldsa_encode_w1_88_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_encode_w1_88_avx512_vbmi_vs(%rip), %zmm4 + vmovdqu64 L_mldsa_encode_w1_88_avx512_vbmi_idx_a(%rip), %zmm2 + vmovdqu64 L_mldsa_encode_w1_88_avx512_vbmi_idx_b(%rip), %zmm3 + movl $7, %edx + kmovw %edx, %k1 + vmovdqu64 (%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, (%rsi){%k1} + vmovdqu64 64(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 12(%rsi){%k1} + vmovdqu64 128(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 24(%rsi){%k1} + vmovdqu64 192(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 36(%rsi){%k1} + vmovdqu64 256(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 48(%rsi){%k1} + vmovdqu64 320(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 60(%rsi){%k1} + vmovdqu64 384(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 72(%rsi){%k1} + vmovdqu64 448(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 84(%rsi){%k1} + vmovdqu64 512(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 96(%rsi){%k1} + vmovdqu64 576(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 108(%rsi){%k1} + vmovdqu64 640(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 120(%rsi){%k1} + vmovdqu64 704(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 132(%rsi){%k1} + vmovdqu64 768(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 144(%rsi){%k1} + vmovdqu64 832(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 156(%rsi){%k1} + vmovdqu64 896(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 168(%rsi){%k1} + vmovdqu64 960(%rdi), %zmm0 + vpsllvd %zmm4, %zmm0, %zmm0 + vpermb %zmm0, %zmm3, %zmm1 + vpermb %zmm0, %zmm2, %zmm0 + vpord %zmm1, %zmm0, %zmm0 + vmovdqu32 %zmm0, 180(%rsi){%k1} vzeroupper repz retq #ifndef __APPLE__ -.size wc_mldsa_vec_check_low_avx2,.-wc_mldsa_vec_check_low_avx2 +.size wc_mldsa_encode_w1_88_avx512_vbmi,.-wc_mldsa_encode_w1_88_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_half_m1: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data #endif /* __APPLE__ */ #ifndef __APPLE__ -.text -.globl wc_mldsa_poly_add_avx2 -.type wc_mldsa_poly_add_avx2,@function .align 16 -wc_mldsa_poly_add_avx2: #else -.section __TEXT,__text -.globl _wc_mldsa_poly_add_avx2 .p2align 4 -_wc_mldsa_poly_add_avx2: #endif /* __APPLE__ */ - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vmovdqu 64(%rdi), %ymm2 - vmovdqu 96(%rdi), %ymm3 - vmovdqu 128(%rdi), %ymm4 - vmovdqu 160(%rdi), %ymm5 - vmovdqu 192(%rdi), %ymm6 - vmovdqu 224(%rdi), %ymm7 - vmovdqu (%rsi), %ymm8 - vmovdqu 32(%rsi), %ymm9 - vmovdqu 64(%rsi), %ymm10 - vmovdqu 96(%rsi), %ymm11 - vmovdqu 128(%rsi), %ymm12 - vmovdqu 160(%rsi), %ymm13 - vmovdqu 192(%rsi), %ymm14 - vmovdqu 224(%rsi), %ymm15 - vpaddd %ymm8, %ymm0, %ymm0 - vpaddd %ymm9, %ymm1, %ymm1 - vpaddd %ymm10, %ymm2, %ymm2 - vpaddd %ymm11, %ymm3, %ymm3 - vpaddd %ymm12, %ymm4, %ymm4 - vpaddd %ymm13, %ymm5, %ymm5 - vpaddd %ymm14, %ymm6, %ymm6 - vpaddd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 32(%rdi) - vmovdqu %ymm2, 64(%rdi) - vmovdqu %ymm3, 96(%rdi) - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu %ymm6, 192(%rdi) - vmovdqu %ymm7, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vmovdqu 384(%rdi), %ymm4 - vmovdqu 416(%rdi), %ymm5 - vmovdqu 448(%rdi), %ymm6 - vmovdqu 480(%rdi), %ymm7 - vmovdqu 256(%rsi), %ymm8 - vmovdqu 288(%rsi), %ymm9 - vmovdqu 320(%rsi), %ymm10 - vmovdqu 352(%rsi), %ymm11 - vmovdqu 384(%rsi), %ymm12 - vmovdqu 416(%rsi), %ymm13 - vmovdqu 448(%rsi), %ymm14 - vmovdqu 480(%rsi), %ymm15 - vpaddd %ymm8, %ymm0, %ymm0 - vpaddd %ymm9, %ymm1, %ymm1 - vpaddd %ymm10, %ymm2, %ymm2 - vpaddd %ymm11, %ymm3, %ymm3 - vpaddd %ymm12, %ymm4, %ymm4 - vpaddd %ymm13, %ymm5, %ymm5 - vpaddd %ymm14, %ymm6, %ymm6 - vpaddd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 256(%rdi) - vmovdqu %ymm1, 288(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 352(%rdi) - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu %ymm6, 448(%rdi) - vmovdqu %ymm7, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vmovdqu 640(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 704(%rdi), %ymm6 - vmovdqu 736(%rdi), %ymm7 - vmovdqu 512(%rsi), %ymm8 - vmovdqu 544(%rsi), %ymm9 - vmovdqu 576(%rsi), %ymm10 - vmovdqu 608(%rsi), %ymm11 - vmovdqu 640(%rsi), %ymm12 - vmovdqu 672(%rsi), %ymm13 - vmovdqu 704(%rsi), %ymm14 - vmovdqu 736(%rsi), %ymm15 - vpaddd %ymm8, %ymm0, %ymm0 - vpaddd %ymm9, %ymm1, %ymm1 - vpaddd %ymm10, %ymm2, %ymm2 - vpaddd %ymm11, %ymm3, %ymm3 - vpaddd %ymm12, %ymm4, %ymm4 - vpaddd %ymm13, %ymm5, %ymm5 - vpaddd %ymm14, %ymm6, %ymm6 - vpaddd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 512(%rdi) - vmovdqu %ymm1, 544(%rdi) - vmovdqu %ymm2, 576(%rdi) - vmovdqu %ymm3, 608(%rdi) - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 704(%rdi) - vmovdqu %ymm7, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vmovdqu 896(%rdi), %ymm4 - vmovdqu 928(%rdi), %ymm5 - vmovdqu 960(%rdi), %ymm6 - vmovdqu 992(%rdi), %ymm7 - vmovdqu 768(%rsi), %ymm8 - vmovdqu 800(%rsi), %ymm9 - vmovdqu 832(%rsi), %ymm10 - vmovdqu 864(%rsi), %ymm11 - vmovdqu 896(%rsi), %ymm12 - vmovdqu 928(%rsi), %ymm13 - vmovdqu 960(%rsi), %ymm14 - vmovdqu 992(%rsi), %ymm15 - vpaddd %ymm8, %ymm0, %ymm0 - vpaddd %ymm9, %ymm1, %ymm1 - vpaddd %ymm10, %ymm2, %ymm2 - vpaddd %ymm11, %ymm3, %ymm3 - vpaddd %ymm12, %ymm4, %ymm4 - vpaddd %ymm13, %ymm5, %ymm5 - vpaddd %ymm14, %ymm6, %ymm6 - vpaddd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 768(%rdi) - vmovdqu %ymm1, 800(%rdi) - vmovdqu %ymm2, 832(%rdi) - vmovdqu %ymm3, 864(%rdi) - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu %ymm6, 960(%rdi) - vmovdqu %ymm7, 992(%rdi) - repz retq +L_mldsa_encode_t0_t1_avx512_vbmi_half: +.long 0x00001000,0x00001000,0x00001000,0x00001000 +.long 0x00001000,0x00001000,0x00001000,0x00001000 +.long 0x00001000,0x00001000,0x00001000,0x00001000 +.long 0x00001000,0x00001000,0x00001000,0x00001000 #ifndef __APPLE__ -.size wc_mldsa_poly_add_avx2,.-wc_mldsa_poly_add_avx2 +.data +#else +.section __DATA,__data #endif /* __APPLE__ */ #ifndef __APPLE__ -.text -.globl wc_mldsa_poly_sub_avx2 -.type wc_mldsa_poly_sub_avx2,@function .align 16 -wc_mldsa_poly_sub_avx2: #else -.section __TEXT,__text -.globl _wc_mldsa_poly_sub_avx2 .p2align 4 -_wc_mldsa_poly_sub_avx2: #endif /* __APPLE__ */ - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vmovdqu 64(%rdi), %ymm2 - vmovdqu 96(%rdi), %ymm3 - vmovdqu 128(%rdi), %ymm4 - vmovdqu 160(%rdi), %ymm5 - vmovdqu 192(%rdi), %ymm6 - vmovdqu 224(%rdi), %ymm7 - vmovdqu (%rsi), %ymm8 - vmovdqu 32(%rsi), %ymm9 - vmovdqu 64(%rsi), %ymm10 - vmovdqu 96(%rsi), %ymm11 - vmovdqu 128(%rsi), %ymm12 - vmovdqu 160(%rsi), %ymm13 - vmovdqu 192(%rsi), %ymm14 - vmovdqu 224(%rsi), %ymm15 - vpsubd %ymm8, %ymm0, %ymm0 - vpsubd %ymm9, %ymm1, %ymm1 - vpsubd %ymm10, %ymm2, %ymm2 - vpsubd %ymm11, %ymm3, %ymm3 - vpsubd %ymm12, %ymm4, %ymm4 - vpsubd %ymm13, %ymm5, %ymm5 - vpsubd %ymm14, %ymm6, %ymm6 - vpsubd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 32(%rdi) - vmovdqu %ymm2, 64(%rdi) - vmovdqu %ymm3, 96(%rdi) - vmovdqu %ymm4, 128(%rdi) - vmovdqu %ymm5, 160(%rdi) - vmovdqu %ymm6, 192(%rdi) - vmovdqu %ymm7, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vmovdqu 384(%rdi), %ymm4 - vmovdqu 416(%rdi), %ymm5 - vmovdqu 448(%rdi), %ymm6 - vmovdqu 480(%rdi), %ymm7 - vmovdqu 256(%rsi), %ymm8 - vmovdqu 288(%rsi), %ymm9 - vmovdqu 320(%rsi), %ymm10 - vmovdqu 352(%rsi), %ymm11 - vmovdqu 384(%rsi), %ymm12 - vmovdqu 416(%rsi), %ymm13 - vmovdqu 448(%rsi), %ymm14 - vmovdqu 480(%rsi), %ymm15 - vpsubd %ymm8, %ymm0, %ymm0 - vpsubd %ymm9, %ymm1, %ymm1 - vpsubd %ymm10, %ymm2, %ymm2 - vpsubd %ymm11, %ymm3, %ymm3 - vpsubd %ymm12, %ymm4, %ymm4 - vpsubd %ymm13, %ymm5, %ymm5 - vpsubd %ymm14, %ymm6, %ymm6 - vpsubd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 256(%rdi) - vmovdqu %ymm1, 288(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 352(%rdi) - vmovdqu %ymm4, 384(%rdi) - vmovdqu %ymm5, 416(%rdi) - vmovdqu %ymm6, 448(%rdi) - vmovdqu %ymm7, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vmovdqu 640(%rdi), %ymm4 - vmovdqu 672(%rdi), %ymm5 - vmovdqu 704(%rdi), %ymm6 - vmovdqu 736(%rdi), %ymm7 - vmovdqu 512(%rsi), %ymm8 - vmovdqu 544(%rsi), %ymm9 - vmovdqu 576(%rsi), %ymm10 - vmovdqu 608(%rsi), %ymm11 - vmovdqu 640(%rsi), %ymm12 - vmovdqu 672(%rsi), %ymm13 - vmovdqu 704(%rsi), %ymm14 - vmovdqu 736(%rsi), %ymm15 - vpsubd %ymm8, %ymm0, %ymm0 - vpsubd %ymm9, %ymm1, %ymm1 - vpsubd %ymm10, %ymm2, %ymm2 - vpsubd %ymm11, %ymm3, %ymm3 - vpsubd %ymm12, %ymm4, %ymm4 - vpsubd %ymm13, %ymm5, %ymm5 - vpsubd %ymm14, %ymm6, %ymm6 - vpsubd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 512(%rdi) - vmovdqu %ymm1, 544(%rdi) - vmovdqu %ymm2, 576(%rdi) - vmovdqu %ymm3, 608(%rdi) - vmovdqu %ymm4, 640(%rdi) - vmovdqu %ymm5, 672(%rdi) - vmovdqu %ymm6, 704(%rdi) - vmovdqu %ymm7, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vmovdqu 896(%rdi), %ymm4 - vmovdqu 928(%rdi), %ymm5 - vmovdqu 960(%rdi), %ymm6 - vmovdqu 992(%rdi), %ymm7 - vmovdqu 768(%rsi), %ymm8 - vmovdqu 800(%rsi), %ymm9 - vmovdqu 832(%rsi), %ymm10 - vmovdqu 864(%rsi), %ymm11 - vmovdqu 896(%rsi), %ymm12 - vmovdqu 928(%rsi), %ymm13 - vmovdqu 960(%rsi), %ymm14 - vmovdqu 992(%rsi), %ymm15 - vpsubd %ymm8, %ymm0, %ymm0 - vpsubd %ymm9, %ymm1, %ymm1 - vpsubd %ymm10, %ymm2, %ymm2 - vpsubd %ymm11, %ymm3, %ymm3 - vpsubd %ymm12, %ymm4, %ymm4 - vpsubd %ymm13, %ymm5, %ymm5 - vpsubd %ymm14, %ymm6, %ymm6 - vpsubd %ymm15, %ymm7, %ymm7 - vmovdqu %ymm0, 768(%rdi) - vmovdqu %ymm1, 800(%rdi) - vmovdqu %ymm2, 832(%rdi) - vmovdqu %ymm3, 864(%rdi) - vmovdqu %ymm4, 896(%rdi) - vmovdqu %ymm5, 928(%rdi) - vmovdqu %ymm6, 960(%rdi) - vmovdqu %ymm7, 992(%rdi) - repz retq +L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0: +.byte 0x00,0x01,0x05,0x06,0x09,0x0d,0x0e,0x11 +.byte 0x12,0x15,0x19,0x1a,0x1d,0x20,0x21,0x25 +.byte 0x26,0x29,0x2d,0x2e,0x31,0x32,0x35,0x39 +.byte 0x3a,0x3d,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 #ifndef __APPLE__ -.size wc_mldsa_poly_sub_avx2,.-wc_mldsa_poly_sub_avx2 +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1: +.byte 0x03,0x04,0x03,0x08,0x0c,0x03,0x10,0x03 +.byte 0x14,0x18,0x03,0x1c,0x03,0x03,0x24,0x03 +.byte 0x28,0x2c,0x03,0x30,0x03,0x34,0x38,0x03 +.byte 0x3c,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs: +.long 0x00000000,0x00000005,0x00000002,0x00000007 +.long 0x00000004,0x00000001,0x00000006,0x00000003 +.long 0x00000000,0x00000005,0x00000002,0x00000007 +.long 0x00000004,0x00000001,0x00000006,0x00000003 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0: +.byte 0x00,0x01,0x05,0x09,0x0d,0x10,0x11,0x15 +.byte 0x19,0x1d,0x20,0x21,0x25,0x29,0x2d,0x30 +.byte 0x31,0x35,0x39,0x3d,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1: +.byte 0x03,0x04,0x08,0x0c,0x03,0x03,0x14,0x18 +.byte 0x1c,0x03,0x03,0x24,0x28,0x2c,0x03,0x03 +.byte 0x34,0x38,0x3c,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +.byte 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 #endif /* __APPLE__ */ +L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs: +.long 0x00000000,0x00000002,0x00000004,0x00000006 +.long 0x00000000,0x00000002,0x00000004,0x00000006 +.long 0x00000000,0x00000002,0x00000004,0x00000006 +.long 0x00000000,0x00000002,0x00000004,0x00000006 #ifndef __APPLE__ .text -.globl wc_mldsa_poly_make_pos_avx2 -.type wc_mldsa_poly_make_pos_avx2,@function +.globl wc_mldsa_encode_t0_t1_avx512_vbmi +.type wc_mldsa_encode_t0_t1_avx512_vbmi,@function .align 16 -wc_mldsa_poly_make_pos_avx2: +wc_mldsa_encode_t0_t1_avx512_vbmi: #else .section __TEXT,__text -.globl _wc_mldsa_poly_make_pos_avx2 +.globl _wc_mldsa_encode_t0_t1_avx512_vbmi .p2align 4 -_wc_mldsa_poly_make_pos_avx2: -#endif /* __APPLE__ */ - vpxor %ymm8, %ymm8, %ymm8 - vmovdqu mldsa_q(%rip), %ymm9 - vmovdqu (%rdi), %ymm0 - vmovdqu 32(%rdi), %ymm1 - vmovdqu 64(%rdi), %ymm2 - vmovdqu 96(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 32(%rdi) - vmovdqu %ymm2, 64(%rdi) - vmovdqu %ymm3, 96(%rdi) - vmovdqu 128(%rdi), %ymm0 - vmovdqu 160(%rdi), %ymm1 - vmovdqu 192(%rdi), %ymm2 - vmovdqu 224(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 128(%rdi) - vmovdqu %ymm1, 160(%rdi) - vmovdqu %ymm2, 192(%rdi) - vmovdqu %ymm3, 224(%rdi) - vmovdqu 256(%rdi), %ymm0 - vmovdqu 288(%rdi), %ymm1 - vmovdqu 320(%rdi), %ymm2 - vmovdqu 352(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 256(%rdi) - vmovdqu %ymm1, 288(%rdi) - vmovdqu %ymm2, 320(%rdi) - vmovdqu %ymm3, 352(%rdi) - vmovdqu 384(%rdi), %ymm0 - vmovdqu 416(%rdi), %ymm1 - vmovdqu 448(%rdi), %ymm2 - vmovdqu 480(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 384(%rdi) - vmovdqu %ymm1, 416(%rdi) - vmovdqu %ymm2, 448(%rdi) - vmovdqu %ymm3, 480(%rdi) - vmovdqu 512(%rdi), %ymm0 - vmovdqu 544(%rdi), %ymm1 - vmovdqu 576(%rdi), %ymm2 - vmovdqu 608(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 512(%rdi) - vmovdqu %ymm1, 544(%rdi) - vmovdqu %ymm2, 576(%rdi) - vmovdqu %ymm3, 608(%rdi) - vmovdqu 640(%rdi), %ymm0 - vmovdqu 672(%rdi), %ymm1 - vmovdqu 704(%rdi), %ymm2 - vmovdqu 736(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 640(%rdi) - vmovdqu %ymm1, 672(%rdi) - vmovdqu %ymm2, 704(%rdi) - vmovdqu %ymm3, 736(%rdi) - vmovdqu 768(%rdi), %ymm0 - vmovdqu 800(%rdi), %ymm1 - vmovdqu 832(%rdi), %ymm2 - vmovdqu 864(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 768(%rdi) - vmovdqu %ymm1, 800(%rdi) - vmovdqu %ymm2, 832(%rdi) - vmovdqu %ymm3, 864(%rdi) - vmovdqu 896(%rdi), %ymm0 - vmovdqu 928(%rdi), %ymm1 - vmovdqu 960(%rdi), %ymm2 - vmovdqu 992(%rdi), %ymm3 - vpcmpgtd %ymm0, %ymm8, %ymm4 - vpcmpgtd %ymm1, %ymm8, %ymm5 - vpcmpgtd %ymm2, %ymm8, %ymm6 - vpcmpgtd %ymm3, %ymm8, %ymm7 - vpand %ymm9, %ymm4, %ymm4 - vpand %ymm9, %ymm5, %ymm5 - vpand %ymm9, %ymm6, %ymm6 - vpand %ymm9, %ymm7, %ymm7 - vpaddd %ymm4, %ymm0, %ymm0 - vpaddd %ymm5, %ymm1, %ymm1 - vpaddd %ymm6, %ymm2, %ymm2 - vpaddd %ymm7, %ymm3, %ymm3 - vmovdqu %ymm0, 896(%rdi) - vmovdqu %ymm1, 928(%rdi) - vmovdqu %ymm2, 960(%rdi) - vmovdqu %ymm3, 992(%rdi) +_wc_mldsa_encode_t0_t1_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_half_m1(%rip), %zmm4 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_half(%rip), %zmm5 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs(%rip), %zmm6 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs(%rip), %zmm7 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0(%rip), %zmm8 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1(%rip), %zmm9 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0(%rip), %zmm10 + vmovdqu64 L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1(%rip), %zmm11 + movl $0x3ffffff, %eax + kmovd %eax, %k1 + movl $0xfffff, %eax + kmovd %eax, %k2 + vmovdqu64 (%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, (%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, (%rdx){%k2} + vmovdqu64 64(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 26(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 20(%rdx){%k2} + vmovdqu64 128(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 52(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 40(%rdx){%k2} + vmovdqu64 192(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 78(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 60(%rdx){%k2} + vmovdqu64 256(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 104(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 80(%rdx){%k2} + vmovdqu64 320(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 130(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 100(%rdx){%k2} + vmovdqu64 384(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 156(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 120(%rdx){%k2} + vmovdqu64 448(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 182(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 140(%rdx){%k2} + vmovdqu64 512(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 208(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 160(%rdx){%k2} + vmovdqu64 576(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 234(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 180(%rdx){%k2} + vmovdqu64 640(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 260(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 200(%rdx){%k2} + vmovdqu64 704(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 286(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 220(%rdx){%k2} + vmovdqu64 768(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 312(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 240(%rdx){%k2} + vmovdqu64 832(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 338(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 260(%rdx){%k2} + vmovdqu64 896(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 364(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 280(%rdx){%k2} + vmovdqu64 960(%rdi), %zmm0 + vpaddd %zmm4, %zmm0, %zmm2 + vpsrld $13, %zmm2, %zmm2 + vpslld $13, %zmm2, %zmm1 + vpsubd %zmm1, %zmm0, %zmm1 + vpsubd %zmm1, %zmm5, %zmm1 + vpsllvd %zmm6, %zmm1, %zmm1 + vpermb %zmm1, %zmm8, %zmm0 + vpermb %zmm1, %zmm9, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 390(%rsi){%k1} + vpsllvd %zmm7, %zmm2, %zmm2 + vpermb %zmm2, %zmm10, %zmm0 + vpermb %zmm2, %zmm11, %zmm3 + vpord %zmm3, %zmm0, %zmm0 + vmovdqu8 %zmm0, 300(%rdx){%k2} + vzeroupper repz retq #ifndef __APPLE__ -.size wc_mldsa_poly_make_pos_avx2,.-wc_mldsa_poly_make_pos_avx2 +.size wc_mldsa_encode_t0_t1_avx512_vbmi,.-wc_mldsa_encode_t0_t1_avx512_vbmi #endif /* __APPLE__ */ -#endif /* HAVE_INTEL_AVX2 */ +#endif /* HAVE_INTEL_AVX512_VBMI */ #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(__linux__) && defined(__ELF__) diff --git a/wolfcrypt/src/wc_mldsa_asm.asm b/wolfcrypt/src/wc_mldsa_asm.asm index 36c59749c2..ba23c544de 100644 --- a/wolfcrypt/src/wc_mldsa_asm.asm +++ b/wolfcrypt/src/wc_mldsa_asm.asm @@ -383,6 +383,18 @@ ptr_L_mldsa_avx2_zetas QWORD L_mldsa_avx2_zetas _DATA ENDS _DATA SEGMENT ALIGN 16 +L_mldsa_avx2_zeta1 DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h + DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h +ptr_L_mldsa_avx2_zeta1 QWORD L_mldsa_avx2_zeta1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx2_half DWORD 00400000h, 00400000h, 00400000h, 00400000h + DWORD 00400000h, 00400000h, 00400000h, 00400000h +ptr_L_mldsa_avx2_half QWORD L_mldsa_avx2_half +_DATA ENDS +_DATA SEGMENT +ALIGN 16 L_mldsa_avx2_zetas_basemul DWORD 0ffc406e5h, 0ffe9d65dh, 003cf91bh, 001729a3h DWORD 0ffe8ac81h, 003509eeh, 0018537fh, 0ffcbf612h DWORD 0ffc7e1cfh, 002135c7h, 00391e31h, 0ffdfca39h @@ -3174,7 +3186,7 @@ wc_mldsa_ntt_avx2 PROC wc_mldsa_ntt_avx2 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_ntt_full_avx2 PROC +wc_mldsa_ntt_small_avx2 PROC sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 @@ -3193,8 +3205,8 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu ymm11, YMMWORD PTR [rdx+64] vmovdqu ymm13, YMMWORD PTR [rdx+96] ; 128: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half vmovdqu ymm0, YMMWORD PTR [rcx+96] vmovdqu ymm1, YMMWORD PTR [rcx+224] vmovdqu ymm2, YMMWORD PTR [rcx+352] @@ -3203,56 +3215,32 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu ymm5, YMMWORD PTR [rcx+736] vmovdqu ymm6, YMMWORD PTR [rcx+864] vmovdqu ymm7, YMMWORD PTR [rcx+992] - vpmulld ymm8, ymm4, ymm12 - vmovshdup ymm9, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm4, ymm0, ymm8 vpaddd ymm0, ymm0, ymm8 - vpmulld ymm8, ymm5, ymm12 - vmovshdup ymm9, ymm5 - vpmuldq ymm5, ymm5, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm5, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm5, ymm1, ymm8 vpaddd ymm1, ymm1, ymm8 - vpmulld ymm8, ymm6, ymm12 - vmovshdup ymm9, ymm6 - vpmuldq ymm6, ymm6, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm6, ymm2, ymm8 vpaddd ymm2, ymm2, ymm8 - vpmulld ymm8, ymm7, ymm12 - vmovshdup ymm9, ymm7 - vpmuldq ymm7, ymm7, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm7, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm7, ymm3, ymm8 vpaddd ymm3, ymm3, ymm8 ; 64: 4/4 @@ -3319,8 +3307,8 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu YMMWORD PTR [rcx+864], ymm6 vmovdqu YMMWORD PTR [rcx+992], ymm7 ; 128: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half vmovdqu ymm0, YMMWORD PTR [rcx+64] vmovdqu ymm1, YMMWORD PTR [rcx+192] vmovdqu ymm2, YMMWORD PTR [rcx+320] @@ -3329,56 +3317,32 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu ymm5, YMMWORD PTR [rcx+704] vmovdqu ymm6, YMMWORD PTR [rcx+832] vmovdqu ymm7, YMMWORD PTR [rcx+960] - vpmulld ymm8, ymm4, ymm12 - vmovshdup ymm9, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm4, ymm0, ymm8 vpaddd ymm0, ymm0, ymm8 - vpmulld ymm8, ymm5, ymm12 - vmovshdup ymm9, ymm5 - vpmuldq ymm5, ymm5, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm5, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm5, ymm1, ymm8 vpaddd ymm1, ymm1, ymm8 - vpmulld ymm8, ymm6, ymm12 - vmovshdup ymm9, ymm6 - vpmuldq ymm6, ymm6, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm6, ymm2, ymm8 vpaddd ymm2, ymm2, ymm8 - vpmulld ymm8, ymm7, ymm12 - vmovshdup ymm9, ymm7 - vpmuldq ymm7, ymm7, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm7, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm7, ymm3, ymm8 vpaddd ymm3, ymm3, ymm8 ; 64: 3/4 @@ -3445,8 +3409,8 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu YMMWORD PTR [rcx+832], ymm6 vmovdqu YMMWORD PTR [rcx+960], ymm7 ; 128: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half vmovdqu ymm0, YMMWORD PTR [rcx+32] vmovdqu ymm1, YMMWORD PTR [rcx+160] vmovdqu ymm2, YMMWORD PTR [rcx+288] @@ -3455,56 +3419,32 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu ymm5, YMMWORD PTR [rcx+672] vmovdqu ymm6, YMMWORD PTR [rcx+800] vmovdqu ymm7, YMMWORD PTR [rcx+928] - vpmulld ymm8, ymm4, ymm12 - vmovshdup ymm9, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm4, ymm0, ymm8 vpaddd ymm0, ymm0, ymm8 - vpmulld ymm8, ymm5, ymm12 - vmovshdup ymm9, ymm5 - vpmuldq ymm5, ymm5, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm5, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm5, ymm1, ymm8 vpaddd ymm1, ymm1, ymm8 - vpmulld ymm8, ymm6, ymm12 - vmovshdup ymm9, ymm6 - vpmuldq ymm6, ymm6, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm6, ymm2, ymm8 vpaddd ymm2, ymm2, ymm8 - vpmulld ymm8, ymm7, ymm12 - vmovshdup ymm9, ymm7 - vpmuldq ymm7, ymm7, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm7, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm7, ymm3, ymm8 vpaddd ymm3, ymm3, ymm8 ; 64: 2/4 @@ -3571,8 +3511,8 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu YMMWORD PTR [rcx+800], ymm6 vmovdqu YMMWORD PTR [rcx+928], ymm7 ; 128: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+128] vmovdqu ymm2, YMMWORD PTR [rcx+256] @@ -3581,56 +3521,32 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu ymm5, YMMWORD PTR [rcx+640] vmovdqu ymm6, YMMWORD PTR [rcx+768] vmovdqu ymm7, YMMWORD PTR [rcx+896] - vpmulld ymm8, ymm4, ymm12 - vmovshdup ymm9, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm4, ymm0, ymm8 vpaddd ymm0, ymm0, ymm8 - vpmulld ymm8, ymm5, ymm12 - vmovshdup ymm9, ymm5 - vpmuldq ymm5, ymm5, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm5, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm5, ymm1, ymm8 vpaddd ymm1, ymm1, ymm8 - vpmulld ymm8, ymm6, ymm12 - vmovshdup ymm9, ymm6 - vpmuldq ymm6, ymm6, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm6, ymm2, ymm8 vpaddd ymm2, ymm2, ymm8 - vpmulld ymm8, ymm7, ymm12 - vmovshdup ymm9, ymm7 - vpmuldq ymm7, ymm7, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm7, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm8, ymm8 - vpblendd ymm8, ymm8, ymm15, 170 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 vpsubd ymm7, ymm3, ymm8 vpaddd ymm3, ymm3, ymm8 ; 64: 1/4 @@ -4096,22 +4012,6 @@ wc_mldsa_ntt_full_avx2 PROC vpblendd ymm8, ymm8, ymm15, 170 vpsubd ymm7, ymm6, ymm8 vpaddd ymm6, ymm6, ymm8 - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vperm2i128 ymm0, ymm8, ymm9, 32 - vperm2i128 ymm1, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vperm2i128 ymm2, ymm8, ymm9, 32 - vperm2i128 ymm3, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vperm2i128 ymm4, ymm8, ymm9, 32 - vperm2i128 ymm5, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vperm2i128 ymm6, ymm8, ymm9, 32 - vperm2i128 ymm7, ymm8, ymm9, 49 vmovdqu YMMWORD PTR [rcx], ymm0 vmovdqu YMMWORD PTR [rcx+32], ymm1 vmovdqu YMMWORD PTR [rcx+64], ymm2 @@ -4523,22 +4423,6 @@ wc_mldsa_ntt_full_avx2 PROC vpblendd ymm8, ymm8, ymm15, 170 vpsubd ymm7, ymm6, ymm8 vpaddd ymm6, ymm6, ymm8 - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vperm2i128 ymm0, ymm8, ymm9, 32 - vperm2i128 ymm1, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vperm2i128 ymm2, ymm8, ymm9, 32 - vperm2i128 ymm3, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vperm2i128 ymm4, ymm8, ymm9, 32 - vperm2i128 ymm5, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vperm2i128 ymm6, ymm8, ymm9, 32 - vperm2i128 ymm7, ymm8, ymm9, 49 vmovdqu YMMWORD PTR [rcx+256], ymm0 vmovdqu YMMWORD PTR [rcx+288], ymm1 vmovdqu YMMWORD PTR [rcx+320], ymm2 @@ -4950,22 +4834,6 @@ wc_mldsa_ntt_full_avx2 PROC vpblendd ymm8, ymm8, ymm15, 170 vpsubd ymm7, ymm6, ymm8 vpaddd ymm6, ymm6, ymm8 - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vperm2i128 ymm0, ymm8, ymm9, 32 - vperm2i128 ymm1, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vperm2i128 ymm2, ymm8, ymm9, 32 - vperm2i128 ymm3, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vperm2i128 ymm4, ymm8, ymm9, 32 - vperm2i128 ymm5, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vperm2i128 ymm6, ymm8, ymm9, 32 - vperm2i128 ymm7, ymm8, ymm9, 49 vmovdqu YMMWORD PTR [rcx+512], ymm0 vmovdqu YMMWORD PTR [rcx+544], ymm1 vmovdqu YMMWORD PTR [rcx+576], ymm2 @@ -5377,22 +5245,6 @@ wc_mldsa_ntt_full_avx2 PROC vpblendd ymm8, ymm8, ymm15, 170 vpsubd ymm7, ymm6, ymm8 vpaddd ymm6, ymm6, ymm8 - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vperm2i128 ymm0, ymm8, ymm9, 32 - vperm2i128 ymm1, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vperm2i128 ymm2, ymm8, ymm9, 32 - vperm2i128 ymm3, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vperm2i128 ymm4, ymm8, ymm9, 32 - vperm2i128 ymm5, ymm8, ymm9, 49 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vperm2i128 ymm6, ymm8, ymm9, 32 - vperm2i128 ymm7, ymm8, ymm9, 49 vmovdqu YMMWORD PTR [rcx+768], ymm0 vmovdqu YMMWORD PTR [rcx+800], ymm1 vmovdqu YMMWORD PTR [rcx+832], ymm2 @@ -5414,10 +5266,10 @@ wc_mldsa_ntt_full_avx2 PROC vmovdqu xmm15, OWORD PTR [rsp+152] add rsp, 168 ret -wc_mldsa_ntt_full_avx2 ENDP +wc_mldsa_ntt_small_avx2 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_invntt_avx2 PROC +wc_mldsa_ntt_full_avx2 PROC sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 @@ -5431,2529 +5283,2219 @@ wc_mldsa_invntt_avx2 PROC vmovdqu OWORD PTR [rsp+152], xmm15 vpxor ymm14, ymm14, ymm14 vmovdqu ymm14, YMMWORD PTR mldsa_q - ; invntt - mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas_inv] - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vmovdqu ymm2, YMMWORD PTR [rcx+64] - vmovdqu ymm3, YMMWORD PTR [rcx+96] - vmovdqu ymm4, YMMWORD PTR [rcx+128] - vmovdqu ymm5, YMMWORD PTR [rcx+160] - vmovdqu ymm6, YMMWORD PTR [rcx+192] - vmovdqu ymm7, YMMWORD PTR [rcx+224] - ; 1: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas] vmovdqu ymm11, YMMWORD PTR [rdx+64] vmovdqu ymm13, YMMWORD PTR [rdx+96] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + ; 128: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm0, YMMWORD PTR [rcx+96] + vmovdqu ymm1, YMMWORD PTR [rcx+224] + vmovdqu ymm2, YMMWORD PTR [rcx+352] + vmovdqu ymm3, YMMWORD PTR [rcx+480] + vmovdqu ymm4, YMMWORD PTR [rcx+608] + vmovdqu ymm5, YMMWORD PTR [rcx+736] + vmovdqu ymm6, YMMWORD PTR [rcx+864] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+128] - vmovdqu ymm12, YMMWORD PTR [rdx+160] - vmovdqu ymm11, YMMWORD PTR [rdx+192] - vmovdqu ymm13, YMMWORD PTR [rdx+224] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+256] - vmovdqu ymm12, YMMWORD PTR [rdx+288] - vmovdqu ymm11, YMMWORD PTR [rdx+320] - vmovdqu ymm13, YMMWORD PTR [rdx+352] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 - vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 1/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+384] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+416] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+448] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+480] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+512] - vmovdqu ymm12, YMMWORD PTR [rdx+544] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 1: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+576] - vmovdqu ymm12, YMMWORD PTR [rdx+608] - vmovdqu ymm11, YMMWORD PTR [rdx+640] - vmovdqu ymm13, YMMWORD PTR [rdx+672] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+96], ymm0 + vmovdqu YMMWORD PTR [rcx+224], ymm1 + vmovdqu YMMWORD PTR [rcx+352], ymm2 + vmovdqu YMMWORD PTR [rcx+480], ymm3 + vmovdqu YMMWORD PTR [rcx+608], ymm4 + vmovdqu YMMWORD PTR [rcx+736], ymm5 + vmovdqu YMMWORD PTR [rcx+864], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + ; 128: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm0, YMMWORD PTR [rcx+64] + vmovdqu ymm1, YMMWORD PTR [rcx+192] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+448] + vmovdqu ymm4, YMMWORD PTR [rcx+576] + vmovdqu ymm5, YMMWORD PTR [rcx+704] + vmovdqu ymm6, YMMWORD PTR [rcx+832] + vmovdqu ymm7, YMMWORD PTR [rcx+960] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+704] - vmovdqu ymm12, YMMWORD PTR [rdx+736] - vmovdqu ymm11, YMMWORD PTR [rdx+768] - vmovdqu ymm13, YMMWORD PTR [rdx+800] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+832] - vmovdqu ymm12, YMMWORD PTR [rdx+864] - vmovdqu ymm11, YMMWORD PTR [rdx+896] - vmovdqu ymm13, YMMWORD PTR [rdx+928] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 1/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+960] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+992] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+1024] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+1056] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1088] - vmovdqu ymm12, YMMWORD PTR [rdx+1120] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1152] - vmovdqu ymm12, YMMWORD PTR [rdx+1184] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+64], ymm0 + vmovdqu YMMWORD PTR [rcx+192], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+448], ymm3 + vmovdqu YMMWORD PTR [rcx+576], ymm4 + vmovdqu YMMWORD PTR [rcx+704], ymm5 + vmovdqu YMMWORD PTR [rcx+832], ymm6 + vmovdqu YMMWORD PTR [rcx+960], ymm7 + ; 128: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm0, YMMWORD PTR [rcx+32] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vmovdqu ymm2, YMMWORD PTR [rcx+288] + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vmovdqu ymm4, YMMWORD PTR [rcx+544] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+800] + vmovdqu ymm7, YMMWORD PTR [rcx+928] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+32], ymm1 - vmovdqu YMMWORD PTR [rcx+64], ymm2 - vmovdqu YMMWORD PTR [rcx+96], ymm3 - vmovdqu YMMWORD PTR [rcx+128], ymm4 - vmovdqu YMMWORD PTR [rcx+160], ymm5 - vmovdqu YMMWORD PTR [rcx+192], ymm6 - vmovdqu YMMWORD PTR [rcx+224], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+352] - vmovdqu ymm4, YMMWORD PTR [rcx+384] - vmovdqu ymm5, YMMWORD PTR [rcx+416] - vmovdqu ymm6, YMMWORD PTR [rcx+448] - vmovdqu ymm7, YMMWORD PTR [rcx+480] - ; 1: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1216] - vmovdqu ymm12, YMMWORD PTR [rdx+1248] - vmovdqu ymm11, YMMWORD PTR [rdx+1280] - vmovdqu ymm13, YMMWORD PTR [rdx+1312] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1344] - vmovdqu ymm12, YMMWORD PTR [rdx+1376] - vmovdqu ymm11, YMMWORD PTR [rdx+1408] - vmovdqu ymm13, YMMWORD PTR [rdx+1440] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1472] - vmovdqu ymm12, YMMWORD PTR [rdx+1504] - vmovdqu ymm11, YMMWORD PTR [rdx+1536] - vmovdqu ymm13, YMMWORD PTR [rdx+1568] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 - vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 2/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+1600] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+1632] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+1664] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+1696] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1728] - vmovdqu ymm12, YMMWORD PTR [rdx+1760] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+32], ymm0 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vmovdqu YMMWORD PTR [rcx+288], ymm2 + vmovdqu YMMWORD PTR [rcx+416], ymm3 + vmovdqu YMMWORD PTR [rcx+544], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+800], ymm6 + vmovdqu YMMWORD PTR [rcx+928], ymm7 + ; 128: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+128] + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vmovdqu ymm3, YMMWORD PTR [rcx+384] + vmovdqu ymm4, YMMWORD PTR [rcx+512] + vmovdqu ymm5, YMMWORD PTR [rcx+640] + vmovdqu ymm6, YMMWORD PTR [rcx+768] + vmovdqu ymm7, YMMWORD PTR [rcx+896] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 1: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1792] - vmovdqu ymm12, YMMWORD PTR [rdx+1824] - vmovdqu ymm11, YMMWORD PTR [rdx+1856] - vmovdqu ymm13, YMMWORD PTR [rdx+1888] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1920] - vmovdqu ymm12, YMMWORD PTR [rdx+1952] - vmovdqu ymm11, YMMWORD PTR [rdx+1984] - vmovdqu ymm13, YMMWORD PTR [rdx+2016] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2048] - vmovdqu ymm12, YMMWORD PTR [rdx+2080] - vmovdqu ymm11, YMMWORD PTR [rdx+2112] - vmovdqu ymm13, YMMWORD PTR [rdx+2144] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 2/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+2176] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+2208] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+2240] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+2272] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+256], ymm2 + vmovdqu YMMWORD PTR [rcx+384], ymm3 + vmovdqu YMMWORD PTR [rcx+512], ymm4 + vmovdqu YMMWORD PTR [rcx+640], ymm5 + vmovdqu YMMWORD PTR [rcx+768], ymm6 + vmovdqu YMMWORD PTR [rcx+896], ymm7 + vmovdqu ymm4, ymm1 + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] + ; 32: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+192] + vmovdqu ymm12, YMMWORD PTR [rdx+224] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2304] - vmovdqu ymm12, YMMWORD PTR [rdx+2336] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2368] - vmovdqu ymm12, YMMWORD PTR [rdx+2400] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+256] + vmovdqu ymm12, YMMWORD PTR [rdx+288] + vmovdqu ymm11, YMMWORD PTR [rdx+320] + vmovdqu ymm13, YMMWORD PTR [rdx+352] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+256], ymm0 - vmovdqu YMMWORD PTR [rcx+288], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+352], ymm3 - vmovdqu YMMWORD PTR [rcx+384], ymm4 - vmovdqu YMMWORD PTR [rcx+416], ymm5 - vmovdqu YMMWORD PTR [rcx+448], ymm6 - vmovdqu YMMWORD PTR [rcx+480], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vmovdqu ymm2, YMMWORD PTR [rcx+576] - vmovdqu ymm3, YMMWORD PTR [rcx+608] - vmovdqu ymm4, YMMWORD PTR [rcx+640] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+704] - vmovdqu ymm7, YMMWORD PTR [rcx+736] - ; 1: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2432] - vmovdqu ymm12, YMMWORD PTR [rdx+2464] - vmovdqu ymm11, YMMWORD PTR [rdx+2496] - vmovdqu ymm13, YMMWORD PTR [rdx+2528] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+384] + vmovdqu ymm12, YMMWORD PTR [rdx+416] + vmovdqu ymm11, YMMWORD PTR [rdx+448] + vmovdqu ymm13, YMMWORD PTR [rdx+480] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2560] - vmovdqu ymm12, YMMWORD PTR [rdx+2592] - vmovdqu ymm11, YMMWORD PTR [rdx+2624] - vmovdqu ymm13, YMMWORD PTR [rdx+2656] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+512] + vmovdqu ymm12, YMMWORD PTR [rdx+544] + vmovdqu ymm11, YMMWORD PTR [rdx+576] + vmovdqu ymm13, YMMWORD PTR [rdx+608] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2688] - vmovdqu ymm12, YMMWORD PTR [rdx+2720] - vmovdqu ymm11, YMMWORD PTR [rdx+2752] - vmovdqu ymm13, YMMWORD PTR [rdx+2784] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 1/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+640] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+672] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+704] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+736] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 + vpsubq ymm0, ymm1, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 + vpsubq ymm0, ymm3, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 3/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+2816] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+2848] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+2880] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+2912] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+768] + vmovdqu ymm12, YMMWORD PTR [rdx+800] + vmovdqu ymm11, YMMWORD PTR [rdx+832] + vmovdqu ymm13, YMMWORD PTR [rdx+864] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2944] - vmovdqu ymm12, YMMWORD PTR [rdx+2976] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 1/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+896] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+928] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+960] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+992] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 1: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3008] - vmovdqu ymm12, YMMWORD PTR [rdx+3040] - vmovdqu ymm11, YMMWORD PTR [rdx+3072] - vmovdqu ymm13, YMMWORD PTR [rdx+3104] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1024] + vmovdqu ymm12, YMMWORD PTR [rdx+1056] + vmovdqu ymm11, YMMWORD PTR [rdx+1088] + vmovdqu ymm13, YMMWORD PTR [rdx+1120] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3136] - vmovdqu ymm12, YMMWORD PTR [rdx+3168] - vmovdqu ymm11, YMMWORD PTR [rdx+3200] - vmovdqu ymm13, YMMWORD PTR [rdx+3232] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1152] + vmovdqu ymm12, YMMWORD PTR [rdx+1184] + vmovdqu ymm11, YMMWORD PTR [rdx+1216] + vmovdqu ymm13, YMMWORD PTR [rdx+1248] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3264] - vmovdqu ymm12, YMMWORD PTR [rdx+3296] - vmovdqu ymm11, YMMWORD PTR [rdx+3328] - vmovdqu ymm13, YMMWORD PTR [rdx+3360] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 3/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+3392] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+3424] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+3456] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+3488] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1280] + vmovdqu ymm12, YMMWORD PTR [rdx+1312] + vmovdqu ymm11, YMMWORD PTR [rdx+1344] + vmovdqu ymm13, YMMWORD PTR [rdx+1376] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3520] - vmovdqu ymm12, YMMWORD PTR [rdx+3552] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + ; 32: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1408] + vmovdqu ymm12, YMMWORD PTR [rdx+1440] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3584] - vmovdqu ymm12, YMMWORD PTR [rdx+3616] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1472] + vmovdqu ymm12, YMMWORD PTR [rdx+1504] + vmovdqu ymm11, YMMWORD PTR [rdx+1536] + vmovdqu ymm13, YMMWORD PTR [rdx+1568] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+512], ymm0 - vmovdqu YMMWORD PTR [rcx+544], ymm1 - vmovdqu YMMWORD PTR [rcx+576], ymm2 - vmovdqu YMMWORD PTR [rcx+608], ymm3 - vmovdqu YMMWORD PTR [rcx+640], ymm4 - vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+704], ymm6 - vmovdqu YMMWORD PTR [rcx+736], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vmovdqu ymm2, YMMWORD PTR [rcx+832] - vmovdqu ymm3, YMMWORD PTR [rcx+864] - vmovdqu ymm4, YMMWORD PTR [rcx+896] - vmovdqu ymm5, YMMWORD PTR [rcx+928] - vmovdqu ymm6, YMMWORD PTR [rcx+960] - vmovdqu ymm7, YMMWORD PTR [rcx+992] - ; 1: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3648] - vmovdqu ymm12, YMMWORD PTR [rdx+3680] - vmovdqu ymm11, YMMWORD PTR [rdx+3712] - vmovdqu ymm13, YMMWORD PTR [rdx+3744] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3776] - vmovdqu ymm12, YMMWORD PTR [rdx+3808] - vmovdqu ymm11, YMMWORD PTR [rdx+3840] - vmovdqu ymm13, YMMWORD PTR [rdx+3872] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1600] + vmovdqu ymm12, YMMWORD PTR [rdx+1632] + vmovdqu ymm11, YMMWORD PTR [rdx+1664] + vmovdqu ymm13, YMMWORD PTR [rdx+1696] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3904] - vmovdqu ymm12, YMMWORD PTR [rdx+3936] - vmovdqu ymm11, YMMWORD PTR [rdx+3968] - vmovdqu ymm13, YMMWORD PTR [rdx+4000] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 - vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 4/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+4032] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+4064] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+4096] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+4128] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4160] - vmovdqu ymm12, YMMWORD PTR [rdx+4192] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+1728] + vmovdqu ymm12, YMMWORD PTR [rdx+1760] + vmovdqu ymm11, YMMWORD PTR [rdx+1792] + vmovdqu ymm13, YMMWORD PTR [rdx+1824] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 1: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4224] - vmovdqu ymm12, YMMWORD PTR [rdx+4256] - vmovdqu ymm11, YMMWORD PTR [rdx+4288] - vmovdqu ymm13, YMMWORD PTR [rdx+4320] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 2/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+1856] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+1888] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1920] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1952] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vpsubq ymm0, ymm1, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4352] - vmovdqu ymm12, YMMWORD PTR [rdx+4384] - vmovdqu ymm11, YMMWORD PTR [rdx+4416] - vmovdqu ymm13, YMMWORD PTR [rdx+4448] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm0, ymm3, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1984] + vmovdqu ymm12, YMMWORD PTR [rdx+2016] + vmovdqu ymm11, YMMWORD PTR [rdx+2048] + vmovdqu ymm13, YMMWORD PTR [rdx+2080] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4480] - vmovdqu ymm12, YMMWORD PTR [rdx+4512] - vmovdqu ymm11, YMMWORD PTR [rdx+4544] - vmovdqu ymm13, YMMWORD PTR [rdx+4576] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 2/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2112] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2144] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2176] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2208] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 + vpsubq ymm4, ymm5, ymm4 vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 + vpsubq ymm4, ymm7, ymm4 vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 4/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+4608] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+4640] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+4672] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+4704] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2240] + vmovdqu ymm12, YMMWORD PTR [rdx+2272] + vmovdqu ymm11, YMMWORD PTR [rdx+2304] + vmovdqu ymm13, YMMWORD PTR [rdx+2336] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4736] - vmovdqu ymm12, YMMWORD PTR [rdx+4768] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2368] + vmovdqu ymm12, YMMWORD PTR [rdx+2400] + vmovdqu ymm11, YMMWORD PTR [rdx+2432] + vmovdqu ymm13, YMMWORD PTR [rdx+2464] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4800] - vmovdqu ymm12, YMMWORD PTR [rdx+4832] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2496] + vmovdqu ymm12, YMMWORD PTR [rdx+2528] + vmovdqu ymm11, YMMWORD PTR [rdx+2560] + vmovdqu ymm13, YMMWORD PTR [rdx+2592] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+768], ymm0 - vmovdqu YMMWORD PTR [rcx+800], ymm1 - vmovdqu YMMWORD PTR [rcx+832], ymm2 - vmovdqu YMMWORD PTR [rcx+896], ymm4 - vmovdqu YMMWORD PTR [rcx+928], ymm5 - vmovdqu YMMWORD PTR [rcx+960], ymm6 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm6, ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+96] - vmovdqu ymm1, YMMWORD PTR [rcx+224] - vmovdqu ymm2, YMMWORD PTR [rcx+352] - vmovdqu ymm3, YMMWORD PTR [rcx+480] - vmovdqu ymm4, YMMWORD PTR [rcx+608] - vmovdqu ymm5, YMMWORD PTR [rcx+736] - ; 64: 4/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 4/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + ; 32: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2624] + vmovdqu ymm12, YMMWORD PTR [rdx+2656] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2688] + vmovdqu ymm12, YMMWORD PTR [rdx+2720] + vmovdqu ymm11, YMMWORD PTR [rdx+2752] + vmovdqu ymm13, YMMWORD PTR [rdx+2784] + vpmulld ymm8, ymm2, ymm12 vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 - vpmuldq ymm3, ymm3, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpmuldq ymm2, ymm2, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 vpmuldq ymm6, ymm6, ymm11 - vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+96], ymm0 - vmovdqu YMMWORD PTR [rcx+224], ymm1 - vmovdqu YMMWORD PTR [rcx+352], ymm2 - vmovdqu YMMWORD PTR [rcx+480], ymm3 - vmovdqu YMMWORD PTR [rcx+608], ymm4 - vmovdqu YMMWORD PTR [rcx+736], ymm5 - vmovdqu YMMWORD PTR [rcx+864], ymm6 - vmovdqu YMMWORD PTR [rcx+992], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm0, YMMWORD PTR [rcx+64] - vmovdqu ymm1, YMMWORD PTR [rcx+192] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+448] - vmovdqu ymm4, YMMWORD PTR [rcx+576] - vmovdqu ymm5, YMMWORD PTR [rcx+704] - vmovdqu ymm6, YMMWORD PTR [rcx+832] - vmovdqu ymm7, YMMWORD PTR [rcx+960] - ; 64: 3/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 3/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2816] + vmovdqu ymm12, YMMWORD PTR [rdx+2848] + vmovdqu ymm11, YMMWORD PTR [rdx+2880] + vmovdqu ymm13, YMMWORD PTR [rdx+2912] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+2944] + vmovdqu ymm12, YMMWORD PTR [rdx+2976] + vmovdqu ymm11, YMMWORD PTR [rdx+3008] + vmovdqu ymm13, YMMWORD PTR [rdx+3040] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 - vpmuldq ymm6, ymm6, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+64], ymm0 - vmovdqu YMMWORD PTR [rcx+192], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+448], ymm3 - vmovdqu YMMWORD PTR [rcx+576], ymm4 - vmovdqu YMMWORD PTR [rcx+704], ymm5 - vmovdqu YMMWORD PTR [rcx+832], ymm6 - vmovdqu YMMWORD PTR [rcx+960], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm0, YMMWORD PTR [rcx+32] - vmovdqu ymm1, YMMWORD PTR [rcx+160] - vmovdqu ymm2, YMMWORD PTR [rcx+288] - vmovdqu ymm3, YMMWORD PTR [rcx+416] - vmovdqu ymm4, YMMWORD PTR [rcx+544] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+800] - vmovdqu ymm7, YMMWORD PTR [rcx+928] - ; 64: 2/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 3/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3072] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3104] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3136] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3168] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm0, ymm1, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm0, ymm3, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3200] + vmovdqu ymm12, YMMWORD PTR [rdx+3232] + vmovdqu ymm11, YMMWORD PTR [rdx+3264] + vmovdqu ymm13, YMMWORD PTR [rdx+3296] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 3/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3328] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3360] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3392] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3424] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 2/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 vmovshdup ymm15, ymm4 vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 - vpsubq ymm15, ymm9, ymm15 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 vmovshdup ymm4, ymm4 vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3456] + vmovdqu ymm12, YMMWORD PTR [rdx+3488] + vmovdqu ymm11, YMMWORD PTR [rdx+3520] + vmovdqu ymm13, YMMWORD PTR [rdx+3552] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3584] + vmovdqu ymm12, YMMWORD PTR [rdx+3616] + vmovdqu ymm11, YMMWORD PTR [rdx+3648] + vmovdqu ymm13, YMMWORD PTR [rdx+3680] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 vpmuldq ymm3, ymm3, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3712] + vmovdqu ymm12, YMMWORD PTR [rdx+3744] + vmovdqu ymm11, YMMWORD PTR [rdx+3776] + vmovdqu ymm13, YMMWORD PTR [rdx+3808] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 - vpmuldq ymm6, ymm6, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+32], ymm0 - vmovdqu YMMWORD PTR [rcx+160], ymm1 - vmovdqu YMMWORD PTR [rcx+288], ymm2 - vmovdqu YMMWORD PTR [rcx+416], ymm3 - vmovdqu YMMWORD PTR [rcx+544], ymm4 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+800], ymm6 - vmovdqu YMMWORD PTR [rcx+928], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+128] - vmovdqu ymm2, YMMWORD PTR [rcx+256] - vmovdqu ymm3, YMMWORD PTR [rcx+384] - vmovdqu ymm4, YMMWORD PTR [rcx+512] - vmovdqu ymm5, YMMWORD PTR [rcx+640] - vmovdqu ymm6, YMMWORD PTR [rcx+768] - vmovdqu ymm7, YMMWORD PTR [rcx+896] - ; 64: 1/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + ; 32: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3840] + vmovdqu ymm12, YMMWORD PTR [rdx+3872] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 1/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3904] + vmovdqu ymm12, YMMWORD PTR [rdx+3936] + vmovdqu ymm11, YMMWORD PTR [rdx+3968] + vmovdqu ymm13, YMMWORD PTR [rdx+4000] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4032] + vmovdqu ymm12, YMMWORD PTR [rdx+4064] + vmovdqu ymm11, YMMWORD PTR [rdx+4096] + vmovdqu ymm13, YMMWORD PTR [rdx+4128] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm1, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm3, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+4160] + vmovdqu ymm12, YMMWORD PTR [rdx+4192] + vmovdqu ymm11, YMMWORD PTR [rdx+4224] + vmovdqu ymm13, YMMWORD PTR [rdx+4256] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 4/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4288] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4320] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4352] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4384] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm0, ymm1, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm0, ymm3, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4416] + vmovdqu ymm12, YMMWORD PTR [rdx+4448] + vmovdqu ymm11, YMMWORD PTR [rdx+4480] + vmovdqu ymm13, YMMWORD PTR [rdx+4512] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm1, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 + vpsubq ymm8, ymm3, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 4/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4544] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4576] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4608] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4640] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4672] + vmovdqu ymm12, YMMWORD PTR [rdx+4704] + vmovdqu ymm11, YMMWORD PTR [rdx+4736] + vmovdqu ymm13, YMMWORD PTR [rdx+4768] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4800] + vmovdqu ymm12, YMMWORD PTR [rdx+4832] + vmovdqu ymm11, YMMWORD PTR [rdx+4864] + vmovdqu ymm13, YMMWORD PTR [rdx+4896] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm1, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4928] + vmovdqu ymm12, YMMWORD PTR [rdx+4960] + vmovdqu ymm11, YMMWORD PTR [rdx+4992] + vmovdqu ymm13, YMMWORD PTR [rdx+5024] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 - vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+128], ymm1 - vmovdqu YMMWORD PTR [rcx+256], ymm2 - vmovdqu YMMWORD PTR [rcx+384], ymm3 - vmovdqu YMMWORD PTR [rcx+512], ymm4 - vmovdqu YMMWORD PTR [rcx+640], ymm5 - vmovdqu YMMWORD PTR [rcx+768], ymm6 - vmovdqu YMMWORD PTR [rcx+896], ymm7 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+864], ymm3 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] @@ -7967,10 +7509,10 @@ wc_mldsa_invntt_avx2 PROC vmovdqu xmm15, OWORD PTR [rsp+152] add rsp, 168 ret -wc_mldsa_invntt_avx2 ENDP +wc_mldsa_ntt_full_avx2 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_invntt_full_avx2 PROC +wc_mldsa_ntt_small_full_avx2 PROC sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 @@ -7984,2420 +7526,2308 @@ wc_mldsa_invntt_full_avx2 PROC vmovdqu OWORD PTR [rsp+152], xmm15 vpxor ymm14, ymm14, ymm14 vmovdqu ymm14, YMMWORD PTR mldsa_q - ; invntt - mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas_inv] - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vmovdqu ymm2, YMMWORD PTR [rcx+64] - vmovdqu ymm3, YMMWORD PTR [rcx+96] - vmovdqu ymm4, YMMWORD PTR [rcx+128] - vmovdqu ymm5, YMMWORD PTR [rcx+160] - vmovdqu ymm6, YMMWORD PTR [rcx+192] - vmovdqu ymm7, YMMWORD PTR [rcx+224] - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpermq ymm0, ymm0, 216 - vpermq ymm1, ymm1, 216 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpermq ymm2, ymm2, 216 - vpermq ymm3, ymm3, 216 - ; 1: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx] - vmovdqu ymm12, YMMWORD PTR [rdx+32] + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas] vmovdqu ymm11, YMMWORD PTR [rdx+64] vmovdqu ymm13, YMMWORD PTR [rdx+96] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + ; 128: 4/4 + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half + vmovdqu ymm0, YMMWORD PTR [rcx+96] + vmovdqu ymm1, YMMWORD PTR [rcx+224] + vmovdqu ymm2, YMMWORD PTR [rcx+352] + vmovdqu ymm3, YMMWORD PTR [rcx+480] + vmovdqu ymm4, YMMWORD PTR [rcx+608] + vmovdqu ymm5, YMMWORD PTR [rcx+736] + vmovdqu ymm6, YMMWORD PTR [rcx+864] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+128] - vmovdqu ymm12, YMMWORD PTR [rdx+160] - vmovdqu ymm11, YMMWORD PTR [rdx+192] - vmovdqu ymm13, YMMWORD PTR [rdx+224] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+256] - vmovdqu ymm12, YMMWORD PTR [rdx+288] - vmovdqu ymm11, YMMWORD PTR [rdx+320] - vmovdqu ymm13, YMMWORD PTR [rdx+352] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 - vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 - vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 1/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+384] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+416] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+448] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+480] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+96], ymm0 + vmovdqu YMMWORD PTR [rcx+224], ymm1 + vmovdqu YMMWORD PTR [rcx+352], ymm2 + vmovdqu YMMWORD PTR [rcx+480], ymm3 + vmovdqu YMMWORD PTR [rcx+608], ymm4 + vmovdqu YMMWORD PTR [rcx+736], ymm5 + vmovdqu YMMWORD PTR [rcx+864], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + ; 128: 3/4 + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half + vmovdqu ymm0, YMMWORD PTR [rcx+64] + vmovdqu ymm1, YMMWORD PTR [rcx+192] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+448] + vmovdqu ymm4, YMMWORD PTR [rcx+576] + vmovdqu ymm5, YMMWORD PTR [rcx+704] + vmovdqu ymm6, YMMWORD PTR [rcx+832] + vmovdqu ymm7, YMMWORD PTR [rcx+960] + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+512] - vmovdqu ymm12, YMMWORD PTR [rdx+544] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpermq ymm4, ymm4, 216 - vpermq ymm5, ymm5, 216 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpermq ymm6, ymm6, 216 - vpermq ymm7, ymm7, 216 - ; 1: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+576] - vmovdqu ymm12, YMMWORD PTR [rdx+608] - vmovdqu ymm11, YMMWORD PTR [rdx+640] - vmovdqu ymm13, YMMWORD PTR [rdx+672] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+64], ymm0 + vmovdqu YMMWORD PTR [rcx+192], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+448], ymm3 + vmovdqu YMMWORD PTR [rcx+576], ymm4 + vmovdqu YMMWORD PTR [rcx+704], ymm5 + vmovdqu YMMWORD PTR [rcx+832], ymm6 + vmovdqu YMMWORD PTR [rcx+960], ymm7 + ; 128: 2/4 + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half + vmovdqu ymm0, YMMWORD PTR [rcx+32] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vmovdqu ymm2, YMMWORD PTR [rcx+288] + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vmovdqu ymm4, YMMWORD PTR [rcx+544] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+800] + vmovdqu ymm7, YMMWORD PTR [rcx+928] + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+704] - vmovdqu ymm12, YMMWORD PTR [rdx+736] - vmovdqu ymm11, YMMWORD PTR [rdx+768] - vmovdqu ymm13, YMMWORD PTR [rdx+800] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+832] - vmovdqu ymm12, YMMWORD PTR [rdx+864] - vmovdqu ymm11, YMMWORD PTR [rdx+896] - vmovdqu ymm13, YMMWORD PTR [rdx+928] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 1/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+960] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+992] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+1024] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+1056] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+32], ymm0 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vmovdqu YMMWORD PTR [rcx+288], ymm2 + vmovdqu YMMWORD PTR [rcx+416], ymm3 + vmovdqu YMMWORD PTR [rcx+544], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+800], ymm6 + vmovdqu YMMWORD PTR [rcx+928], ymm7 + ; 128: 1/4 + vmovdqu ymm10, YMMWORD PTR L_mldsa_avx2_zeta1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_avx2_half + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+128] + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vmovdqu ymm3, YMMWORD PTR [rcx+384] + vmovdqu ymm4, YMMWORD PTR [rcx+512] + vmovdqu ymm5, YMMWORD PTR [rcx+640] + vmovdqu ymm6, YMMWORD PTR [rcx+768] + vmovdqu ymm7, YMMWORD PTR [rcx+896] + vpmulld ymm8, ymm4, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm10 + vpaddd ymm9, ymm8, ymm12 + vpsrad ymm9, ymm9, 23 + vpmulld ymm9, ymm9, ymm14 + vpsubd ymm8, ymm8, ymm9 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 64: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vpmulld ymm8, ymm2, ymm13 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1088] - vmovdqu ymm12, YMMWORD PTR [rdx+1120] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm3, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + vmovdqu YMMWORD PTR [rcx+256], ymm2 + vmovdqu YMMWORD PTR [rcx+384], ymm3 + vmovdqu YMMWORD PTR [rcx+512], ymm4 + vmovdqu YMMWORD PTR [rcx+640], ymm5 + vmovdqu YMMWORD PTR [rcx+768], ymm6 + vmovdqu YMMWORD PTR [rcx+896], ymm7 + vmovdqu ymm4, ymm1 + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] ; 32: 1/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1152] - vmovdqu ymm12, YMMWORD PTR [rdx+1184] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovdqu ymm10, YMMWORD PTR [rdx+192] + vmovdqu ymm12, YMMWORD PTR [rdx+224] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+32], ymm1 - vmovdqu YMMWORD PTR [rcx+64], ymm2 - vmovdqu YMMWORD PTR [rcx+96], ymm3 - vmovdqu YMMWORD PTR [rcx+128], ymm4 - vmovdqu YMMWORD PTR [rcx+160], ymm5 - vmovdqu YMMWORD PTR [rcx+192], ymm6 - vmovdqu YMMWORD PTR [rcx+224], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+352] - vmovdqu ymm4, YMMWORD PTR [rcx+384] - vmovdqu ymm5, YMMWORD PTR [rcx+416] - vmovdqu ymm6, YMMWORD PTR [rcx+448] - vmovdqu ymm7, YMMWORD PTR [rcx+480] - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpermq ymm0, ymm0, 216 - vpermq ymm1, ymm1, 216 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpermq ymm2, ymm2, 216 - vpermq ymm3, ymm3, 216 - ; 1: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1216] - vmovdqu ymm12, YMMWORD PTR [rdx+1248] - vmovdqu ymm11, YMMWORD PTR [rdx+1280] - vmovdqu ymm13, YMMWORD PTR [rdx+1312] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+256] + vmovdqu ymm12, YMMWORD PTR [rdx+288] + vmovdqu ymm11, YMMWORD PTR [rdx+320] + vmovdqu ymm13, YMMWORD PTR [rdx+352] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm3, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1344] - vmovdqu ymm12, YMMWORD PTR [rdx+1376] - vmovdqu ymm11, YMMWORD PTR [rdx+1408] - vmovdqu ymm13, YMMWORD PTR [rdx+1440] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+384] + vmovdqu ymm12, YMMWORD PTR [rdx+416] + vmovdqu ymm11, YMMWORD PTR [rdx+448] + vmovdqu ymm13, YMMWORD PTR [rdx+480] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1472] - vmovdqu ymm12, YMMWORD PTR [rdx+1504] - vmovdqu ymm11, YMMWORD PTR [rdx+1536] - vmovdqu ymm13, YMMWORD PTR [rdx+1568] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+512] + vmovdqu ymm12, YMMWORD PTR [rdx+544] + vmovdqu ymm11, YMMWORD PTR [rdx+576] + vmovdqu ymm13, YMMWORD PTR [rdx+608] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 1/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+640] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+672] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+704] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+736] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 + vpsubq ymm0, ymm1, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 + vpsubq ymm0, ymm3, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 2/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+1600] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+1632] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+1664] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+1696] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+768] + vmovdqu ymm12, YMMWORD PTR [rdx+800] + vmovdqu ymm11, YMMWORD PTR [rdx+832] + vmovdqu ymm13, YMMWORD PTR [rdx+864] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1728] - vmovdqu ymm12, YMMWORD PTR [rdx+1760] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 1/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+896] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+928] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+960] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+992] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1024] + vmovdqu ymm12, YMMWORD PTR [rdx+1056] + vmovdqu ymm11, YMMWORD PTR [rdx+1088] + vmovdqu ymm13, YMMWORD PTR [rdx+1120] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpermq ymm4, ymm4, 216 - vpermq ymm5, ymm5, 216 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpermq ymm6, ymm6, 216 - vpermq ymm7, ymm7, 216 - ; 1: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1792] - vmovdqu ymm12, YMMWORD PTR [rdx+1824] - vmovdqu ymm11, YMMWORD PTR [rdx+1856] - vmovdqu ymm13, YMMWORD PTR [rdx+1888] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1152] + vmovdqu ymm12, YMMWORD PTR [rdx+1184] + vmovdqu ymm11, YMMWORD PTR [rdx+1216] + vmovdqu ymm13, YMMWORD PTR [rdx+1248] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+1920] - vmovdqu ymm12, YMMWORD PTR [rdx+1952] - vmovdqu ymm11, YMMWORD PTR [rdx+1984] - vmovdqu ymm13, YMMWORD PTR [rdx+2016] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1280] + vmovdqu ymm12, YMMWORD PTR [rdx+1312] + vmovdqu ymm11, YMMWORD PTR [rdx+1344] + vmovdqu ymm13, YMMWORD PTR [rdx+1376] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2048] - vmovdqu ymm12, YMMWORD PTR [rdx+2080] - vmovdqu ymm11, YMMWORD PTR [rdx+2112] - vmovdqu ymm13, YMMWORD PTR [rdx+2144] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + ; 32: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1408] + vmovdqu ymm12, YMMWORD PTR [rdx+1440] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 2/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+2176] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+2208] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+2240] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+2272] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 ; 16: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2304] - vmovdqu ymm12, YMMWORD PTR [rdx+2336] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovdqu ymm10, YMMWORD PTR [rdx+1472] + vmovdqu ymm12, YMMWORD PTR [rdx+1504] + vmovdqu ymm11, YMMWORD PTR [rdx+1536] + vmovdqu ymm13, YMMWORD PTR [rdx+1568] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 2/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2368] - vmovdqu ymm12, YMMWORD PTR [rdx+2400] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1600] + vmovdqu ymm12, YMMWORD PTR [rdx+1632] + vmovdqu ymm11, YMMWORD PTR [rdx+1664] + vmovdqu ymm13, YMMWORD PTR [rdx+1696] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+256], ymm0 - vmovdqu YMMWORD PTR [rcx+288], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+352], ymm3 - vmovdqu YMMWORD PTR [rcx+384], ymm4 - vmovdqu YMMWORD PTR [rcx+416], ymm5 - vmovdqu YMMWORD PTR [rcx+448], ymm6 - vmovdqu YMMWORD PTR [rcx+480], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vmovdqu ymm2, YMMWORD PTR [rcx+576] - vmovdqu ymm3, YMMWORD PTR [rcx+608] - vmovdqu ymm4, YMMWORD PTR [rcx+640] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+704] - vmovdqu ymm7, YMMWORD PTR [rcx+736] - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpermq ymm0, ymm0, 216 - vpermq ymm1, ymm1, 216 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpermq ymm2, ymm2, 216 - vpermq ymm3, ymm3, 216 - ; 1: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2432] - vmovdqu ymm12, YMMWORD PTR [rdx+2464] - vmovdqu ymm11, YMMWORD PTR [rdx+2496] - vmovdqu ymm13, YMMWORD PTR [rdx+2528] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+1728] + vmovdqu ymm12, YMMWORD PTR [rdx+1760] + vmovdqu ymm11, YMMWORD PTR [rdx+1792] + vmovdqu ymm13, YMMWORD PTR [rdx+1824] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2560] - vmovdqu ymm12, YMMWORD PTR [rdx+2592] - vmovdqu ymm11, YMMWORD PTR [rdx+2624] - vmovdqu ymm13, YMMWORD PTR [rdx+2656] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2688] - vmovdqu ymm12, YMMWORD PTR [rdx+2720] - vmovdqu ymm11, YMMWORD PTR [rdx+2752] - vmovdqu ymm13, YMMWORD PTR [rdx+2784] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 2/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+1856] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+1888] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1920] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1952] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 + vpsubq ymm0, ymm1, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 + vpsubq ymm0, ymm3, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 3/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+2816] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+2848] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+2880] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+2912] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1984] + vmovdqu ymm12, YMMWORD PTR [rdx+2016] + vmovdqu ymm11, YMMWORD PTR [rdx+2048] + vmovdqu ymm13, YMMWORD PTR [rdx+2080] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+2944] - vmovdqu ymm12, YMMWORD PTR [rdx+2976] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 2/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2112] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2144] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2176] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2208] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2240] + vmovdqu ymm12, YMMWORD PTR [rdx+2272] + vmovdqu ymm11, YMMWORD PTR [rdx+2304] + vmovdqu ymm13, YMMWORD PTR [rdx+2336] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpermq ymm4, ymm4, 216 - vpermq ymm5, ymm5, 216 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpermq ymm6, ymm6, 216 - vpermq ymm7, ymm7, 216 - ; 1: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3008] - vmovdqu ymm12, YMMWORD PTR [rdx+3040] - vmovdqu ymm11, YMMWORD PTR [rdx+3072] - vmovdqu ymm13, YMMWORD PTR [rdx+3104] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2368] + vmovdqu ymm12, YMMWORD PTR [rdx+2400] + vmovdqu ymm11, YMMWORD PTR [rdx+2432] + vmovdqu ymm13, YMMWORD PTR [rdx+2464] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3136] - vmovdqu ymm12, YMMWORD PTR [rdx+3168] - vmovdqu ymm11, YMMWORD PTR [rdx+3200] - vmovdqu ymm13, YMMWORD PTR [rdx+3232] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2496] + vmovdqu ymm12, YMMWORD PTR [rdx+2528] + vmovdqu ymm11, YMMWORD PTR [rdx+2560] + vmovdqu ymm13, YMMWORD PTR [rdx+2592] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3264] - vmovdqu ymm12, YMMWORD PTR [rdx+3296] - vmovdqu ymm11, YMMWORD PTR [rdx+3328] - vmovdqu ymm13, YMMWORD PTR [rdx+3360] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + ; 32: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2624] + vmovdqu ymm12, YMMWORD PTR [rdx+2656] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 3/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+3392] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+3424] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+3456] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+3488] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3520] - vmovdqu ymm12, YMMWORD PTR [rdx+3552] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 32: 3/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3584] - vmovdqu ymm12, YMMWORD PTR [rdx+3616] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2688] + vmovdqu ymm12, YMMWORD PTR [rdx+2720] + vmovdqu ymm11, YMMWORD PTR [rdx+2752] + vmovdqu ymm13, YMMWORD PTR [rdx+2784] + vpmulld ymm8, ymm2, ymm12 + vmovshdup ymm9, ymm2 + vpmuldq ymm2, ymm2, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm13 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+512], ymm0 - vmovdqu YMMWORD PTR [rcx+544], ymm1 - vmovdqu YMMWORD PTR [rcx+576], ymm2 - vmovdqu YMMWORD PTR [rcx+608], ymm3 - vmovdqu YMMWORD PTR [rcx+640], ymm4 - vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+704], ymm6 - vmovdqu YMMWORD PTR [rcx+736], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vmovdqu ymm2, YMMWORD PTR [rcx+832] - vmovdqu ymm3, YMMWORD PTR [rcx+864] - vmovdqu ymm4, YMMWORD PTR [rcx+896] - vmovdqu ymm5, YMMWORD PTR [rcx+928] - vmovdqu ymm6, YMMWORD PTR [rcx+960] - vmovdqu ymm7, YMMWORD PTR [rcx+992] - vpunpckldq ymm8, ymm0, ymm1 - vpunpckhdq ymm9, ymm0, ymm1 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpermq ymm0, ymm0, 216 - vpermq ymm1, ymm1, 216 - vpunpckldq ymm8, ymm2, ymm3 - vpunpckhdq ymm9, ymm2, ymm3 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpermq ymm2, ymm2, 216 - vpermq ymm3, ymm3, 216 - ; 1: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3648] - vmovdqu ymm12, YMMWORD PTR [rdx+3680] - vmovdqu ymm11, YMMWORD PTR [rdx+3712] - vmovdqu ymm13, YMMWORD PTR [rdx+3744] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vmovshdup ymm10, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm7, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2816] + vmovdqu ymm12, YMMWORD PTR [rdx+2848] + vmovdqu ymm11, YMMWORD PTR [rdx+2880] + vmovdqu ymm13, YMMWORD PTR [rdx+2912] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vmovshdup ymm11, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 2: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3776] - vmovdqu ymm12, YMMWORD PTR [rdx+3808] - vmovdqu ymm11, YMMWORD PTR [rdx+3840] - vmovdqu ymm13, YMMWORD PTR [rdx+3872] - vpshufd ymm8, ymm0, 216 - vpshufd ymm9, ymm1, 216 - vpunpckldq ymm0, ymm8, ymm9 - vpunpckhdq ymm1, ymm8, ymm9 - vpshufd ymm8, ymm2, 216 - vpshufd ymm9, ymm3, 216 - vpunpckldq ymm2, ymm8, ymm9 - vpunpckhdq ymm3, ymm8, ymm9 - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+2944] + vmovdqu ymm12, YMMWORD PTR [rdx+2976] + vmovdqu ymm11, YMMWORD PTR [rdx+3008] + vmovdqu ymm13, YMMWORD PTR [rdx+3040] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 4: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+3904] - vmovdqu ymm12, YMMWORD PTR [rdx+3936] - vmovdqu ymm11, YMMWORD PTR [rdx+3968] - vmovdqu ymm13, YMMWORD PTR [rdx+4000] - vpunpcklqdq ymm8, ymm0, ymm1 - vpunpckhqdq ymm1, ymm0, ymm1 - vpunpcklqdq ymm9, ymm2, ymm3 - vpunpckhqdq ymm3, ymm2, ymm3 - vpsubd ymm0, ymm8, ymm1 - vpaddd ymm8, ymm8, ymm1 - vpmulld ymm1, ymm0, ymm12 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 3/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3072] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3104] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3136] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3168] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm2, ymm2, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm0, ymm1 + vpsubq ymm0, ymm1, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm0, ymm9, ymm3 - vpaddd ymm9, ymm9, ymm3 - vpmulld ymm3, ymm0, ymm13 - vmovshdup ymm2, ymm0 - vpmuldq ymm0, ymm0, ymm11 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm2, ymm2, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm0, ymm3 + vpsubq ymm0, ymm3, ymm0 vpsubq ymm15, ymm2, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 8: 4/4 - vperm2i128 ymm0, ymm8, ymm1, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+4032] - vperm2i128 ymm1, ymm8, ymm1, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+4064] - vperm2i128 ymm2, ymm9, ymm3, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+4096] - vperm2i128 ymm3, ymm9, ymm3, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+4128] - vpsubd ymm8, ymm0, ymm1 - vpaddd ymm0, ymm0, ymm1 - vpmulld ymm1, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3200] + vmovdqu ymm12, YMMWORD PTR [rdx+3232] + vmovdqu ymm11, YMMWORD PTR [rdx+3264] + vmovdqu ymm13, YMMWORD PTR [rdx+3296] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm1 - vpmuldq ymm1, ymm1, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm1, ymm8, ymm1 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm1, ymm1 - vpblendd ymm1, ymm1, ymm15, 170 - vpsubd ymm8, ymm2, ymm3 - vpaddd ymm2, ymm2, ymm3 - vpmulld ymm3, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - ; 16: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4160] - vmovdqu ymm12, YMMWORD PTR [rdx+4192] - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 3/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3328] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3360] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3392] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3424] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3456] + vmovdqu ymm12, YMMWORD PTR [rdx+3488] + vmovdqu ymm11, YMMWORD PTR [rdx+3520] + vmovdqu ymm13, YMMWORD PTR [rdx+3552] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vpunpckldq ymm8, ymm4, ymm5 - vpunpckhdq ymm9, ymm4, ymm5 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpermq ymm4, ymm4, 216 - vpermq ymm5, ymm5, 216 - vpunpckldq ymm8, ymm6, ymm7 - vpunpckhdq ymm9, ymm6, ymm7 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpermq ymm6, ymm6, 216 - vpermq ymm7, ymm7, 216 - ; 1: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4224] - vmovdqu ymm12, YMMWORD PTR [rdx+4256] - vmovdqu ymm11, YMMWORD PTR [rdx+4288] - vmovdqu ymm13, YMMWORD PTR [rdx+4320] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3584] + vmovdqu ymm12, YMMWORD PTR [rdx+3616] + vmovdqu ymm11, YMMWORD PTR [rdx+3648] + vmovdqu ymm13, YMMWORD PTR [rdx+3680] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 2: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4352] - vmovdqu ymm12, YMMWORD PTR [rdx+4384] - vmovdqu ymm11, YMMWORD PTR [rdx+4416] - vmovdqu ymm13, YMMWORD PTR [rdx+4448] - vpshufd ymm8, ymm4, 216 - vpshufd ymm9, ymm5, 216 - vpunpckldq ymm4, ymm8, ymm9 - vpunpckhdq ymm5, ymm8, ymm9 - vpshufd ymm8, ymm6, 216 - vpshufd ymm9, ymm7, 216 - vpunpckldq ymm6, ymm8, ymm9 - vpunpckhdq ymm7, ymm8, ymm9 - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 4: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4480] - vmovdqu ymm12, YMMWORD PTR [rdx+4512] - vmovdqu ymm11, YMMWORD PTR [rdx+4544] - vmovdqu ymm13, YMMWORD PTR [rdx+4576] - vpunpcklqdq ymm8, ymm4, ymm5 - vpunpckhqdq ymm5, ymm4, ymm5 - vpunpcklqdq ymm9, ymm6, ymm7 - vpunpckhqdq ymm7, ymm6, ymm7 - vpsubd ymm4, ymm8, ymm5 - vpaddd ymm8, ymm8, ymm5 - vpmulld ymm5, ymm4, ymm12 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm10 - vpmuldq ymm6, ymm6, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm4, ymm5 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm4, ymm9, ymm7 - vpaddd ymm9, ymm9, ymm7 - vpmulld ymm7, ymm4, ymm13 - vmovshdup ymm6, ymm4 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm6, ymm6, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm4, ymm7 - vpsubq ymm15, ymm6, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 8: 4/4 - vperm2i128 ymm4, ymm8, ymm5, 32 - vmovdqu ymm10, YMMWORD PTR [rdx+4608] - vperm2i128 ymm5, ymm8, ymm5, 49 - vmovdqu ymm12, YMMWORD PTR [rdx+4640] - vperm2i128 ymm6, ymm9, ymm7, 32 - vmovdqu ymm11, YMMWORD PTR [rdx+4672] - vperm2i128 ymm7, ymm9, ymm7, 49 - vmovdqu ymm13, YMMWORD PTR [rdx+4704] - vpsubd ymm8, ymm4, ymm5 - vpaddd ymm4, ymm4, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3712] + vmovdqu ymm12, YMMWORD PTR [rdx+3744] + vmovdqu ymm11, YMMWORD PTR [rdx+3776] + vmovdqu ymm13, YMMWORD PTR [rdx+3808] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vmovshdup ymm10, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm6, ymm7 - vpaddd ymm6, ymm6, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 16: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4736] - vmovdqu ymm12, YMMWORD PTR [rdx+4768] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] ; 32: 4/4 - vmovdqu ymm10, YMMWORD PTR [rdx+4800] - vmovdqu ymm12, YMMWORD PTR [rdx+4832] - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vmovdqu YMMWORD PTR [rcx+768], ymm0 - vmovdqu YMMWORD PTR [rcx+800], ymm1 - vmovdqu YMMWORD PTR [rcx+832], ymm2 - vmovdqu YMMWORD PTR [rcx+896], ymm4 - vmovdqu YMMWORD PTR [rcx+928], ymm5 - vmovdqu YMMWORD PTR [rcx+960], ymm6 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm6, ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+96] - vmovdqu ymm1, YMMWORD PTR [rcx+224] - vmovdqu ymm2, YMMWORD PTR [rcx+352] - vmovdqu ymm3, YMMWORD PTR [rcx+480] - vmovdqu ymm4, YMMWORD PTR [rcx+608] - vmovdqu ymm5, YMMWORD PTR [rcx+736] - ; 64: 4/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 4/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovdqu ymm10, YMMWORD PTR [rdx+3840] + vmovdqu ymm12, YMMWORD PTR [rdx+3872] + vpmulld ymm8, ymm4, ymm12 + vmovshdup ymm9, ymm4 + vpmuldq ymm4, ymm4, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 + vpsubq ymm8, ymm4, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm4, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 + vpmulld ymm8, ymm6, ymm12 + vmovshdup ymm9, ymm6 + vpmuldq ymm6, ymm6, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vpmulld ymm8, ymm7, ymm12 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm3, ymm8 + vpaddd ymm3, ymm3, ymm8 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3904] + vmovdqu ymm12, YMMWORD PTR [rdx+3936] + vmovdqu ymm11, YMMWORD PTR [rdx+3968] + vmovdqu ymm13, YMMWORD PTR [rdx+4000] + vpmulld ymm8, ymm2, ymm12 vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 - vpmuldq ymm3, ymm3, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpmuldq ymm2, ymm2, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 vpsubq ymm8, ymm2, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm2, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm12 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm1, ymm8 + vpaddd ymm1, ymm1, ymm8 vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 vpmuldq ymm6, ymm6, ymm11 - vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 vpsubq ymm8, ymm6, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+96], ymm0 - vmovdqu YMMWORD PTR [rcx+224], ymm1 - vmovdqu YMMWORD PTR [rcx+352], ymm2 - vmovdqu YMMWORD PTR [rcx+480], ymm3 - vmovdqu YMMWORD PTR [rcx+608], ymm4 - vmovdqu YMMWORD PTR [rcx+736], ymm5 - vmovdqu YMMWORD PTR [rcx+864], ymm6 - vmovdqu YMMWORD PTR [rcx+992], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm0, YMMWORD PTR [rcx+64] - vmovdqu ymm1, YMMWORD PTR [rcx+192] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+448] - vmovdqu ymm4, YMMWORD PTR [rcx+576] - vmovdqu ymm5, YMMWORD PTR [rcx+704] - vmovdqu ymm6, YMMWORD PTR [rcx+832] - vmovdqu ymm7, YMMWORD PTR [rcx+960] - ; 64: 3/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm6, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 3/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm4 - vpmuldq ymm4, ymm4, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm4, ymm4 - vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm5, ymm8 + vpaddd ymm5, ymm5, ymm8 + ; 8: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4032] + vmovdqu ymm12, YMMWORD PTR [rdx+4064] + vmovdqu ymm11, YMMWORD PTR [rdx+4096] + vmovdqu ymm13, YMMWORD PTR [rdx+4128] + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + vmovdqu ymm10, YMMWORD PTR [rdx+4160] + vmovdqu ymm12, YMMWORD PTR [rdx+4192] + vmovdqu ymm11, YMMWORD PTR [rdx+4224] + vmovdqu ymm13, YMMWORD PTR [rdx+4256] + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 - vpmuldq ymm6, ymm6, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+64], ymm0 - vmovdqu YMMWORD PTR [rcx+192], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+448], ymm3 - vmovdqu YMMWORD PTR [rcx+576], ymm4 - vmovdqu YMMWORD PTR [rcx+704], ymm5 - vmovdqu YMMWORD PTR [rcx+832], ymm6 - vmovdqu YMMWORD PTR [rcx+960], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] - vmovdqu ymm0, YMMWORD PTR [rcx+32] - vmovdqu ymm1, YMMWORD PTR [rcx+160] - vmovdqu ymm2, YMMWORD PTR [rcx+288] - vmovdqu ymm3, YMMWORD PTR [rcx+416] - vmovdqu ymm4, YMMWORD PTR [rcx+544] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+800] - vmovdqu ymm7, YMMWORD PTR [rcx+928] - ; 64: 2/4 - vpsubd ymm8, ymm0, ymm2 - vpaddd ymm0, ymm0, ymm2 - vpmulld ymm2, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm2 - vpmuldq ymm2, ymm2, ymm14 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 4: 4/4 + vperm2i128 ymm8, ymm0, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4288] + vperm2i128 ymm1, ymm0, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4320] + vperm2i128 ymm9, ymm2, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4352] + vperm2i128 ymm3, ymm2, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4384] + vpmulld ymm0, ymm1, ymm12 + vmovshdup ymm2, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm2, ymm8, ymm2 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm2, ymm2 - vpblendd ymm2, ymm2, ymm15, 170 - vpsubd ymm8, ymm1, ymm3 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm3, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm3 - vpmuldq ymm3, ymm3, ymm14 + vpsubq ymm0, ymm1, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm1, ymm8, ymm0 + vpaddd ymm8, ymm8, ymm0 + vpmulld ymm0, ymm3, ymm13 + vmovshdup ymm2, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm0 + vpmuldq ymm0, ymm0, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm3, ymm8, ymm3 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm3, ymm3 - vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vpsubq ymm0, ymm3, ymm0 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm0, ymm0 + vpblendd ymm0, ymm0, ymm15, 170 + vpsubd ymm3, ymm9, ymm0 + vpaddd ymm9, ymm9, ymm0 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4416] + vmovdqu ymm12, YMMWORD PTR [rdx+4448] + vmovdqu ymm11, YMMWORD PTR [rdx+4480] + vmovdqu ymm13, YMMWORD PTR [rdx+4512] + vpunpcklqdq ymm0, ymm8, ymm1 + vpunpckhqdq ymm1, ymm8, ymm1 + vpunpcklqdq ymm2, ymm9, ymm3 + vpunpckhqdq ymm3, ymm9, ymm3 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm5, ymm7 - vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 vpmuldq ymm9, ymm9, ymm11 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 2/4 - vpsubd ymm8, ymm0, ymm4 - vpaddd ymm0, ymm0, ymm4 - vpmulld ymm4, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 4: 4/4 + vperm2i128 ymm8, ymm4, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4544] + vperm2i128 ymm5, ymm4, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4576] + vperm2i128 ymm9, ymm6, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4608] + vperm2i128 ymm7, ymm6, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4640] + vpmulld ymm4, ymm5, ymm12 + vmovshdup ymm6, ymm5 + vpmuldq ymm5, ymm5, ymm10 + vpmuldq ymm6, ymm6, ymm10 vmovshdup ymm15, ymm4 vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm4, ymm8, ymm4 - vpsubq ymm15, ymm9, ymm15 + vpsubq ymm4, ymm5, ymm4 + vpsubq ymm15, ymm6, ymm15 vmovshdup ymm4, ymm4 vpblendd ymm4, ymm4, ymm15, 170 - vpsubd ymm8, ymm1, ymm5 - vpaddd ymm1, ymm1, ymm5 - vpmulld ymm5, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm5 - vpmuldq ymm5, ymm5, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm5, ymm8, ymm5 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm5, ymm5 - vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] - vpsubd ymm8, ymm2, ymm6 - vpaddd ymm2, ymm2, ymm6 - vpmulld ymm6, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 - vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm6 - vpmuldq ymm6, ymm6, ymm14 + vpsubd ymm5, ymm8, ymm4 + vpaddd ymm8, ymm8, ymm4 + vpmulld ymm4, ymm7, ymm13 + vmovshdup ymm6, ymm7 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm6, ymm8, ymm6 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm6, ymm6 - vpblendd ymm6, ymm6, ymm15, 170 - vpsubd ymm8, ymm3, ymm7 - vpaddd ymm3, ymm3, ymm7 - vpmulld ymm7, ymm8, ymm12 - vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm10 + vpsubq ymm4, ymm7, ymm4 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm7, ymm9, ymm4 + vpaddd ymm9, ymm9, ymm4 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4672] + vmovdqu ymm12, YMMWORD PTR [rdx+4704] + vmovdqu ymm11, YMMWORD PTR [rdx+4736] + vmovdqu ymm13, YMMWORD PTR [rdx+4768] + vpunpcklqdq ymm4, ymm8, ymm5 + vpunpckhqdq ymm5, ymm8, ymm5 + vpunpcklqdq ymm6, ymm9, ymm7 + vpunpckhqdq ymm7, ymm9, ymm7 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vpmuldq ymm9, ymm9, ymm10 - vmovshdup ymm15, ymm7 - vpmuldq ymm7, ymm7, ymm14 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm7, ymm8, ymm7 + vpsubq ymm8, ymm5, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm7, ymm7 - vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 + vpmuldq ymm7, ymm7, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4800] + vmovdqu ymm12, YMMWORD PTR [rdx+4832] + vmovdqu ymm11, YMMWORD PTR [rdx+4864] + vmovdqu ymm13, YMMWORD PTR [rdx+4896] + vpsllq ymm8, ymm1, 32 + vpsrlq ymm9, ymm0, 32 + vpblendd ymm0, ymm0, ymm8, 170 + vpblendd ymm1, ymm1, ymm9, 85 + vpsllq ymm8, ymm3, 32 + vpsrlq ymm9, ymm2, 32 + vpblendd ymm2, ymm2, ymm8, 170 + vpblendd ymm3, ymm3, ymm9, 85 + vpmulld ymm8, ymm1, ymm12 + vmovshdup ymm9, ymm1 + vpmuldq ymm1, ymm1, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 - vpmuldq ymm3, ymm3, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 + vpsubq ymm8, ymm1, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm1, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm8 + vpmulld ymm8, ymm3, ymm13 + vmovshdup ymm9, ymm3 + vpmuldq ymm3, ymm3, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm8, ymm3, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm3, ymm2, ymm8 + vpaddd ymm2, ymm2, ymm8 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4928] + vmovdqu ymm12, YMMWORD PTR [rdx+4960] + vmovdqu ymm11, YMMWORD PTR [rdx+4992] + vmovdqu ymm13, YMMWORD PTR [rdx+5024] + vpsllq ymm8, ymm5, 32 + vpsrlq ymm9, ymm4, 32 + vpblendd ymm4, ymm4, ymm8, 170 + vpblendd ymm5, ymm5, ymm9, 85 + vpsllq ymm8, ymm7, 32 + vpsrlq ymm9, ymm6, 32 + vpblendd ymm6, ymm6, ymm8, 170 + vpblendd ymm7, ymm7, ymm9, 85 + vpmulld ymm8, ymm5, ymm12 + vmovshdup ymm9, ymm5 + vpmuldq ymm5, ymm5, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 - vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm5, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm8, ymm8 + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm5, ymm4, ymm8 + vpaddd ymm4, ymm4, ymm8 + vpmulld ymm8, ymm7, ymm13 + vmovshdup ymm9, ymm7 vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 vmovshdup ymm15, ymm8 vpmuldq ymm8, ymm8, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm8, ymm7, ymm8 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx+32], ymm0 - vmovdqu YMMWORD PTR [rcx+160], ymm1 - vmovdqu YMMWORD PTR [rcx+288], ymm2 - vmovdqu YMMWORD PTR [rcx+416], ymm3 - vmovdqu YMMWORD PTR [rcx+544], ymm4 - vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+800], ymm6 - vmovdqu YMMWORD PTR [rcx+928], ymm7 - vmovdqu ymm10, YMMWORD PTR [rdx+4864] - vmovdqu ymm12, YMMWORD PTR [rdx+4896] - vmovdqu ymm11, YMMWORD PTR [rdx+4928] - vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vpblendd ymm8, ymm8, ymm15, 170 + vpsubd ymm7, ymm6, ymm8 + vpaddd ymm6, ymm6, ymm8 + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vperm2i128 ymm0, ymm8, ymm9, 32 + vperm2i128 ymm1, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vperm2i128 ymm2, ymm8, ymm9, 32 + vperm2i128 ymm3, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vperm2i128 ymm4, ymm8, ymm9, 32 + vperm2i128 ymm5, ymm8, ymm9, 49 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm6, ymm8, ymm9, 32 + vperm2i128 ymm7, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+864], ymm3 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_ntt_small_full_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_invntt_avx2 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vpxor ymm14, ymm14, ymm14 + vmovdqu ymm14, YMMWORD PTR mldsa_q + ; invntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas_inv] vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+128] - vmovdqu ymm2, YMMWORD PTR [rcx+256] - vmovdqu ymm3, YMMWORD PTR [rcx+384] - vmovdqu ymm4, YMMWORD PTR [rcx+512] - vmovdqu ymm5, YMMWORD PTR [rcx+640] - vmovdqu ymm6, YMMWORD PTR [rcx+768] - vmovdqu ymm7, YMMWORD PTR [rcx+896] - ; 64: 1/4 + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm11, YMMWORD PTR [rdx+64] + vmovdqu ymm13, YMMWORD PTR [rdx+96] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vmovdqu ymm11, YMMWORD PTR [rdx+192] + vmovdqu ymm13, YMMWORD PTR [rdx+224] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+256] + vmovdqu ymm12, YMMWORD PTR [rdx+288] + vmovdqu ymm11, YMMWORD PTR [rdx+320] + vmovdqu ymm13, YMMWORD PTR [rdx+352] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 1/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+384] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+416] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+448] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+480] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+512] + vmovdqu ymm12, YMMWORD PTR [rdx+544] vpsubd ymm8, ymm0, ymm2 vpaddd ymm0, ymm0, ymm2 vpmulld ymm2, ymm8, ymm12 @@ -10424,14 +9854,157 @@ wc_mldsa_invntt_full_avx2 PROC vpsubq ymm15, ymm9, ymm15 vmovshdup ymm3, ymm3 vpblendd ymm3, ymm3, ymm15, 170 - vmovdqu ymm10, YMMWORD PTR [rdx+4992] - vmovdqu ymm12, YMMWORD PTR [rdx+5024] - vpsubd ymm8, ymm4, ymm6 - vpaddd ymm4, ymm4, ymm6 - vpmulld ymm6, ymm8, ymm13 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+576] + vmovdqu ymm12, YMMWORD PTR [rdx+608] + vmovdqu ymm11, YMMWORD PTR [rdx+640] + vmovdqu ymm13, YMMWORD PTR [rdx+672] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+704] + vmovdqu ymm12, YMMWORD PTR [rdx+736] + vmovdqu ymm11, YMMWORD PTR [rdx+768] + vmovdqu ymm13, YMMWORD PTR [rdx+800] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+832] + vmovdqu ymm12, YMMWORD PTR [rdx+864] + vmovdqu ymm11, YMMWORD PTR [rdx+896] + vmovdqu ymm13, YMMWORD PTR [rdx+928] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 1/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+960] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+992] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1024] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1056] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 vmovshdup ymm9, ymm8 vpmuldq ymm8, ymm8, ymm11 vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1088] + vmovdqu ymm12, YMMWORD PTR [rdx+1120] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm6 vpmuldq ymm6, ymm6, ymm14 vpmuldq ymm15, ymm15, ymm14 @@ -10441,10 +10014,10 @@ wc_mldsa_invntt_full_avx2 PROC vpblendd ymm6, ymm6, ymm15, 170 vpsubd ymm8, ymm5, ymm7 vpaddd ymm5, ymm5, ymm7 - vpmulld ymm7, ymm8, ymm13 + vpmulld ymm7, ymm8, ymm12 vmovshdup ymm9, ymm8 - vpmuldq ymm8, ymm8, ymm11 - vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 vmovshdup ymm15, ymm7 vpmuldq ymm7, ymm7, ymm14 vpmuldq ymm15, ymm15, ymm14 @@ -10452,7 +10025,9 @@ wc_mldsa_invntt_full_avx2 PROC vpsubq ymm15, ymm9, ymm15 vmovshdup ymm7, ymm7 vpblendd ymm7, ymm7, ymm15, 170 - ; 128: 1/4 + ; 32: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1152] + vmovdqu ymm12, YMMWORD PTR [rdx+1184] vpsubd ymm8, ymm0, ymm4 vpaddd ymm0, ymm0, ymm4 vpmulld ymm4, ymm8, ymm12 @@ -10479,8 +10054,6 @@ wc_mldsa_invntt_full_avx2 PROC vpsubq ymm15, ymm9, ymm15 vmovshdup ymm5, ymm5 vpblendd ymm5, ymm5, ymm15, 170 - vmovdqu ymm11, YMMWORD PTR [rdx+5056] - vmovdqu ymm13, YMMWORD PTR [rdx+5088] vpsubd ymm8, ymm2, ymm6 vpaddd ymm2, ymm2, ymm6 vpmulld ymm6, ymm8, ymm12 @@ -10507,134 +10080,4803 @@ wc_mldsa_invntt_full_avx2 PROC vpsubq ymm15, ymm9, ymm15 vmovshdup ymm7, ymm7 vpblendd ymm7, ymm7, ymm15, 170 - vpmulld ymm8, ymm0, ymm13 - vpmulld ymm10, ymm1, ymm13 - vmovshdup ymm9, ymm0 - vmovshdup ymm12, ymm1 - vpmuldq ymm0, ymm0, ymm11 - vpmuldq ymm1, ymm1, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm0, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm1, ymm10 - vpsubq ymm9, ymm12, ymm9 - vmovshdup ymm8, ymm8 - vmovshdup ymm10, ymm10 - vpblendd ymm0, ymm8, ymm15, 170 - vpblendd ymm1, ymm10, ymm9, 170 - vpmulld ymm8, ymm2, ymm13 - vpmulld ymm10, ymm3, ymm13 - vmovshdup ymm9, ymm2 - vmovshdup ymm12, ymm3 - vpmuldq ymm2, ymm2, ymm11 - vpmuldq ymm3, ymm3, ymm11 - vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 - vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm2, ymm8 - vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm3, ymm10 - vpsubq ymm9, ymm12, ymm9 - vmovshdup ymm8, ymm8 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1216] + vmovdqu ymm12, YMMWORD PTR [rdx+1248] + vmovdqu ymm11, YMMWORD PTR [rdx+1280] + vmovdqu ymm13, YMMWORD PTR [rdx+1312] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm2, ymm8, ymm15, 170 - vpblendd ymm3, ymm10, ymm9, 170 - vpmulld ymm8, ymm4, ymm13 - vpmulld ymm10, ymm5, ymm13 - vmovshdup ymm9, ymm4 - vmovshdup ymm12, ymm5 - vpmuldq ymm4, ymm4, ymm11 - vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm4, ymm8 + vpsubq ymm3, ymm8, ymm3 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm5, ymm10 - vpsubq ymm9, ymm12, ymm9 - vmovshdup ymm8, ymm8 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1344] + vmovdqu ymm12, YMMWORD PTR [rdx+1376] + vmovdqu ymm11, YMMWORD PTR [rdx+1408] + vmovdqu ymm13, YMMWORD PTR [rdx+1440] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1472] + vmovdqu ymm12, YMMWORD PTR [rdx+1504] + vmovdqu ymm11, YMMWORD PTR [rdx+1536] + vmovdqu ymm13, YMMWORD PTR [rdx+1568] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 2/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+1600] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+1632] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1664] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1696] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1728] + vmovdqu ymm12, YMMWORD PTR [rdx+1760] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1792] + vmovdqu ymm12, YMMWORD PTR [rdx+1824] + vmovdqu ymm11, YMMWORD PTR [rdx+1856] + vmovdqu ymm13, YMMWORD PTR [rdx+1888] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm4, ymm8, ymm15, 170 - vpblendd ymm5, ymm10, ymm9, 170 - vpmulld ymm8, ymm6, ymm13 - vpmulld ymm10, ymm7, ymm13 - vmovshdup ymm9, ymm6 - vmovshdup ymm12, ymm7 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1920] + vmovdqu ymm12, YMMWORD PTR [rdx+1952] + vmovdqu ymm11, YMMWORD PTR [rdx+1984] + vmovdqu ymm13, YMMWORD PTR [rdx+2016] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2048] + vmovdqu ymm12, YMMWORD PTR [rdx+2080] + vmovdqu ymm11, YMMWORD PTR [rdx+2112] + vmovdqu ymm13, YMMWORD PTR [rdx+2144] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 vpmuldq ymm6, ymm6, ymm11 - vpmuldq ymm7, ymm7, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 2/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2176] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2208] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2240] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2272] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 vpmuldq ymm9, ymm9, ymm11 - vpmuldq ymm12, ymm12, ymm11 - vmovshdup ymm15, ymm8 - vpmuldq ymm8, ymm8, ymm14 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 vpmuldq ymm15, ymm15, ymm14 - vpsubq ymm8, ymm6, ymm8 + vpsubq ymm7, ymm8, ymm7 vpsubq ymm15, ymm9, ymm15 - vmovshdup ymm9, ymm10 - vpmuldq ymm10, ymm10, ymm14 - vpmuldq ymm9, ymm9, ymm14 - vpsubq ymm10, ymm7, ymm10 - vpsubq ymm9, ymm12, ymm9 - vmovshdup ymm8, ymm8 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2304] + vmovdqu ymm12, YMMWORD PTR [rdx+2336] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2368] + vmovdqu ymm12, YMMWORD PTR [rdx+2400] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2432] + vmovdqu ymm12, YMMWORD PTR [rdx+2464] + vmovdqu ymm11, YMMWORD PTR [rdx+2496] + vmovdqu ymm13, YMMWORD PTR [rdx+2528] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 vmovshdup ymm10, ymm10 - vpblendd ymm6, ymm8, ymm15, 170 - vpblendd ymm7, ymm10, ymm9, 170 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+128], ymm1 - vmovdqu YMMWORD PTR [rcx+256], ymm2 - vmovdqu YMMWORD PTR [rcx+384], ymm3 - vmovdqu YMMWORD PTR [rcx+512], ymm4 - vmovdqu YMMWORD PTR [rcx+640], ymm5 - vmovdqu YMMWORD PTR [rcx+768], ymm6 - vmovdqu YMMWORD PTR [rcx+896], ymm7 - vzeroupper - vmovdqu xmm6, OWORD PTR [rsp+8] - vmovdqu xmm7, OWORD PTR [rsp+24] - vmovdqu xmm8, OWORD PTR [rsp+40] - vmovdqu xmm9, OWORD PTR [rsp+56] - vmovdqu xmm10, OWORD PTR [rsp+72] - vmovdqu xmm11, OWORD PTR [rsp+88] - vmovdqu xmm12, OWORD PTR [rsp+104] - vmovdqu xmm13, OWORD PTR [rsp+120] - vmovdqu xmm14, OWORD PTR [rsp+136] - vmovdqu xmm15, OWORD PTR [rsp+152] - add rsp, 168 - ret -wc_mldsa_invntt_full_avx2 ENDP -_TEXT ENDS -_TEXT SEGMENT READONLY PARA -wc_mldsa_mul_avx2 PROC - sub rsp, 72 - vmovdqu OWORD PTR [rsp+8], xmm6 - vmovdqu OWORD PTR [rsp+24], xmm7 - vmovdqu OWORD PTR [rsp+40], xmm8 - vmovdqu OWORD PTR [rsp+56], xmm9 - vpxor ymm8, ymm8, ymm8 - vmovdqu ymm8, YMMWORD PTR mldsa_q - vmovdqu ymm9, YMMWORD PTR mldsa_qinv - ; 0..15 - vmovdqu ymm0, YMMWORD PTR [rdx] - vmovdqu ymm2, YMMWORD PTR [rdx+32] - vmovdqu ymm4, YMMWORD PTR [r8] - vmovdqu ymm6, YMMWORD PTR [r8+32] - vpshufd ymm1, ymm0, 245 - vpshufd ymm3, ymm2, 245 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2560] + vmovdqu ymm12, YMMWORD PTR [rdx+2592] + vmovdqu ymm11, YMMWORD PTR [rdx+2624] + vmovdqu ymm13, YMMWORD PTR [rdx+2656] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2688] + vmovdqu ymm12, YMMWORD PTR [rdx+2720] + vmovdqu ymm11, YMMWORD PTR [rdx+2752] + vmovdqu ymm13, YMMWORD PTR [rdx+2784] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 3/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2816] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2848] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2880] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2912] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2944] + vmovdqu ymm12, YMMWORD PTR [rdx+2976] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3008] + vmovdqu ymm12, YMMWORD PTR [rdx+3040] + vmovdqu ymm11, YMMWORD PTR [rdx+3072] + vmovdqu ymm13, YMMWORD PTR [rdx+3104] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3136] + vmovdqu ymm12, YMMWORD PTR [rdx+3168] + vmovdqu ymm11, YMMWORD PTR [rdx+3200] + vmovdqu ymm13, YMMWORD PTR [rdx+3232] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3264] + vmovdqu ymm12, YMMWORD PTR [rdx+3296] + vmovdqu ymm11, YMMWORD PTR [rdx+3328] + vmovdqu ymm13, YMMWORD PTR [rdx+3360] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 3/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3392] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3424] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3456] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3488] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3520] + vmovdqu ymm12, YMMWORD PTR [rdx+3552] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3584] + vmovdqu ymm12, YMMWORD PTR [rdx+3616] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3648] + vmovdqu ymm12, YMMWORD PTR [rdx+3680] + vmovdqu ymm11, YMMWORD PTR [rdx+3712] + vmovdqu ymm13, YMMWORD PTR [rdx+3744] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3776] + vmovdqu ymm12, YMMWORD PTR [rdx+3808] + vmovdqu ymm11, YMMWORD PTR [rdx+3840] + vmovdqu ymm13, YMMWORD PTR [rdx+3872] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3904] + vmovdqu ymm12, YMMWORD PTR [rdx+3936] + vmovdqu ymm11, YMMWORD PTR [rdx+3968] + vmovdqu ymm13, YMMWORD PTR [rdx+4000] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 4/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4032] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4064] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4096] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4128] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4160] + vmovdqu ymm12, YMMWORD PTR [rdx+4192] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4224] + vmovdqu ymm12, YMMWORD PTR [rdx+4256] + vmovdqu ymm11, YMMWORD PTR [rdx+4288] + vmovdqu ymm13, YMMWORD PTR [rdx+4320] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4352] + vmovdqu ymm12, YMMWORD PTR [rdx+4384] + vmovdqu ymm11, YMMWORD PTR [rdx+4416] + vmovdqu ymm13, YMMWORD PTR [rdx+4448] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4480] + vmovdqu ymm12, YMMWORD PTR [rdx+4512] + vmovdqu ymm11, YMMWORD PTR [rdx+4544] + vmovdqu ymm13, YMMWORD PTR [rdx+4576] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 4/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4608] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4640] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4672] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4704] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4736] + vmovdqu ymm12, YMMWORD PTR [rdx+4768] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4800] + vmovdqu ymm12, YMMWORD PTR [rdx+4832] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm6, ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+96] + vmovdqu ymm1, YMMWORD PTR [rcx+224] + vmovdqu ymm2, YMMWORD PTR [rcx+352] + vmovdqu ymm3, YMMWORD PTR [rcx+480] + vmovdqu ymm4, YMMWORD PTR [rcx+608] + vmovdqu ymm5, YMMWORD PTR [rcx+736] + ; 64: 4/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 4/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+96], ymm0 + vmovdqu YMMWORD PTR [rcx+224], ymm1 + vmovdqu YMMWORD PTR [rcx+352], ymm2 + vmovdqu YMMWORD PTR [rcx+480], ymm3 + vmovdqu YMMWORD PTR [rcx+608], ymm4 + vmovdqu YMMWORD PTR [rcx+736], ymm5 + vmovdqu YMMWORD PTR [rcx+864], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx+64] + vmovdqu ymm1, YMMWORD PTR [rcx+192] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+448] + vmovdqu ymm4, YMMWORD PTR [rcx+576] + vmovdqu ymm5, YMMWORD PTR [rcx+704] + vmovdqu ymm6, YMMWORD PTR [rcx+832] + vmovdqu ymm7, YMMWORD PTR [rcx+960] + ; 64: 3/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 3/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+64], ymm0 + vmovdqu YMMWORD PTR [rcx+192], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+448], ymm3 + vmovdqu YMMWORD PTR [rcx+576], ymm4 + vmovdqu YMMWORD PTR [rcx+704], ymm5 + vmovdqu YMMWORD PTR [rcx+832], ymm6 + vmovdqu YMMWORD PTR [rcx+960], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx+32] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vmovdqu ymm2, YMMWORD PTR [rcx+288] + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vmovdqu ymm4, YMMWORD PTR [rcx+544] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+800] + vmovdqu ymm7, YMMWORD PTR [rcx+928] + ; 64: 2/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 2/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+32], ymm0 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vmovdqu YMMWORD PTR [rcx+288], ymm2 + vmovdqu YMMWORD PTR [rcx+416], ymm3 + vmovdqu YMMWORD PTR [rcx+544], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+800], ymm6 + vmovdqu YMMWORD PTR [rcx+928], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+128] + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vmovdqu ymm3, YMMWORD PTR [rcx+384] + vmovdqu ymm4, YMMWORD PTR [rcx+512] + vmovdqu ymm5, YMMWORD PTR [rcx+640] + vmovdqu ymm6, YMMWORD PTR [rcx+768] + vmovdqu ymm7, YMMWORD PTR [rcx+896] + ; 64: 1/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 1/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+128], ymm1 + vmovdqu YMMWORD PTR [rcx+256], ymm2 + vmovdqu YMMWORD PTR [rcx+384], ymm3 + vmovdqu YMMWORD PTR [rcx+512], ymm4 + vmovdqu YMMWORD PTR [rcx+640], ymm5 + vmovdqu YMMWORD PTR [rcx+768], ymm6 + vmovdqu YMMWORD PTR [rcx+896], ymm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_invntt_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_invntt_full_avx2 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vpxor ymm14, ymm14, ymm14 + vmovdqu ymm14, YMMWORD PTR mldsa_q + ; invntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx2_zetas_inv] + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpermq ymm0, ymm0, 216 + vpermq ymm1, ymm1, 216 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpermq ymm2, ymm2, 216 + vpermq ymm3, ymm3, 216 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx] + vmovdqu ymm12, YMMWORD PTR [rdx+32] + vmovdqu ymm11, YMMWORD PTR [rdx+64] + vmovdqu ymm13, YMMWORD PTR [rdx+96] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+128] + vmovdqu ymm12, YMMWORD PTR [rdx+160] + vmovdqu ymm11, YMMWORD PTR [rdx+192] + vmovdqu ymm13, YMMWORD PTR [rdx+224] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+256] + vmovdqu ymm12, YMMWORD PTR [rdx+288] + vmovdqu ymm11, YMMWORD PTR [rdx+320] + vmovdqu ymm13, YMMWORD PTR [rdx+352] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 1/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+384] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+416] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+448] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+480] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+512] + vmovdqu ymm12, YMMWORD PTR [rdx+544] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpermq ymm4, ymm4, 216 + vpermq ymm5, ymm5, 216 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpermq ymm6, ymm6, 216 + vpermq ymm7, ymm7, 216 + ; 1: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+576] + vmovdqu ymm12, YMMWORD PTR [rdx+608] + vmovdqu ymm11, YMMWORD PTR [rdx+640] + vmovdqu ymm13, YMMWORD PTR [rdx+672] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+704] + vmovdqu ymm12, YMMWORD PTR [rdx+736] + vmovdqu ymm11, YMMWORD PTR [rdx+768] + vmovdqu ymm13, YMMWORD PTR [rdx+800] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+832] + vmovdqu ymm12, YMMWORD PTR [rdx+864] + vmovdqu ymm11, YMMWORD PTR [rdx+896] + vmovdqu ymm13, YMMWORD PTR [rdx+928] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 1/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+960] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+992] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1024] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1056] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1088] + vmovdqu ymm12, YMMWORD PTR [rdx+1120] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 1/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1152] + vmovdqu ymm12, YMMWORD PTR [rdx+1184] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpermq ymm0, ymm0, 216 + vpermq ymm1, ymm1, 216 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpermq ymm2, ymm2, 216 + vpermq ymm3, ymm3, 216 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1216] + vmovdqu ymm12, YMMWORD PTR [rdx+1248] + vmovdqu ymm11, YMMWORD PTR [rdx+1280] + vmovdqu ymm13, YMMWORD PTR [rdx+1312] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1344] + vmovdqu ymm12, YMMWORD PTR [rdx+1376] + vmovdqu ymm11, YMMWORD PTR [rdx+1408] + vmovdqu ymm13, YMMWORD PTR [rdx+1440] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1472] + vmovdqu ymm12, YMMWORD PTR [rdx+1504] + vmovdqu ymm11, YMMWORD PTR [rdx+1536] + vmovdqu ymm13, YMMWORD PTR [rdx+1568] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 2/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+1600] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+1632] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+1664] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+1696] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1728] + vmovdqu ymm12, YMMWORD PTR [rdx+1760] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpermq ymm4, ymm4, 216 + vpermq ymm5, ymm5, 216 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpermq ymm6, ymm6, 216 + vpermq ymm7, ymm7, 216 + ; 1: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1792] + vmovdqu ymm12, YMMWORD PTR [rdx+1824] + vmovdqu ymm11, YMMWORD PTR [rdx+1856] + vmovdqu ymm13, YMMWORD PTR [rdx+1888] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+1920] + vmovdqu ymm12, YMMWORD PTR [rdx+1952] + vmovdqu ymm11, YMMWORD PTR [rdx+1984] + vmovdqu ymm13, YMMWORD PTR [rdx+2016] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2048] + vmovdqu ymm12, YMMWORD PTR [rdx+2080] + vmovdqu ymm11, YMMWORD PTR [rdx+2112] + vmovdqu ymm13, YMMWORD PTR [rdx+2144] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 2/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2176] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2208] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2240] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2272] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2304] + vmovdqu ymm12, YMMWORD PTR [rdx+2336] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 2/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2368] + vmovdqu ymm12, YMMWORD PTR [rdx+2400] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpermq ymm0, ymm0, 216 + vpermq ymm1, ymm1, 216 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpermq ymm2, ymm2, 216 + vpermq ymm3, ymm3, 216 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2432] + vmovdqu ymm12, YMMWORD PTR [rdx+2464] + vmovdqu ymm11, YMMWORD PTR [rdx+2496] + vmovdqu ymm13, YMMWORD PTR [rdx+2528] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2560] + vmovdqu ymm12, YMMWORD PTR [rdx+2592] + vmovdqu ymm11, YMMWORD PTR [rdx+2624] + vmovdqu ymm13, YMMWORD PTR [rdx+2656] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2688] + vmovdqu ymm12, YMMWORD PTR [rdx+2720] + vmovdqu ymm11, YMMWORD PTR [rdx+2752] + vmovdqu ymm13, YMMWORD PTR [rdx+2784] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 3/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+2816] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+2848] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+2880] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+2912] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+2944] + vmovdqu ymm12, YMMWORD PTR [rdx+2976] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpermq ymm4, ymm4, 216 + vpermq ymm5, ymm5, 216 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpermq ymm6, ymm6, 216 + vpermq ymm7, ymm7, 216 + ; 1: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3008] + vmovdqu ymm12, YMMWORD PTR [rdx+3040] + vmovdqu ymm11, YMMWORD PTR [rdx+3072] + vmovdqu ymm13, YMMWORD PTR [rdx+3104] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3136] + vmovdqu ymm12, YMMWORD PTR [rdx+3168] + vmovdqu ymm11, YMMWORD PTR [rdx+3200] + vmovdqu ymm13, YMMWORD PTR [rdx+3232] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3264] + vmovdqu ymm12, YMMWORD PTR [rdx+3296] + vmovdqu ymm11, YMMWORD PTR [rdx+3328] + vmovdqu ymm13, YMMWORD PTR [rdx+3360] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 3/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+3392] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+3424] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+3456] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+3488] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3520] + vmovdqu ymm12, YMMWORD PTR [rdx+3552] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 3/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3584] + vmovdqu ymm12, YMMWORD PTR [rdx+3616] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + vpunpckldq ymm8, ymm0, ymm1 + vpunpckhdq ymm9, ymm0, ymm1 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpermq ymm0, ymm0, 216 + vpermq ymm1, ymm1, 216 + vpunpckldq ymm8, ymm2, ymm3 + vpunpckhdq ymm9, ymm2, ymm3 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpermq ymm2, ymm2, 216 + vpermq ymm3, ymm3, 216 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3648] + vmovdqu ymm12, YMMWORD PTR [rdx+3680] + vmovdqu ymm11, YMMWORD PTR [rdx+3712] + vmovdqu ymm13, YMMWORD PTR [rdx+3744] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3776] + vmovdqu ymm12, YMMWORD PTR [rdx+3808] + vmovdqu ymm11, YMMWORD PTR [rdx+3840] + vmovdqu ymm13, YMMWORD PTR [rdx+3872] + vpshufd ymm8, ymm0, 216 + vpshufd ymm9, ymm1, 216 + vpunpckldq ymm0, ymm8, ymm9 + vpunpckhdq ymm1, ymm8, ymm9 + vpshufd ymm8, ymm2, 216 + vpshufd ymm9, ymm3, 216 + vpunpckldq ymm2, ymm8, ymm9 + vpunpckhdq ymm3, ymm8, ymm9 + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 4: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+3904] + vmovdqu ymm12, YMMWORD PTR [rdx+3936] + vmovdqu ymm11, YMMWORD PTR [rdx+3968] + vmovdqu ymm13, YMMWORD PTR [rdx+4000] + vpunpcklqdq ymm8, ymm0, ymm1 + vpunpckhqdq ymm1, ymm0, ymm1 + vpunpcklqdq ymm9, ymm2, ymm3 + vpunpckhqdq ymm3, ymm2, ymm3 + vpsubd ymm0, ymm8, ymm1 + vpaddd ymm8, ymm8, ymm1 + vpmulld ymm1, ymm0, ymm12 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm10 + vpmuldq ymm2, ymm2, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm0, ymm1 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm0, ymm9, ymm3 + vpaddd ymm9, ymm9, ymm3 + vpmulld ymm3, ymm0, ymm13 + vmovshdup ymm2, ymm0 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm2, ymm2, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm0, ymm3 + vpsubq ymm15, ymm2, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 8: 4/4 + vperm2i128 ymm0, ymm8, ymm1, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4032] + vperm2i128 ymm1, ymm8, ymm1, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4064] + vperm2i128 ymm2, ymm9, ymm3, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4096] + vperm2i128 ymm3, ymm9, ymm3, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4128] + vpsubd ymm8, ymm0, ymm1 + vpaddd ymm0, ymm0, ymm1 + vpmulld ymm1, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm1 + vpmuldq ymm1, ymm1, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm1, ymm8, ymm1 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm1, ymm1 + vpblendd ymm1, ymm1, ymm15, 170 + vpsubd ymm8, ymm2, ymm3 + vpaddd ymm2, ymm2, ymm3 + vpmulld ymm3, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4160] + vmovdqu ymm12, YMMWORD PTR [rdx+4192] + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vpunpckldq ymm8, ymm4, ymm5 + vpunpckhdq ymm9, ymm4, ymm5 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpermq ymm4, ymm4, 216 + vpermq ymm5, ymm5, 216 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpermq ymm6, ymm6, 216 + vpermq ymm7, ymm7, 216 + ; 1: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4224] + vmovdqu ymm12, YMMWORD PTR [rdx+4256] + vmovdqu ymm11, YMMWORD PTR [rdx+4288] + vmovdqu ymm13, YMMWORD PTR [rdx+4320] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vmovshdup ymm10, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vmovshdup ymm11, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 2: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4352] + vmovdqu ymm12, YMMWORD PTR [rdx+4384] + vmovdqu ymm11, YMMWORD PTR [rdx+4416] + vmovdqu ymm13, YMMWORD PTR [rdx+4448] + vpshufd ymm8, ymm4, 216 + vpshufd ymm9, ymm5, 216 + vpunpckldq ymm4, ymm8, ymm9 + vpunpckhdq ymm5, ymm8, ymm9 + vpshufd ymm8, ymm6, 216 + vpshufd ymm9, ymm7, 216 + vpunpckldq ymm6, ymm8, ymm9 + vpunpckhdq ymm7, ymm8, ymm9 + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 4: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4480] + vmovdqu ymm12, YMMWORD PTR [rdx+4512] + vmovdqu ymm11, YMMWORD PTR [rdx+4544] + vmovdqu ymm13, YMMWORD PTR [rdx+4576] + vpunpcklqdq ymm8, ymm4, ymm5 + vpunpckhqdq ymm5, ymm4, ymm5 + vpunpcklqdq ymm9, ymm6, ymm7 + vpunpckhqdq ymm7, ymm6, ymm7 + vpsubd ymm4, ymm8, ymm5 + vpaddd ymm8, ymm8, ymm5 + vpmulld ymm5, ymm4, ymm12 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm10 + vpmuldq ymm6, ymm6, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm4, ymm5 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm4, ymm9, ymm7 + vpaddd ymm9, ymm9, ymm7 + vpmulld ymm7, ymm4, ymm13 + vmovshdup ymm6, ymm4 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm6, ymm6, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm4, ymm7 + vpsubq ymm15, ymm6, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 8: 4/4 + vperm2i128 ymm4, ymm8, ymm5, 32 + vmovdqu ymm10, YMMWORD PTR [rdx+4608] + vperm2i128 ymm5, ymm8, ymm5, 49 + vmovdqu ymm12, YMMWORD PTR [rdx+4640] + vperm2i128 ymm6, ymm9, ymm7, 32 + vmovdqu ymm11, YMMWORD PTR [rdx+4672] + vperm2i128 ymm7, ymm9, ymm7, 49 + vmovdqu ymm13, YMMWORD PTR [rdx+4704] + vpsubd ymm8, ymm4, ymm5 + vpaddd ymm4, ymm4, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm6, ymm7 + vpaddd ymm6, ymm6, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 16: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4736] + vmovdqu ymm12, YMMWORD PTR [rdx+4768] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 32: 4/4 + vmovdqu ymm10, YMMWORD PTR [rdx+4800] + vmovdqu ymm12, YMMWORD PTR [rdx+4832] + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm6, ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+96] + vmovdqu ymm1, YMMWORD PTR [rcx+224] + vmovdqu ymm2, YMMWORD PTR [rcx+352] + vmovdqu ymm3, YMMWORD PTR [rcx+480] + vmovdqu ymm4, YMMWORD PTR [rcx+608] + vmovdqu ymm5, YMMWORD PTR [rcx+736] + ; 64: 4/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 4/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+96], ymm0 + vmovdqu YMMWORD PTR [rcx+224], ymm1 + vmovdqu YMMWORD PTR [rcx+352], ymm2 + vmovdqu YMMWORD PTR [rcx+480], ymm3 + vmovdqu YMMWORD PTR [rcx+608], ymm4 + vmovdqu YMMWORD PTR [rcx+736], ymm5 + vmovdqu YMMWORD PTR [rcx+864], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx+64] + vmovdqu ymm1, YMMWORD PTR [rcx+192] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+448] + vmovdqu ymm4, YMMWORD PTR [rcx+576] + vmovdqu ymm5, YMMWORD PTR [rcx+704] + vmovdqu ymm6, YMMWORD PTR [rcx+832] + vmovdqu ymm7, YMMWORD PTR [rcx+960] + ; 64: 3/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 3/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+64], ymm0 + vmovdqu YMMWORD PTR [rcx+192], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+448], ymm3 + vmovdqu YMMWORD PTR [rcx+576], ymm4 + vmovdqu YMMWORD PTR [rcx+704], ymm5 + vmovdqu YMMWORD PTR [rcx+832], ymm6 + vmovdqu YMMWORD PTR [rcx+960], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx+32] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vmovdqu ymm2, YMMWORD PTR [rcx+288] + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vmovdqu ymm4, YMMWORD PTR [rcx+544] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+800] + vmovdqu ymm7, YMMWORD PTR [rcx+928] + ; 64: 2/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 2/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx+32], ymm0 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vmovdqu YMMWORD PTR [rcx+288], ymm2 + vmovdqu YMMWORD PTR [rcx+416], ymm3 + vmovdqu YMMWORD PTR [rcx+544], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+800], ymm6 + vmovdqu YMMWORD PTR [rcx+928], ymm7 + vmovdqu ymm10, YMMWORD PTR [rdx+4864] + vmovdqu ymm12, YMMWORD PTR [rdx+4896] + vmovdqu ymm11, YMMWORD PTR [rdx+4928] + vmovdqu ymm13, YMMWORD PTR [rdx+4960] + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+128] + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vmovdqu ymm3, YMMWORD PTR [rcx+384] + vmovdqu ymm4, YMMWORD PTR [rcx+512] + vmovdqu ymm5, YMMWORD PTR [rcx+640] + vmovdqu ymm6, YMMWORD PTR [rcx+768] + vmovdqu ymm7, YMMWORD PTR [rcx+896] + ; 64: 1/4 + vpsubd ymm8, ymm0, ymm2 + vpaddd ymm0, ymm0, ymm2 + vpmulld ymm2, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm2 + vpmuldq ymm2, ymm2, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm2, ymm8, ymm2 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm2, ymm2 + vpblendd ymm2, ymm2, ymm15, 170 + vpsubd ymm8, ymm1, ymm3 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm3, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm3 + vpmuldq ymm3, ymm3, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm3, ymm8, ymm3 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm3, ymm3 + vpblendd ymm3, ymm3, ymm15, 170 + vmovdqu ymm10, YMMWORD PTR [rdx+4992] + vmovdqu ymm12, YMMWORD PTR [rdx+5024] + vpsubd ymm8, ymm4, ymm6 + vpaddd ymm4, ymm4, ymm6 + vpmulld ymm6, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm5, ymm7 + vpaddd ymm5, ymm5, ymm7 + vpmulld ymm7, ymm8, ymm13 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + ; 128: 1/4 + vpsubd ymm8, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm4 + vpmulld ymm4, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm4 + vpmuldq ymm4, ymm4, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm4, ymm8, ymm4 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm4, ymm4 + vpblendd ymm4, ymm4, ymm15, 170 + vpsubd ymm8, ymm1, ymm5 + vpaddd ymm1, ymm1, ymm5 + vpmulld ymm5, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm5 + vpmuldq ymm5, ymm5, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm5, ymm8, ymm5 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm5, ymm5 + vpblendd ymm5, ymm5, ymm15, 170 + vmovdqu ymm11, YMMWORD PTR [rdx+5056] + vmovdqu ymm13, YMMWORD PTR [rdx+5088] + vpsubd ymm8, ymm2, ymm6 + vpaddd ymm2, ymm2, ymm6 + vpmulld ymm6, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm6 + vpmuldq ymm6, ymm6, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm6, ymm8, ymm6 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm6, ymm6 + vpblendd ymm6, ymm6, ymm15, 170 + vpsubd ymm8, ymm3, ymm7 + vpaddd ymm3, ymm3, ymm7 + vpmulld ymm7, ymm8, ymm12 + vmovshdup ymm9, ymm8 + vpmuldq ymm8, ymm8, ymm10 + vpmuldq ymm9, ymm9, ymm10 + vmovshdup ymm15, ymm7 + vpmuldq ymm7, ymm7, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm7, ymm8, ymm7 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm7, ymm7 + vpblendd ymm7, ymm7, ymm15, 170 + vpmulld ymm8, ymm0, ymm13 + vpmulld ymm10, ymm1, ymm13 + vmovshdup ymm9, ymm0 + vmovshdup ymm12, ymm1 + vpmuldq ymm0, ymm0, ymm11 + vpmuldq ymm1, ymm1, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm0, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm1, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm0, ymm8, ymm15, 170 + vpblendd ymm1, ymm10, ymm9, 170 + vpmulld ymm8, ymm2, ymm13 + vpmulld ymm10, ymm3, ymm13 + vmovshdup ymm9, ymm2 + vmovshdup ymm12, ymm3 + vpmuldq ymm2, ymm2, ymm11 + vpmuldq ymm3, ymm3, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm2, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm3, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm2, ymm8, ymm15, 170 + vpblendd ymm3, ymm10, ymm9, 170 + vpmulld ymm8, ymm4, ymm13 + vpmulld ymm10, ymm5, ymm13 + vmovshdup ymm9, ymm4 + vmovshdup ymm12, ymm5 + vpmuldq ymm4, ymm4, ymm11 + vpmuldq ymm5, ymm5, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm4, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm5, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm4, ymm8, ymm15, 170 + vpblendd ymm5, ymm10, ymm9, 170 + vpmulld ymm8, ymm6, ymm13 + vpmulld ymm10, ymm7, ymm13 + vmovshdup ymm9, ymm6 + vmovshdup ymm12, ymm7 + vpmuldq ymm6, ymm6, ymm11 + vpmuldq ymm7, ymm7, ymm11 + vpmuldq ymm9, ymm9, ymm11 + vpmuldq ymm12, ymm12, ymm11 + vmovshdup ymm15, ymm8 + vpmuldq ymm8, ymm8, ymm14 + vpmuldq ymm15, ymm15, ymm14 + vpsubq ymm8, ymm6, ymm8 + vpsubq ymm15, ymm9, ymm15 + vmovshdup ymm9, ymm10 + vpmuldq ymm10, ymm10, ymm14 + vpmuldq ymm9, ymm9, ymm14 + vpsubq ymm10, ymm7, ymm10 + vpsubq ymm9, ymm12, ymm9 + vmovshdup ymm8, ymm8 + vmovshdup ymm10, ymm10 + vpblendd ymm6, ymm8, ymm15, 170 + vpblendd ymm7, ymm10, ymm9, 170 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+128], ymm1 + vmovdqu YMMWORD PTR [rcx+256], ymm2 + vmovdqu YMMWORD PTR [rcx+384], ymm3 + vmovdqu YMMWORD PTR [rcx+512], ymm4 + vmovdqu YMMWORD PTR [rcx+640], ymm5 + vmovdqu YMMWORD PTR [rcx+768], ymm6 + vmovdqu YMMWORD PTR [rcx+896], ymm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_invntt_full_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_mul_avx2 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vpxor ymm8, ymm8, ymm8 + vmovdqu ymm8, YMMWORD PTR mldsa_q + vmovdqu ymm9, YMMWORD PTR mldsa_qinv + ; 0..15 + vmovdqu ymm0, YMMWORD PTR [rdx] + vmovdqu ymm2, YMMWORD PTR [rdx+32] + vmovdqu ymm4, YMMWORD PTR [r8] + vmovdqu ymm6, YMMWORD PTR [r8+32] + vpshufd ymm1, ymm0, 245 + vpshufd ymm3, ymm2, 245 vpshufd ymm5, ymm4, 245 vpshufd ymm7, ymm6, 245 vpmuldq ymm0, ymm0, ymm4 @@ -17289,11 +21531,11 @@ wc_mldsa_rej_uniform_avx2 PROC mov eax, r8d cmp r8d, 0 je L_mldsa_rej_uniform_avx2_done_64 - cmp r10d, 8 - jl L_mldsa_rej_uniform_avx2_done_64 mov rdi, 72057589759737855 mov r15, 36028792732385279 L_mldsa_rej_uniform_avx2_start_64: + cmp r10d, 8 + jl L_mldsa_rej_uniform_avx2_done_64 mov rcx, QWORD PTR [r9] pdep rcx, rcx, rdi and rcx, r15 @@ -17315,6 +21557,8 @@ L_mldsa_rej_uniform_avx2_rej_large_1: add r9, 6 sub r10d, 6 jle L_mldsa_rej_uniform_avx2_done_64 + cmp r8d, 0 + jg L_mldsa_rej_uniform_avx2_start_64 L_mldsa_rej_uniform_avx2_done_64: sub eax, r8d pop rdi @@ -22533,7 +26777,6 @@ wc_mldsa_decode_t0_avx2 PROC vmovdqu YMMWORD PTR [rdx+896], ymm4 ; 30/32 vmovdqu ymm0, YMMWORD PTR [rcx+384] - vmovdqu ymm1, YMMWORD PTR [rcx+416] vperm2i128 ymm3, ymm3, ymm0, 33 vpermq ymm4, ymm3, 153 vpshufb ymm4, ymm4, ymm10 @@ -27298,19 +31541,3977 @@ wc_mldsa_use_hint_88_avx2 PROC mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_0: +L_mldsa_use_hint_88_avx2_hints_next_0_0: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + mov cl, r10b + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_0 +L_mldsa_use_hint_88_avx2_hints_done_0_0: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx], ymm4 + vmovdqu YMMWORD PTR [rdx+32], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+64] + vmovdqu ymm1, YMMWORD PTR [rdx+96] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_1: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + mov cl, r10b + sub cl, 16 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_1 +L_mldsa_use_hint_88_avx2_hints_done_0_1: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+64], ymm4 + vmovdqu YMMWORD PTR [rdx+96], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+128] + vmovdqu ymm1, YMMWORD PTR [rdx+160] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_2: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + mov cl, r10b + sub cl, 32 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_2 +L_mldsa_use_hint_88_avx2_hints_done_0_2: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+128], ymm4 + vmovdqu YMMWORD PTR [rdx+160], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+192] + vmovdqu ymm1, YMMWORD PTR [rdx+224] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_3: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + mov cl, r10b + sub cl, 48 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_3 +L_mldsa_use_hint_88_avx2_hints_done_0_3: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+192], ymm4 + vmovdqu YMMWORD PTR [rdx+224], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+256] + vmovdqu ymm1, YMMWORD PTR [rdx+288] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_4 +L_mldsa_use_hint_88_avx2_hints_done_0_4: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+256], ymm4 + vmovdqu YMMWORD PTR [rdx+288], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+320] + vmovdqu ymm1, YMMWORD PTR [rdx+352] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_5 +L_mldsa_use_hint_88_avx2_hints_done_0_5: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+320], ymm4 + vmovdqu YMMWORD PTR [rdx+352], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+384] + vmovdqu ymm1, YMMWORD PTR [rdx+416] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_6 +L_mldsa_use_hint_88_avx2_hints_done_0_6: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+384], ymm4 + vmovdqu YMMWORD PTR [rdx+416], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+448] + vmovdqu ymm1, YMMWORD PTR [rdx+480] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_7: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + mov cl, r10b + sub cl, 112 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_7 +L_mldsa_use_hint_88_avx2_hints_done_0_7: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+448], ymm4 + vmovdqu YMMWORD PTR [rdx+480], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+512] + vmovdqu ymm1, YMMWORD PTR [rdx+544] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_8: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + mov cl, r10b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_8 +L_mldsa_use_hint_88_avx2_hints_done_0_8: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+512], ymm4 + vmovdqu YMMWORD PTR [rdx+544], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+576] + vmovdqu ymm1, YMMWORD PTR [rdx+608] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_9 +L_mldsa_use_hint_88_avx2_hints_done_0_9: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+576], ymm4 + vmovdqu YMMWORD PTR [rdx+608], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+640] + vmovdqu ymm1, YMMWORD PTR [rdx+672] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_10 +L_mldsa_use_hint_88_avx2_hints_done_0_10: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+640], ymm4 + vmovdqu YMMWORD PTR [rdx+672], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+704] + vmovdqu ymm1, YMMWORD PTR [rdx+736] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_11 +L_mldsa_use_hint_88_avx2_hints_done_0_11: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+704], ymm4 + vmovdqu YMMWORD PTR [rdx+736], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+768] + vmovdqu ymm1, YMMWORD PTR [rdx+800] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_12 +L_mldsa_use_hint_88_avx2_hints_done_0_12: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+768], ymm4 + vmovdqu YMMWORD PTR [rdx+800], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+832] + vmovdqu ymm1, YMMWORD PTR [rdx+864] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_13: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + mov cl, r10b + sub cl, 208 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_13 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_13 +L_mldsa_use_hint_88_avx2_hints_done_0_13: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+832], ymm4 + vmovdqu YMMWORD PTR [rdx+864], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+896] + vmovdqu ymm1, YMMWORD PTR [rdx+928] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_14: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_14 + mov cl, r10b + sub cl, 224 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_14 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_14 +L_mldsa_use_hint_88_avx2_hints_done_0_14: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+896], ymm4 + vmovdqu YMMWORD PTR [rdx+928], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+960] + vmovdqu ymm1, YMMWORD PTR [rdx+992] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_0_15: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_0_15 + mov cl, r10b + sub cl, 240 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_0_15 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_0_15 +L_mldsa_use_hint_88_avx2_hints_done_0_15: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+960], ymm4 + vmovdqu YMMWORD PTR [rdx+992], ymm5 + ; 2/4 vectors + mov r8b, [rax+81] + vmovdqu ymm0, YMMWORD PTR [rdx+1024] + vmovdqu ymm1, YMMWORD PTR [rdx+1056] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_0: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_0 + mov cl, r10b + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_0 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_0 +L_mldsa_use_hint_88_avx2_hints_done_1_0: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1024], ymm4 + vmovdqu YMMWORD PTR [rdx+1056], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1088] + vmovdqu ymm1, YMMWORD PTR [rdx+1120] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_1: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_1 + mov cl, r10b + sub cl, 16 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_1 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_1 +L_mldsa_use_hint_88_avx2_hints_done_1_1: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1088], ymm4 + vmovdqu YMMWORD PTR [rdx+1120], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1152] + vmovdqu ymm1, YMMWORD PTR [rdx+1184] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_2: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_2 + mov cl, r10b + sub cl, 32 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_2 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_2 +L_mldsa_use_hint_88_avx2_hints_done_1_2: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1152], ymm4 + vmovdqu YMMWORD PTR [rdx+1184], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1216] + vmovdqu ymm1, YMMWORD PTR [rdx+1248] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_3: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_3 + mov cl, r10b + sub cl, 48 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_3 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_3 +L_mldsa_use_hint_88_avx2_hints_done_1_3: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1216], ymm4 + vmovdqu YMMWORD PTR [rdx+1248], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1280] + vmovdqu ymm1, YMMWORD PTR [rdx+1312] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_4 +L_mldsa_use_hint_88_avx2_hints_done_1_4: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1280], ymm4 + vmovdqu YMMWORD PTR [rdx+1312], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1344] + vmovdqu ymm1, YMMWORD PTR [rdx+1376] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_5 +L_mldsa_use_hint_88_avx2_hints_done_1_5: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1344], ymm4 + vmovdqu YMMWORD PTR [rdx+1376], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1408] + vmovdqu ymm1, YMMWORD PTR [rdx+1440] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_6 +L_mldsa_use_hint_88_avx2_hints_done_1_6: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1408], ymm4 + vmovdqu YMMWORD PTR [rdx+1440], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1472] + vmovdqu ymm1, YMMWORD PTR [rdx+1504] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_7: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_7 + mov cl, r10b + sub cl, 112 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_7 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_7 +L_mldsa_use_hint_88_avx2_hints_done_1_7: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1472], ymm4 + vmovdqu YMMWORD PTR [rdx+1504], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1536] + vmovdqu ymm1, YMMWORD PTR [rdx+1568] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_8: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_8 + mov cl, r10b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_8 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_8 +L_mldsa_use_hint_88_avx2_hints_done_1_8: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1536], ymm4 + vmovdqu YMMWORD PTR [rdx+1568], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1600] + vmovdqu ymm1, YMMWORD PTR [rdx+1632] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_9 +L_mldsa_use_hint_88_avx2_hints_done_1_9: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1600], ymm4 + vmovdqu YMMWORD PTR [rdx+1632], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1664] + vmovdqu ymm1, YMMWORD PTR [rdx+1696] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_10 +L_mldsa_use_hint_88_avx2_hints_done_1_10: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1664], ymm4 + vmovdqu YMMWORD PTR [rdx+1696], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1728] + vmovdqu ymm1, YMMWORD PTR [rdx+1760] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_11 +L_mldsa_use_hint_88_avx2_hints_done_1_11: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1728], ymm4 + vmovdqu YMMWORD PTR [rdx+1760], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1792] + vmovdqu ymm1, YMMWORD PTR [rdx+1824] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_12 +L_mldsa_use_hint_88_avx2_hints_done_1_12: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1792], ymm4 + vmovdqu YMMWORD PTR [rdx+1824], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1856] + vmovdqu ymm1, YMMWORD PTR [rdx+1888] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_13: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + mov cl, r10b + sub cl, 208 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_13 +L_mldsa_use_hint_88_avx2_hints_done_1_13: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1856], ymm4 + vmovdqu YMMWORD PTR [rdx+1888], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1920] + vmovdqu ymm1, YMMWORD PTR [rdx+1952] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_14: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + mov cl, r10b + sub cl, 224 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_14 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_14 +L_mldsa_use_hint_88_avx2_hints_done_1_14: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1920], ymm4 + vmovdqu YMMWORD PTR [rdx+1952], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+1984] + vmovdqu ymm1, YMMWORD PTR [rdx+2016] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_1_15: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + mov cl, r10b + sub cl, 240 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_1_15 +L_mldsa_use_hint_88_avx2_hints_done_1_15: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+1984], ymm4 + vmovdqu YMMWORD PTR [rdx+2016], ymm5 + ; 3/4 vectors + mov r8b, [rax+82] + vmovdqu ymm0, YMMWORD PTR [rdx+2048] + vmovdqu ymm1, YMMWORD PTR [rdx+2080] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_0: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + mov cl, r10b + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_0 +L_mldsa_use_hint_88_avx2_hints_done_2_0: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2048], ymm4 + vmovdqu YMMWORD PTR [rdx+2080], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2112] + vmovdqu ymm1, YMMWORD PTR [rdx+2144] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_1: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + mov cl, r10b + sub cl, 16 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_1 +L_mldsa_use_hint_88_avx2_hints_done_2_1: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2112], ymm4 + vmovdqu YMMWORD PTR [rdx+2144], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2176] + vmovdqu ymm1, YMMWORD PTR [rdx+2208] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_2: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + mov cl, r10b + sub cl, 32 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_2 +L_mldsa_use_hint_88_avx2_hints_done_2_2: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2176], ymm4 + vmovdqu YMMWORD PTR [rdx+2208], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2240] + vmovdqu ymm1, YMMWORD PTR [rdx+2272] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_3: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + mov cl, r10b + sub cl, 48 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_3 +L_mldsa_use_hint_88_avx2_hints_done_2_3: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2240], ymm4 + vmovdqu YMMWORD PTR [rdx+2272], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2304] + vmovdqu ymm1, YMMWORD PTR [rdx+2336] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_4 +L_mldsa_use_hint_88_avx2_hints_done_2_4: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2304], ymm4 + vmovdqu YMMWORD PTR [rdx+2336], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2368] + vmovdqu ymm1, YMMWORD PTR [rdx+2400] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_5 +L_mldsa_use_hint_88_avx2_hints_done_2_5: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2368], ymm4 + vmovdqu YMMWORD PTR [rdx+2400], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2432] + vmovdqu ymm1, YMMWORD PTR [rdx+2464] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_6 +L_mldsa_use_hint_88_avx2_hints_done_2_6: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2432], ymm4 + vmovdqu YMMWORD PTR [rdx+2464], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2496] + vmovdqu ymm1, YMMWORD PTR [rdx+2528] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_7: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + mov cl, r10b + sub cl, 112 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_7 +L_mldsa_use_hint_88_avx2_hints_done_2_7: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2496], ymm4 + vmovdqu YMMWORD PTR [rdx+2528], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2560] + vmovdqu ymm1, YMMWORD PTR [rdx+2592] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_8: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + mov cl, r10b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_8 +L_mldsa_use_hint_88_avx2_hints_done_2_8: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2560], ymm4 + vmovdqu YMMWORD PTR [rdx+2592], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2624] + vmovdqu ymm1, YMMWORD PTR [rdx+2656] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_9 +L_mldsa_use_hint_88_avx2_hints_done_2_9: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2624], ymm4 + vmovdqu YMMWORD PTR [rdx+2656], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2688] + vmovdqu ymm1, YMMWORD PTR [rdx+2720] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_10 +L_mldsa_use_hint_88_avx2_hints_done_2_10: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2688], ymm4 + vmovdqu YMMWORD PTR [rdx+2720], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2752] + vmovdqu ymm1, YMMWORD PTR [rdx+2784] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_11 +L_mldsa_use_hint_88_avx2_hints_done_2_11: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2752], ymm4 + vmovdqu YMMWORD PTR [rdx+2784], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2816] + vmovdqu ymm1, YMMWORD PTR [rdx+2848] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_12 +L_mldsa_use_hint_88_avx2_hints_done_2_12: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2816], ymm4 + vmovdqu YMMWORD PTR [rdx+2848], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2880] + vmovdqu ymm1, YMMWORD PTR [rdx+2912] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_13: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + mov cl, r10b + sub cl, 208 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_13 +L_mldsa_use_hint_88_avx2_hints_done_2_13: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+2880], ymm4 + vmovdqu YMMWORD PTR [rdx+2912], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+2944] + vmovdqu ymm1, YMMWORD PTR [rdx+2976] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_2_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + jge L_mldsa_use_hint_88_avx2_hints_done_2_14 mov cl, r10b + sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_0 + jge L_mldsa_use_hint_88_avx2_hints_done_2_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_0 -L_mldsa_use_hint_88_avx2_hints_done_0_0: + jmp L_mldsa_use_hint_88_avx2_hints_next_2_14 +L_mldsa_use_hint_88_avx2_hints_done_2_14: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27342,10 +35543,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_0: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx], ymm4 - vmovdqu YMMWORD PTR [rdx+32], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+64] - vmovdqu ymm1, YMMWORD PTR [rdx+96] + vmovdqu YMMWORD PTR [rdx+2944], ymm4 + vmovdqu YMMWORD PTR [rdx+2976], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3008] + vmovdqu ymm1, YMMWORD PTR [rdx+3040] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27383,20 +35584,193 @@ L_mldsa_use_hint_88_avx2_hints_done_0_0: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_1: +L_mldsa_use_hint_88_avx2_hints_next_2_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + mov cl, r10b + sub cl, 240 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_2_15 +L_mldsa_use_hint_88_avx2_hints_done_2_15: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+3008], ymm4 + vmovdqu YMMWORD PTR [rdx+3040], ymm5 + ; 4/4 vectors + mov r8b, [rax+83] + vmovdqu ymm0, YMMWORD PTR [rdx+3072] + vmovdqu ymm1, YMMWORD PTR [rdx+3104] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_3_0: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + mov cl, r10b + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_3_0 +L_mldsa_use_hint_88_avx2_hints_done_3_0: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+3072], ymm4 + vmovdqu YMMWORD PTR [rdx+3104], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3136] + vmovdqu ymm1, YMMWORD PTR [rdx+3168] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_3_1: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_3_1 mov cl, r10b sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_1 + jge L_mldsa_use_hint_88_avx2_hints_done_3_1 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_1 -L_mldsa_use_hint_88_avx2_hints_done_0_1: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_1 +L_mldsa_use_hint_88_avx2_hints_done_3_1: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27428,10 +35802,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_1: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+64], ymm4 - vmovdqu YMMWORD PTR [rdx+96], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+128] - vmovdqu ymm1, YMMWORD PTR [rdx+160] + vmovdqu YMMWORD PTR [rdx+3136], ymm4 + vmovdqu YMMWORD PTR [rdx+3168], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3200] + vmovdqu ymm1, YMMWORD PTR [rdx+3232] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27469,20 +35843,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_1: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_2: +L_mldsa_use_hint_88_avx2_hints_next_3_2: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + jge L_mldsa_use_hint_88_avx2_hints_done_3_2 mov cl, r10b sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_2 + jge L_mldsa_use_hint_88_avx2_hints_done_3_2 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_2 -L_mldsa_use_hint_88_avx2_hints_done_0_2: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_2 +L_mldsa_use_hint_88_avx2_hints_done_3_2: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27514,10 +35888,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_2: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+128], ymm4 - vmovdqu YMMWORD PTR [rdx+160], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+192] - vmovdqu ymm1, YMMWORD PTR [rdx+224] + vmovdqu YMMWORD PTR [rdx+3200], ymm4 + vmovdqu YMMWORD PTR [rdx+3232], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3264] + vmovdqu ymm1, YMMWORD PTR [rdx+3296] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27555,20 +35929,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_2: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_3: +L_mldsa_use_hint_88_avx2_hints_next_3_3: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + jge L_mldsa_use_hint_88_avx2_hints_done_3_3 mov cl, r10b sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_3 + jge L_mldsa_use_hint_88_avx2_hints_done_3_3 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_3 -L_mldsa_use_hint_88_avx2_hints_done_0_3: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_3 +L_mldsa_use_hint_88_avx2_hints_done_3_3: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27600,10 +35974,268 @@ L_mldsa_use_hint_88_avx2_hints_done_0_3: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+192], ymm4 - vmovdqu YMMWORD PTR [rdx+224], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+256] - vmovdqu ymm1, YMMWORD PTR [rdx+288] + vmovdqu YMMWORD PTR [rdx+3264], ymm4 + vmovdqu YMMWORD PTR [rdx+3296], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3328] + vmovdqu ymm1, YMMWORD PTR [rdx+3360] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_3_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_3_4 +L_mldsa_use_hint_88_avx2_hints_done_3_4: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+3328], ymm4 + vmovdqu YMMWORD PTR [rdx+3360], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3392] + vmovdqu ymm1, YMMWORD PTR [rdx+3424] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_3_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_3_5 +L_mldsa_use_hint_88_avx2_hints_done_3_5: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+3392], ymm4 + vmovdqu YMMWORD PTR [rdx+3424], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3456] + vmovdqu ymm1, YMMWORD PTR [rdx+3488] + vpsrad ymm2, ymm0, 31 + vpsrad ymm3, ymm1, 31 + vpand ymm2, ymm2, ymm8 + vpand ymm3, ymm3, ymm8 + vpaddd ymm0, ymm0, ymm2 + vpaddd ymm1, ymm1, ymm3 + vpmulld ymm4, ymm0, ymm12 + vpmulld ymm5, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm11 + vpaddd ymm5, ymm5, ymm11 + vpsrld ymm4, ymm4, 23 + vpsrld ymm5, ymm5, 23 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpsubd ymm2, ymm9, ymm2 + vpsubd ymm3, ymm9, ymm3 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpmulld ymm2, ymm4, ymm10 + vpmulld ymm3, ymm5, ymm10 + vpsubd ymm2, ymm0, ymm2 + vpsubd ymm3, ymm1, ymm3 + vpcmpeqd ymm0, ymm4, ymm12 + vpcmpeqd ymm1, ymm5, ymm12 + vpaddd ymm2, ymm2, ymm0 + vpaddd ymm3, ymm3, ymm1 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx2_hints_next_3_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx2_hints_next_3_6 +L_mldsa_use_hint_88_avx2_hints_done_3_6: + movd xmm6, r12d + shr r12, 8 + movd xmm7, r12d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpcmpgtd ymm0, ymm12, ymm4 + vpcmpgtd ymm1, ymm12, ymm5 + vpand ymm4, ymm4, ymm0 + vpand ymm5, ymm5, ymm1 + vpsrad ymm0, ymm4, 31 + vpsrad ymm1, ymm5, 31 + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpaddd ymm4, ymm4, ymm0 + vpaddd ymm5, ymm5, ymm1 + vmovdqu YMMWORD PTR [rdx+3456], ymm4 + vmovdqu YMMWORD PTR [rdx+3488], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3520] + vmovdqu ymm1, YMMWORD PTR [rdx+3552] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27641,20 +36273,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_3: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_4: +L_mldsa_use_hint_88_avx2_hints_next_3_7: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + jge L_mldsa_use_hint_88_avx2_hints_done_3_7 mov cl, r10b - sub cl, 64 + sub cl, 112 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_4 + jge L_mldsa_use_hint_88_avx2_hints_done_3_7 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_4 -L_mldsa_use_hint_88_avx2_hints_done_0_4: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_7 +L_mldsa_use_hint_88_avx2_hints_done_3_7: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27686,10 +36318,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_4: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+256], ymm4 - vmovdqu YMMWORD PTR [rdx+288], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+320] - vmovdqu ymm1, YMMWORD PTR [rdx+352] + vmovdqu YMMWORD PTR [rdx+3520], ymm4 + vmovdqu YMMWORD PTR [rdx+3552], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3584] + vmovdqu ymm1, YMMWORD PTR [rdx+3616] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27727,20 +36359,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_4: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_5: +L_mldsa_use_hint_88_avx2_hints_next_3_8: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + jge L_mldsa_use_hint_88_avx2_hints_done_3_8 mov cl, r10b - sub cl, 80 + sub cl, 128 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_5 + jge L_mldsa_use_hint_88_avx2_hints_done_3_8 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_5 -L_mldsa_use_hint_88_avx2_hints_done_0_5: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_8 +L_mldsa_use_hint_88_avx2_hints_done_3_8: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27772,10 +36404,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_5: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+320], ymm4 - vmovdqu YMMWORD PTR [rdx+352], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+384] - vmovdqu ymm1, YMMWORD PTR [rdx+416] + vmovdqu YMMWORD PTR [rdx+3584], ymm4 + vmovdqu YMMWORD PTR [rdx+3616], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3648] + vmovdqu ymm1, YMMWORD PTR [rdx+3680] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27813,20 +36445,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_5: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_6: +L_mldsa_use_hint_88_avx2_hints_next_3_9: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + jge L_mldsa_use_hint_88_avx2_hints_done_3_9 mov cl, r10b - sub cl, 96 + sub cl, 144 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_6 + jge L_mldsa_use_hint_88_avx2_hints_done_3_9 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_6 -L_mldsa_use_hint_88_avx2_hints_done_0_6: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_9 +L_mldsa_use_hint_88_avx2_hints_done_3_9: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27858,10 +36490,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_6: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+384], ymm4 - vmovdqu YMMWORD PTR [rdx+416], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+448] - vmovdqu ymm1, YMMWORD PTR [rdx+480] + vmovdqu YMMWORD PTR [rdx+3648], ymm4 + vmovdqu YMMWORD PTR [rdx+3680], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3712] + vmovdqu ymm1, YMMWORD PTR [rdx+3744] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27899,20 +36531,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_6: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_7: +L_mldsa_use_hint_88_avx2_hints_next_3_10: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + jge L_mldsa_use_hint_88_avx2_hints_done_3_10 mov cl, r10b - sub cl, 112 + sub cl, 160 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_7 + jge L_mldsa_use_hint_88_avx2_hints_done_3_10 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_7 -L_mldsa_use_hint_88_avx2_hints_done_0_7: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_10 +L_mldsa_use_hint_88_avx2_hints_done_3_10: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -27944,10 +36576,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_7: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+448], ymm4 - vmovdqu YMMWORD PTR [rdx+480], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+512] - vmovdqu ymm1, YMMWORD PTR [rdx+544] + vmovdqu YMMWORD PTR [rdx+3712], ymm4 + vmovdqu YMMWORD PTR [rdx+3744], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3776] + vmovdqu ymm1, YMMWORD PTR [rdx+3808] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -27985,20 +36617,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_7: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_8: +L_mldsa_use_hint_88_avx2_hints_next_3_11: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + jge L_mldsa_use_hint_88_avx2_hints_done_3_11 mov cl, r10b - sub cl, 128 + sub cl, 176 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_8 + jge L_mldsa_use_hint_88_avx2_hints_done_3_11 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_8 -L_mldsa_use_hint_88_avx2_hints_done_0_8: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_11 +L_mldsa_use_hint_88_avx2_hints_done_3_11: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -28030,10 +36662,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_8: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+512], ymm4 - vmovdqu YMMWORD PTR [rdx+544], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+576] - vmovdqu ymm1, YMMWORD PTR [rdx+608] + vmovdqu YMMWORD PTR [rdx+3776], ymm4 + vmovdqu YMMWORD PTR [rdx+3808], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3840] + vmovdqu ymm1, YMMWORD PTR [rdx+3872] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -28071,20 +36703,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_8: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_9: +L_mldsa_use_hint_88_avx2_hints_next_3_12: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + jge L_mldsa_use_hint_88_avx2_hints_done_3_12 mov cl, r10b - sub cl, 144 + sub cl, 192 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_9 + jge L_mldsa_use_hint_88_avx2_hints_done_3_12 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_9 -L_mldsa_use_hint_88_avx2_hints_done_0_9: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_12 +L_mldsa_use_hint_88_avx2_hints_done_3_12: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -28116,10 +36748,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_9: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+576], ymm4 - vmovdqu YMMWORD PTR [rdx+608], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+640] - vmovdqu ymm1, YMMWORD PTR [rdx+672] + vmovdqu YMMWORD PTR [rdx+3840], ymm4 + vmovdqu YMMWORD PTR [rdx+3872], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3904] + vmovdqu ymm1, YMMWORD PTR [rdx+3936] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -28157,20 +36789,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_9: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_10: +L_mldsa_use_hint_88_avx2_hints_next_3_13: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + jge L_mldsa_use_hint_88_avx2_hints_done_3_13 mov cl, r10b - sub cl, 160 + sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_10 + jge L_mldsa_use_hint_88_avx2_hints_done_3_13 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_10 -L_mldsa_use_hint_88_avx2_hints_done_0_10: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_13 +L_mldsa_use_hint_88_avx2_hints_done_3_13: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -28202,10 +36834,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_10: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+640], ymm4 - vmovdqu YMMWORD PTR [rdx+672], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+704] - vmovdqu ymm1, YMMWORD PTR [rdx+736] + vmovdqu YMMWORD PTR [rdx+3904], ymm4 + vmovdqu YMMWORD PTR [rdx+3936], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+3968] + vmovdqu ymm1, YMMWORD PTR [rdx+4000] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -28243,20 +36875,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_10: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_11: +L_mldsa_use_hint_88_avx2_hints_next_3_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + jge L_mldsa_use_hint_88_avx2_hints_done_3_14 mov cl, r10b - sub cl, 176 + sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_11 + jge L_mldsa_use_hint_88_avx2_hints_done_3_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_11 -L_mldsa_use_hint_88_avx2_hints_done_0_11: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_14 +L_mldsa_use_hint_88_avx2_hints_done_3_14: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -28288,10 +36920,10 @@ L_mldsa_use_hint_88_avx2_hints_done_0_11: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+704], ymm4 - vmovdqu YMMWORD PTR [rdx+736], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+768] - vmovdqu ymm1, YMMWORD PTR [rdx+800] + vmovdqu YMMWORD PTR [rdx+3968], ymm4 + vmovdqu YMMWORD PTR [rdx+4000], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+4032] + vmovdqu ymm1, YMMWORD PTR [rdx+4064] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 @@ -28329,20 +36961,20 @@ L_mldsa_use_hint_88_avx2_hints_done_0_11: mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_12: +L_mldsa_use_hint_88_avx2_hints_next_3_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + jge L_mldsa_use_hint_88_avx2_hints_done_3_15 mov cl, r10b - sub cl, 192 + sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_12 + jge L_mldsa_use_hint_88_avx2_hints_done_3_15 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_12 -L_mldsa_use_hint_88_avx2_hints_done_0_12: + jmp L_mldsa_use_hint_88_avx2_hints_next_3_15 +L_mldsa_use_hint_88_avx2_hints_done_3_15: movd xmm6, r12d shr r12, 8 movd xmm7, r12d @@ -28374,22 +37006,111 @@ L_mldsa_use_hint_88_avx2_hints_done_0_12: vpand ymm1, ymm1, ymm12 vpaddd ymm4, ymm4, ymm0 vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+768], ymm4 - vmovdqu YMMWORD PTR [rdx+800], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+832] - vmovdqu ymm1, YMMWORD PTR [rdx+864] + vmovdqu YMMWORD PTR [rdx+4032], ymm4 + vmovdqu YMMWORD PTR [rdx+4064], ymm5 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + add rsp, 152 + pop r13 + pop r12 + ret +wc_mldsa_use_hint_88_avx2 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_q DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h + DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h +ptr_L_mldsa_use_hint_32_avx2_q QWORD L_mldsa_use_hint_32_avx2_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_q_low_32 DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h + DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h +ptr_L_mldsa_use_hint_32_avx2_q_low_32 QWORD L_mldsa_use_hint_32_avx2_q_low_32 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_q_low_32_2 DWORD 0007fe00h, 0007fe00h, 0007fe00h, 0007fe00h + DWORD 0007fe00h, 0007fe00h, 0007fe00h, 0007fe00h +ptr_L_mldsa_use_hint_32_avx2_q_low_32_2 QWORD L_mldsa_use_hint_32_avx2_q_low_32_2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_q_low_32_m1 DWORD 0003feffh, 0003feffh, 0003feffh, 0003feffh + DWORD 0003feffh, 0003feffh, 0003feffh, 0003feffh +ptr_L_mldsa_use_hint_32_avx2_q_low_32_m1 QWORD L_mldsa_use_hint_32_avx2_q_low_32_m1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_mask DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh +ptr_L_mldsa_use_hint_32_avx2_mask QWORD L_mldsa_use_hint_32_avx2_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_vsl DWORD 0000001fh, 0000001eh, 0000001dh, 0000001ch + DWORD 0000001bh, 0000001ah, 00000019h, 00000018h +ptr_L_mldsa_use_hint_32_avx2_vsl QWORD L_mldsa_use_hint_32_avx2_vsl +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_use_hint_32_avx2_one DWORD 00000001h, 00000001h, 00000001h, 00000001h + DWORD 00000001h, 00000001h, 00000001h, 00000001h +ptr_L_mldsa_use_hint_32_avx2_one QWORD L_mldsa_use_hint_32_avx2_one +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_use_hint_32_avx2 PROC + push r12 + push r13 + push r14 + push r15 + mov rax, rdx + mov rdx, rcx + sub rsp, 152 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vpxor ymm8, ymm8, ymm8 + vmovdqu ymm8, YMMWORD PTR L_mldsa_use_hint_32_avx2_q + vmovdqu ymm9, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32 + vmovdqu ymm10, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32_2 + vmovdqu ymm11, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32_m1 + vmovdqu ymm12, YMMWORD PTR L_mldsa_use_hint_32_avx2_mask + vmovdqu ymm13, YMMWORD PTR L_mldsa_use_hint_32_avx2_vsl + vmovdqu ymm14, YMMWORD PTR L_mldsa_use_hint_32_avx2_one + xor r10, r10 + mov r11b, [r8] + imul r15, rax, 10 + sub r15, 5 +L_mldsa_use_hint_32_avx2_start_256: + mov r9b, [r8+r15] + inc r15 + vmovdqu ymm0, YMMWORD PTR [rdx] + vmovdqu ymm1, YMMWORD PTR [rdx+32] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28404,34 +37125,31 @@ L_mldsa_use_hint_88_avx2_hints_done_0_12: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_13: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_13 - mov cl, r10b - sub cl, 208 +L_mldsa_use_hint_32_avx2_hints_next__0: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__0 + mov cl, r11b cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_13 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_13 -L_mldsa_use_hint_88_avx2_hints_done_0_13: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__0 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__0 +L_mldsa_use_hint_32_avx2_hints_done__0: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28450,32 +37168,22 @@ L_mldsa_use_hint_88_avx2_hints_done_0_13: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+832], ymm4 - vmovdqu YMMWORD PTR [rdx+864], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+896] - vmovdqu ymm1, YMMWORD PTR [rdx+928] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx], ymm4 + vmovdqu YMMWORD PTR [rdx+32], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+64] + vmovdqu ymm1, YMMWORD PTR [rdx+96] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28490,34 +37198,32 @@ L_mldsa_use_hint_88_avx2_hints_done_0_13: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_14: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_14 - mov cl, r10b - sub cl, 224 +L_mldsa_use_hint_32_avx2_hints_next__1: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__1 + mov cl, r11b + sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_14 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_14 -L_mldsa_use_hint_88_avx2_hints_done_0_14: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__1 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__1 +L_mldsa_use_hint_32_avx2_hints_done__1: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28536,32 +37242,22 @@ L_mldsa_use_hint_88_avx2_hints_done_0_14: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+896], ymm4 - vmovdqu YMMWORD PTR [rdx+928], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+960] - vmovdqu ymm1, YMMWORD PTR [rdx+992] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+64], ymm4 + vmovdqu YMMWORD PTR [rdx+96], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+128] + vmovdqu ymm1, YMMWORD PTR [rdx+160] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28576,34 +37272,32 @@ L_mldsa_use_hint_88_avx2_hints_done_0_14: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_0_15: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_0_15 - mov cl, r10b - sub cl, 240 +L_mldsa_use_hint_32_avx2_hints_next__2: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__2 + mov cl, r11b + sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_0_15 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_0_15 -L_mldsa_use_hint_88_avx2_hints_done_0_15: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__2 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__2 +L_mldsa_use_hint_32_avx2_hints_done__2: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28622,34 +37316,22 @@ L_mldsa_use_hint_88_avx2_hints_done_0_15: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+960], ymm4 - vmovdqu YMMWORD PTR [rdx+992], ymm5 - ; 2/4 vectors - mov r8b, [rax+81] - vmovdqu ymm0, YMMWORD PTR [rdx+1024] - vmovdqu ymm1, YMMWORD PTR [rdx+1056] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+128], ymm4 + vmovdqu YMMWORD PTR [rdx+160], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+192] + vmovdqu ymm1, YMMWORD PTR [rdx+224] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28664,33 +37346,32 @@ L_mldsa_use_hint_88_avx2_hints_done_0_15: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_0: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_0 - mov cl, r10b +L_mldsa_use_hint_32_avx2_hints_next__3: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__3 + mov cl, r11b + sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_0 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_0 -L_mldsa_use_hint_88_avx2_hints_done_1_0: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__3 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__3 +L_mldsa_use_hint_32_avx2_hints_done__3: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28709,32 +37390,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_0: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1024], ymm4 - vmovdqu YMMWORD PTR [rdx+1056], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1088] - vmovdqu ymm1, YMMWORD PTR [rdx+1120] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+192], ymm4 + vmovdqu YMMWORD PTR [rdx+224], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+256] + vmovdqu ymm1, YMMWORD PTR [rdx+288] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28749,34 +37420,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_0: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_1: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_1 - mov cl, r10b - sub cl, 16 +L_mldsa_use_hint_32_avx2_hints_next__4: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__4 + mov cl, r11b + sub cl, 64 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_1 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_1 -L_mldsa_use_hint_88_avx2_hints_done_1_1: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__4 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__4 +L_mldsa_use_hint_32_avx2_hints_done__4: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28795,32 +37464,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_1: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1088], ymm4 - vmovdqu YMMWORD PTR [rdx+1120], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1152] - vmovdqu ymm1, YMMWORD PTR [rdx+1184] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+256], ymm4 + vmovdqu YMMWORD PTR [rdx+288], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+320] + vmovdqu ymm1, YMMWORD PTR [rdx+352] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28835,34 +37494,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_1: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_2: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_2 - mov cl, r10b - sub cl, 32 +L_mldsa_use_hint_32_avx2_hints_next__5: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__5 + mov cl, r11b + sub cl, 80 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_2 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_2 -L_mldsa_use_hint_88_avx2_hints_done_1_2: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__5 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__5 +L_mldsa_use_hint_32_avx2_hints_done__5: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28881,32 +37538,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_2: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1152], ymm4 - vmovdqu YMMWORD PTR [rdx+1184], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1216] - vmovdqu ymm1, YMMWORD PTR [rdx+1248] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+320], ymm4 + vmovdqu YMMWORD PTR [rdx+352], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+384] + vmovdqu ymm1, YMMWORD PTR [rdx+416] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -28921,34 +37568,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_2: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_3: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_3 - mov cl, r10b - sub cl, 48 +L_mldsa_use_hint_32_avx2_hints_next__6: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__6 + mov cl, r11b + sub cl, 96 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_3 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_3 -L_mldsa_use_hint_88_avx2_hints_done_1_3: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__6 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__6 +L_mldsa_use_hint_32_avx2_hints_done__6: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -28967,32 +37612,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_3: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1216], ymm4 - vmovdqu YMMWORD PTR [rdx+1248], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1280] - vmovdqu ymm1, YMMWORD PTR [rdx+1312] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+384], ymm4 + vmovdqu YMMWORD PTR [rdx+416], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+448] + vmovdqu ymm1, YMMWORD PTR [rdx+480] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29007,34 +37642,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_3: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_4: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_4 - mov cl, r10b - sub cl, 64 +L_mldsa_use_hint_32_avx2_hints_next__7: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__7 + mov cl, r11b + sub cl, 112 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_4 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_4 -L_mldsa_use_hint_88_avx2_hints_done_1_4: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__7 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__7 +L_mldsa_use_hint_32_avx2_hints_done__7: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29053,32 +37686,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_4: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1280], ymm4 - vmovdqu YMMWORD PTR [rdx+1312], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1344] - vmovdqu ymm1, YMMWORD PTR [rdx+1376] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+448], ymm4 + vmovdqu YMMWORD PTR [rdx+480], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+512] + vmovdqu ymm1, YMMWORD PTR [rdx+544] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29093,34 +37716,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_4: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_5: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_5 - mov cl, r10b - sub cl, 80 +L_mldsa_use_hint_32_avx2_hints_next__8: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__8 + mov cl, r11b + sub cl, 128 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_5 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_5 -L_mldsa_use_hint_88_avx2_hints_done_1_5: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__8 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__8 +L_mldsa_use_hint_32_avx2_hints_done__8: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29139,32 +37760,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_5: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1344], ymm4 - vmovdqu YMMWORD PTR [rdx+1376], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1408] - vmovdqu ymm1, YMMWORD PTR [rdx+1440] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+512], ymm4 + vmovdqu YMMWORD PTR [rdx+544], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+576] + vmovdqu ymm1, YMMWORD PTR [rdx+608] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29179,34 +37790,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_5: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_6: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_6 - mov cl, r10b - sub cl, 96 +L_mldsa_use_hint_32_avx2_hints_next__9: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__9 + mov cl, r11b + sub cl, 144 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_6 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_6 -L_mldsa_use_hint_88_avx2_hints_done_1_6: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__9 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__9 +L_mldsa_use_hint_32_avx2_hints_done__9: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29225,32 +37834,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_6: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1408], ymm4 - vmovdqu YMMWORD PTR [rdx+1440], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1472] - vmovdqu ymm1, YMMWORD PTR [rdx+1504] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+576], ymm4 + vmovdqu YMMWORD PTR [rdx+608], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+640] + vmovdqu ymm1, YMMWORD PTR [rdx+672] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29265,34 +37864,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_6: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_7: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_7 - mov cl, r10b - sub cl, 112 +L_mldsa_use_hint_32_avx2_hints_next__10: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__10 + mov cl, r11b + sub cl, 160 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_7 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_7 -L_mldsa_use_hint_88_avx2_hints_done_1_7: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__10 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__10 +L_mldsa_use_hint_32_avx2_hints_done__10: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29311,32 +37908,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_7: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1472], ymm4 - vmovdqu YMMWORD PTR [rdx+1504], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1536] - vmovdqu ymm1, YMMWORD PTR [rdx+1568] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+640], ymm4 + vmovdqu YMMWORD PTR [rdx+672], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+704] + vmovdqu ymm1, YMMWORD PTR [rdx+736] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29351,34 +37938,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_7: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_8: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_8 - mov cl, r10b - sub cl, 128 +L_mldsa_use_hint_32_avx2_hints_next__11: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__11 + mov cl, r11b + sub cl, 176 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_8 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_8 -L_mldsa_use_hint_88_avx2_hints_done_1_8: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__11 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__11 +L_mldsa_use_hint_32_avx2_hints_done__11: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29397,32 +37982,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_8: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1536], ymm4 - vmovdqu YMMWORD PTR [rdx+1568], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1600] - vmovdqu ymm1, YMMWORD PTR [rdx+1632] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+704], ymm4 + vmovdqu YMMWORD PTR [rdx+736], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+768] + vmovdqu ymm1, YMMWORD PTR [rdx+800] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29437,34 +38012,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_8: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_9: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_9 - mov cl, r10b - sub cl, 144 +L_mldsa_use_hint_32_avx2_hints_next__12: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__12 + mov cl, r11b + sub cl, 192 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_9 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_9 -L_mldsa_use_hint_88_avx2_hints_done_1_9: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__12 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__12 +L_mldsa_use_hint_32_avx2_hints_done__12: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29483,32 +38056,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_9: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1600], ymm4 - vmovdqu YMMWORD PTR [rdx+1632], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1664] - vmovdqu ymm1, YMMWORD PTR [rdx+1696] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+768], ymm4 + vmovdqu YMMWORD PTR [rdx+800], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+832] + vmovdqu ymm1, YMMWORD PTR [rdx+864] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29523,34 +38086,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_9: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_10: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_10 - mov cl, r10b - sub cl, 160 +L_mldsa_use_hint_32_avx2_hints_next__13: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__13 + mov cl, r11b + sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_10 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_10 -L_mldsa_use_hint_88_avx2_hints_done_1_10: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__13 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__13 +L_mldsa_use_hint_32_avx2_hints_done__13: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29569,32 +38130,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_10: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1664], ymm4 - vmovdqu YMMWORD PTR [rdx+1696], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1728] - vmovdqu ymm1, YMMWORD PTR [rdx+1760] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+832], ymm4 + vmovdqu YMMWORD PTR [rdx+864], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+896] + vmovdqu ymm1, YMMWORD PTR [rdx+928] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29609,34 +38160,32 @@ L_mldsa_use_hint_88_avx2_hints_done_1_10: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - mov r11, 1 - xor r12, r12 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_11: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_11 - mov cl, r10b - sub cl, 176 +L_mldsa_use_hint_32_avx2_hints_next__14: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__14 + mov cl, r11b + sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_11 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_11 -L_mldsa_use_hint_88_avx2_hints_done_1_11: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d + jge L_mldsa_use_hint_32_avx2_hints_done__14 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__14 +L_mldsa_use_hint_32_avx2_hints_done__14: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d vpbroadcastd ymm6, xmm6 vpbroadcastd ymm7, xmm7 vpsllvd ymm6, ymm6, ymm13 @@ -29655,32 +38204,22 @@ L_mldsa_use_hint_88_avx2_hints_done_1_11: vpand ymm3, ymm3, ymm7 vpaddd ymm4, ymm4, ymm2 vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1728], ymm4 - vmovdqu YMMWORD PTR [rdx+1760], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1792] - vmovdqu ymm1, YMMWORD PTR [rdx+1824] + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+896], ymm4 + vmovdqu YMMWORD PTR [rdx+928], ymm5 + vmovdqu ymm0, YMMWORD PTR [rdx+960] + vmovdqu ymm1, YMMWORD PTR [rdx+992] vpsrad ymm2, ymm0, 31 vpsrad ymm3, ymm1, 31 vpand ymm2, ymm2, ymm8 vpand ymm3, ymm3, ymm8 vpaddd ymm0, ymm0, ymm2 vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 + vpaddd ymm4, ymm0, ymm11 + vpaddd ymm5, ymm1, ymm11 + vpsrld ymm4, ymm4, 19 + vpsrld ymm5, ymm5, 19 vpmulld ymm2, ymm4, ymm10 vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 @@ -29695,4353 +38234,15501 @@ L_mldsa_use_hint_88_avx2_hints_done_1_11: vpmulld ymm3, ymm5, ymm10 vpsubd ymm2, ymm0, ymm2 vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + vpsrld ymm0, ymm4, 4 + vpsrld ymm1, ymm5, 4 + vpsubd ymm2, ymm2, ymm0 + vpsubd ymm3, ymm3, ymm1 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + mov r12, 1 + xor r13, r13 + xor rcx, rcx +L_mldsa_use_hint_32_avx2_hints_next__15: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx2_hints_done__15 + mov cl, r11b + sub cl, 240 + cmp rcx, 16 + jge L_mldsa_use_hint_32_avx2_hints_done__15 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx2_hints_next__15 +L_mldsa_use_hint_32_avx2_hints_done__15: + movd xmm6, r13d + shr r13, 8 + movd xmm7, r13d + vpbroadcastd ymm6, xmm6 + vpbroadcastd ymm7, xmm7 + vpsllvd ymm6, ymm6, ymm13 + vpsllvd ymm7, ymm7, ymm13 + vpsrad ymm6, ymm6, 31 + vpsrad ymm7, ymm7, 31 + vpsubd ymm2, ymm2, ymm14 + vpsubd ymm3, ymm3, ymm14 + vpsrld ymm2, ymm2, 31 + vpsrld ymm3, ymm3, 31 + vpslld ymm2, ymm2, 1 + vpslld ymm3, ymm3, 1 + vpsubd ymm2, ymm14, ymm2 + vpsubd ymm3, ymm14, ymm3 + vpand ymm2, ymm2, ymm6 + vpand ymm3, ymm3, ymm7 + vpaddd ymm4, ymm4, ymm2 + vpaddd ymm5, ymm5, ymm3 + vpand ymm4, ymm4, ymm12 + vpand ymm5, ymm5, ymm12 + vmovdqu YMMWORD PTR [rdx+960], ymm4 + vmovdqu YMMWORD PTR [rdx+992], ymm5 + add rdx, 1024 + sub rax, 1 + jne L_mldsa_use_hint_32_avx2_start_256 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + add rsp, 152 + pop r15 + pop r14 + pop r13 + pop r12 + ret +wc_mldsa_use_hint_32_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_vec_check_low_avx2 PROC + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + sub r8d, 1 + movd xmm2, r8d + neg r8d + movd xmm3, r8d + vpbroadcastd ymm2, xmm2 + vpbroadcastd ymm3, xmm3 +L_mldsa_vec_check_low_vx2_start_256: + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+64] + vmovdqu ymm1, YMMWORD PTR [rcx+96] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+128] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+192] + vmovdqu ymm1, YMMWORD PTR [rcx+224] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+320] + vmovdqu ymm1, YMMWORD PTR [rcx+352] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+384] + vmovdqu ymm1, YMMWORD PTR [rcx+416] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+448] + vmovdqu ymm1, YMMWORD PTR [rcx+480] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+576] + vmovdqu ymm1, YMMWORD PTR [rcx+608] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+640] + vmovdqu ymm1, YMMWORD PTR [rcx+672] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+704] + vmovdqu ymm1, YMMWORD PTR [rcx+736] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+832] + vmovdqu ymm1, YMMWORD PTR [rcx+864] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+896] + vmovdqu ymm1, YMMWORD PTR [rcx+928] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + vmovdqu ymm0, YMMWORD PTR [rcx+960] + vmovdqu ymm1, YMMWORD PTR [rcx+992] + vpcmpgtd ymm4, ymm0, ymm2 + vpcmpgtd ymm5, ymm1, ymm2 + vpcmpgtd ymm6, ymm3, ymm0 + vpcmpgtd ymm7, ymm3, ymm1 + vpor ymm4, ymm4, ymm5 + vpor ymm6, ymm6, ymm7 + vpor ymm4, ymm4, ymm6 + vpmovmskb rax, ymm4 + cmp rax, 0 + mov rax, 0 + jne L_mldsa_vec_check_low_vx2_done + add rcx, 1024 + sub rdx, 1 + jne L_mldsa_vec_check_low_vx2_start_256 + mov rax, 1 +L_mldsa_vec_check_low_vx2_done: + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 + ret +wc_mldsa_vec_check_low_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_poly_add_avx2 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] + vmovdqu ymm8, YMMWORD PTR [rdx] + vmovdqu ymm9, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR [rdx+64] + vmovdqu ymm11, YMMWORD PTR [rdx+96] + vmovdqu ymm12, YMMWORD PTR [rdx+128] + vmovdqu ymm13, YMMWORD PTR [rdx+160] + vmovdqu ymm14, YMMWORD PTR [rdx+192] + vmovdqu ymm15, YMMWORD PTR [rdx+224] + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm9 + vpaddd ymm2, ymm2, ymm10 + vpaddd ymm3, ymm3, ymm11 + vpaddd ymm4, ymm4, ymm12 + vpaddd ymm5, ymm5, ymm13 + vpaddd ymm6, ymm6, ymm14 + vpaddd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + vmovdqu ymm8, YMMWORD PTR [rdx+256] + vmovdqu ymm9, YMMWORD PTR [rdx+288] + vmovdqu ymm10, YMMWORD PTR [rdx+320] + vmovdqu ymm11, YMMWORD PTR [rdx+352] + vmovdqu ymm12, YMMWORD PTR [rdx+384] + vmovdqu ymm13, YMMWORD PTR [rdx+416] + vmovdqu ymm14, YMMWORD PTR [rdx+448] + vmovdqu ymm15, YMMWORD PTR [rdx+480] + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm9 + vpaddd ymm2, ymm2, ymm10 + vpaddd ymm3, ymm3, ymm11 + vpaddd ymm4, ymm4, ymm12 + vpaddd ymm5, ymm5, ymm13 + vpaddd ymm6, ymm6, ymm14 + vpaddd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + vmovdqu ymm8, YMMWORD PTR [rdx+512] + vmovdqu ymm9, YMMWORD PTR [rdx+544] + vmovdqu ymm10, YMMWORD PTR [rdx+576] + vmovdqu ymm11, YMMWORD PTR [rdx+608] + vmovdqu ymm12, YMMWORD PTR [rdx+640] + vmovdqu ymm13, YMMWORD PTR [rdx+672] + vmovdqu ymm14, YMMWORD PTR [rdx+704] + vmovdqu ymm15, YMMWORD PTR [rdx+736] + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm9 + vpaddd ymm2, ymm2, ymm10 + vpaddd ymm3, ymm3, ymm11 + vpaddd ymm4, ymm4, ymm12 + vpaddd ymm5, ymm5, ymm13 + vpaddd ymm6, ymm6, ymm14 + vpaddd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + vmovdqu ymm8, YMMWORD PTR [rdx+768] + vmovdqu ymm9, YMMWORD PTR [rdx+800] + vmovdqu ymm10, YMMWORD PTR [rdx+832] + vmovdqu ymm11, YMMWORD PTR [rdx+864] + vmovdqu ymm12, YMMWORD PTR [rdx+896] + vmovdqu ymm13, YMMWORD PTR [rdx+928] + vmovdqu ymm14, YMMWORD PTR [rdx+960] + vmovdqu ymm15, YMMWORD PTR [rdx+992] + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm9 + vpaddd ymm2, ymm2, ymm10 + vpaddd ymm3, ymm3, ymm11 + vpaddd ymm4, ymm4, ymm12 + vpaddd ymm5, ymm5, ymm13 + vpaddd ymm6, ymm6, ymm14 + vpaddd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+864], ymm3 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_poly_add_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_poly_sub_avx2 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vmovdqu ymm6, YMMWORD PTR [rcx+192] + vmovdqu ymm7, YMMWORD PTR [rcx+224] + vmovdqu ymm8, YMMWORD PTR [rdx] + vmovdqu ymm9, YMMWORD PTR [rdx+32] + vmovdqu ymm10, YMMWORD PTR [rdx+64] + vmovdqu ymm11, YMMWORD PTR [rdx+96] + vmovdqu ymm12, YMMWORD PTR [rdx+128] + vmovdqu ymm13, YMMWORD PTR [rdx+160] + vmovdqu ymm14, YMMWORD PTR [rdx+192] + vmovdqu ymm15, YMMWORD PTR [rdx+224] + vpsubd ymm0, ymm0, ymm8 + vpsubd ymm1, ymm1, ymm9 + vpsubd ymm2, ymm2, ymm10 + vpsubd ymm3, ymm3, ymm11 + vpsubd ymm4, ymm4, ymm12 + vpsubd ymm5, ymm5, ymm13 + vpsubd ymm6, ymm6, ymm14 + vpsubd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu YMMWORD PTR [rcx+128], ymm4 + vmovdqu YMMWORD PTR [rcx+160], ymm5 + vmovdqu YMMWORD PTR [rcx+192], ymm6 + vmovdqu YMMWORD PTR [rcx+224], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vmovdqu ymm6, YMMWORD PTR [rcx+448] + vmovdqu ymm7, YMMWORD PTR [rcx+480] + vmovdqu ymm8, YMMWORD PTR [rdx+256] + vmovdqu ymm9, YMMWORD PTR [rdx+288] + vmovdqu ymm10, YMMWORD PTR [rdx+320] + vmovdqu ymm11, YMMWORD PTR [rdx+352] + vmovdqu ymm12, YMMWORD PTR [rdx+384] + vmovdqu ymm13, YMMWORD PTR [rdx+416] + vmovdqu ymm14, YMMWORD PTR [rdx+448] + vmovdqu ymm15, YMMWORD PTR [rdx+480] + vpsubd ymm0, ymm0, ymm8 + vpsubd ymm1, ymm1, ymm9 + vpsubd ymm2, ymm2, ymm10 + vpsubd ymm3, ymm3, ymm11 + vpsubd ymm4, ymm4, ymm12 + vpsubd ymm5, ymm5, ymm13 + vpsubd ymm6, ymm6, ymm14 + vpsubd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu YMMWORD PTR [rcx+384], ymm4 + vmovdqu YMMWORD PTR [rcx+416], ymm5 + vmovdqu YMMWORD PTR [rcx+448], ymm6 + vmovdqu YMMWORD PTR [rcx+480], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vmovdqu ymm4, YMMWORD PTR [rcx+640] + vmovdqu ymm5, YMMWORD PTR [rcx+672] + vmovdqu ymm6, YMMWORD PTR [rcx+704] + vmovdqu ymm7, YMMWORD PTR [rcx+736] + vmovdqu ymm8, YMMWORD PTR [rdx+512] + vmovdqu ymm9, YMMWORD PTR [rdx+544] + vmovdqu ymm10, YMMWORD PTR [rdx+576] + vmovdqu ymm11, YMMWORD PTR [rdx+608] + vmovdqu ymm12, YMMWORD PTR [rdx+640] + vmovdqu ymm13, YMMWORD PTR [rdx+672] + vmovdqu ymm14, YMMWORD PTR [rdx+704] + vmovdqu ymm15, YMMWORD PTR [rdx+736] + vpsubd ymm0, ymm0, ymm8 + vpsubd ymm1, ymm1, ymm9 + vpsubd ymm2, ymm2, ymm10 + vpsubd ymm3, ymm3, ymm11 + vpsubd ymm4, ymm4, ymm12 + vpsubd ymm5, ymm5, ymm13 + vpsubd ymm6, ymm6, ymm14 + vpsubd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu YMMWORD PTR [rcx+640], ymm4 + vmovdqu YMMWORD PTR [rcx+672], ymm5 + vmovdqu YMMWORD PTR [rcx+704], ymm6 + vmovdqu YMMWORD PTR [rcx+736], ymm7 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vmovdqu ymm4, YMMWORD PTR [rcx+896] + vmovdqu ymm5, YMMWORD PTR [rcx+928] + vmovdqu ymm6, YMMWORD PTR [rcx+960] + vmovdqu ymm7, YMMWORD PTR [rcx+992] + vmovdqu ymm8, YMMWORD PTR [rdx+768] + vmovdqu ymm9, YMMWORD PTR [rdx+800] + vmovdqu ymm10, YMMWORD PTR [rdx+832] + vmovdqu ymm11, YMMWORD PTR [rdx+864] + vmovdqu ymm12, YMMWORD PTR [rdx+896] + vmovdqu ymm13, YMMWORD PTR [rdx+928] + vmovdqu ymm14, YMMWORD PTR [rdx+960] + vmovdqu ymm15, YMMWORD PTR [rdx+992] + vpsubd ymm0, ymm0, ymm8 + vpsubd ymm1, ymm1, ymm9 + vpsubd ymm2, ymm2, ymm10 + vpsubd ymm3, ymm3, ymm11 + vpsubd ymm4, ymm4, ymm12 + vpsubd ymm5, ymm5, ymm13 + vpsubd ymm6, ymm6, ymm14 + vpsubd ymm7, ymm7, ymm15 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+864], ymm3 + vmovdqu YMMWORD PTR [rcx+896], ymm4 + vmovdqu YMMWORD PTR [rcx+928], ymm5 + vmovdqu YMMWORD PTR [rcx+960], ymm6 + vmovdqu YMMWORD PTR [rcx+992], ymm7 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_poly_sub_avx2 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_poly_make_pos_avx2 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vpxor ymm8, ymm8, ymm8 + vmovdqu ymm9, YMMWORD PTR mldsa_q + vmovdqu ymm0, YMMWORD PTR [rcx] + vmovdqu ymm1, YMMWORD PTR [rcx+32] + vmovdqu ymm2, YMMWORD PTR [rcx+64] + vmovdqu ymm3, YMMWORD PTR [rcx+96] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx], ymm0 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vmovdqu YMMWORD PTR [rcx+64], ymm2 + vmovdqu YMMWORD PTR [rcx+96], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+128] + vmovdqu ymm1, YMMWORD PTR [rcx+160] + vmovdqu ymm2, YMMWORD PTR [rcx+192] + vmovdqu ymm3, YMMWORD PTR [rcx+224] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+128], ymm0 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vmovdqu YMMWORD PTR [rcx+192], ymm2 + vmovdqu YMMWORD PTR [rcx+224], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+256] + vmovdqu ymm1, YMMWORD PTR [rcx+288] + vmovdqu ymm2, YMMWORD PTR [rcx+320] + vmovdqu ymm3, YMMWORD PTR [rcx+352] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vmovdqu YMMWORD PTR [rcx+320], ymm2 + vmovdqu YMMWORD PTR [rcx+352], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+384] + vmovdqu ymm1, YMMWORD PTR [rcx+416] + vmovdqu ymm2, YMMWORD PTR [rcx+448] + vmovdqu ymm3, YMMWORD PTR [rcx+480] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+384], ymm0 + vmovdqu YMMWORD PTR [rcx+416], ymm1 + vmovdqu YMMWORD PTR [rcx+448], ymm2 + vmovdqu YMMWORD PTR [rcx+480], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+512] + vmovdqu ymm1, YMMWORD PTR [rcx+544] + vmovdqu ymm2, YMMWORD PTR [rcx+576] + vmovdqu ymm3, YMMWORD PTR [rcx+608] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+512], ymm0 + vmovdqu YMMWORD PTR [rcx+544], ymm1 + vmovdqu YMMWORD PTR [rcx+576], ymm2 + vmovdqu YMMWORD PTR [rcx+608], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+640] + vmovdqu ymm1, YMMWORD PTR [rcx+672] + vmovdqu ymm2, YMMWORD PTR [rcx+704] + vmovdqu ymm3, YMMWORD PTR [rcx+736] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+640], ymm0 + vmovdqu YMMWORD PTR [rcx+672], ymm1 + vmovdqu YMMWORD PTR [rcx+704], ymm2 + vmovdqu YMMWORD PTR [rcx+736], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+768] + vmovdqu ymm1, YMMWORD PTR [rcx+800] + vmovdqu ymm2, YMMWORD PTR [rcx+832] + vmovdqu ymm3, YMMWORD PTR [rcx+864] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+768], ymm0 + vmovdqu YMMWORD PTR [rcx+800], ymm1 + vmovdqu YMMWORD PTR [rcx+832], ymm2 + vmovdqu YMMWORD PTR [rcx+864], ymm3 + vmovdqu ymm0, YMMWORD PTR [rcx+896] + vmovdqu ymm1, YMMWORD PTR [rcx+928] + vmovdqu ymm2, YMMWORD PTR [rcx+960] + vmovdqu ymm3, YMMWORD PTR [rcx+992] + vpcmpgtd ymm4, ymm8, ymm0 + vpcmpgtd ymm5, ymm8, ymm1 + vpcmpgtd ymm6, ymm8, ymm2 + vpcmpgtd ymm7, ymm8, ymm3 + vpand ymm4, ymm4, ymm9 + vpand ymm5, ymm5, ymm9 + vpand ymm6, ymm6, ymm9 + vpand ymm7, ymm7, ymm9 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vmovdqu YMMWORD PTR [rcx+896], ymm0 + vmovdqu YMMWORD PTR [rcx+928], ymm1 + vmovdqu YMMWORD PTR [rcx+960], ymm2 + vmovdqu YMMWORD PTR [rcx+992], ymm3 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +wc_mldsa_poly_make_pos_avx2 ENDP +_TEXT ENDS +ENDIF +ENDIF +IFDEF WOLFSSL_HAVE_MLDSA +IFNDEF NO_AVX512_SUPPORT +IFNDEF HAVE_INTEL_AVX512 +HAVE_INTEL_AVX512 = 1 +ENDIF +ENDIF +IFDEF HAVE_INTEL_AVX512 +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_perm20 QWORD 0000000000000000h, 0000000000000001h + QWORD 0000000000000008h, 0000000000000009h + QWORD 0000000000000004h, 0000000000000005h + QWORD 000000000000000ch, 000000000000000dh +ptr_L_mldsa_avx512_perm20 QWORD L_mldsa_avx512_perm20 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_perm31 QWORD 0000000000000002h, 0000000000000003h + QWORD 000000000000000ah, 000000000000000bh + QWORD 0000000000000006h, 0000000000000007h + QWORD 000000000000000eh, 000000000000000fh +ptr_L_mldsa_avx512_perm31 QWORD L_mldsa_avx512_perm31 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_perm21 QWORD 0000000000000002h, 0000000000000003h + QWORD 0000000000000008h, 0000000000000009h + QWORD 0000000000000006h, 0000000000000007h + QWORD 000000000000000ch, 000000000000000dh +ptr_L_mldsa_avx512_perm21 QWORD L_mldsa_avx512_perm21 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_permn0 QWORD 0000000000000000h, 0000000000000001h + QWORD 0000000000000008h, 0000000000000009h + QWORD 0000000000000002h, 0000000000000003h + QWORD 000000000000000ah, 000000000000000bh +ptr_L_mldsa_avx512_permn0 QWORD L_mldsa_avx512_permn0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_permn1 QWORD 0000000000000004h, 0000000000000005h + QWORD 000000000000000ch, 000000000000000dh + QWORD 0000000000000006h, 0000000000000007h + QWORD 000000000000000eh, 000000000000000fh +ptr_L_mldsa_avx512_permn1 QWORD L_mldsa_avx512_permn1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_rej_q_avx512 DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h + DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h +ptr_L_mldsa_rej_q_avx512 QWORD L_mldsa_rej_q_avx512 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_rej_mask_avx512 QWORD 007fffff007fffffh, 007fffff007fffffh + QWORD 007fffff007fffffh, 007fffff007fffffh +ptr_L_mldsa_rej_mask_avx512 QWORD L_mldsa_rej_mask_avx512 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_rej_shuffle_avx512 QWORD 0005040300020100h, 000b0a0900080706h + QWORD 0009080700060504h, 000f0e0d000c0b0ah +ptr_L_mldsa_rej_shuffle_avx512 QWORD L_mldsa_rej_shuffle_avx512 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_rej_uniform_n_avx512 PROC + push rbx + push r12 + mov r10, r9 + mov r9, r8 + mov r8, rdx + mov rdx, rcx + mov eax, r8d + vbroadcasti64x4 zmm1, YMMWORD PTR L_mldsa_rej_q_avx512 + vbroadcasti64x4 zmm2, YMMWORD PTR L_mldsa_rej_mask_avx512 + vbroadcasti64x4 zmm3, YMMWORD PTR L_mldsa_rej_shuffle_avx512 +L_wc_mldsa_rej_uniform_n_avx512_start_512: + cmp r8d, 16 + jl L_wc_mldsa_rej_uniform_n_avx512_done_512 + cmp r10d, 56 + jl L_wc_mldsa_rej_uniform_n_avx512_done_512 + vmovdqu64 ymm0, YMMWORD PTR [r9] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r9+24], 1 + vpermq zmm0, zmm0, 148 + vpshufb zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm2 + vpcmpd k1, zmm0, zmm1, 1 + vpcompressd [rdx]{k1}, zmm0 + kmovw ebx, k1 + popcnt ebx, ebx + lea rdx, QWORD PTR [rdx+4*rbx] + sub r8d, ebx + add r9, 48 + sub r10d, 48 + jmp L_wc_mldsa_rej_uniform_n_avx512_start_512 +L_wc_mldsa_rej_uniform_n_avx512_done_512: + cmp r8d, 0 + je L_wc_mldsa_rej_uniform_n_avx512_done_64 + mov r12, 72057589759737855 + mov r11, 36028792732385279 +L_wc_mldsa_rej_uniform_n_avx512_start_64: + cmp r10d, 8 + jl L_wc_mldsa_rej_uniform_n_avx512_done_64 + mov rcx, QWORD PTR [r9] + pdep rcx, rcx, r12 + and rcx, r11 + cmp ecx, 8380417 + jge L_wc_mldsa_rej_uniform_n_avx512_rej_large_0 + mov DWORD PTR [rdx], ecx + add rdx, 4 + sub r8d, 1 + je L_wc_mldsa_rej_uniform_n_avx512_done_64 +L_wc_mldsa_rej_uniform_n_avx512_rej_large_0: + shr rcx, 32 + cmp ecx, 8380417 + jge L_wc_mldsa_rej_uniform_n_avx512_rej_large_1 + mov DWORD PTR [rdx], ecx + add rdx, 4 + sub r8d, 1 + je L_wc_mldsa_rej_uniform_n_avx512_done_64 +L_wc_mldsa_rej_uniform_n_avx512_rej_large_1: + add r9, 6 + sub r10d, 6 + jle L_wc_mldsa_rej_uniform_n_avx512_done_64 + cmp r8d, 0 + jg L_wc_mldsa_rej_uniform_n_avx512_start_64 +L_wc_mldsa_rej_uniform_n_avx512_done_64: + vzeroupper + sub eax, r8d + pop r12 + pop rbx + ret +wc_mldsa_rej_uniform_n_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_rej_uniform_avx512 PROC + push rbx + push r12 + mov r10, r9 + mov r9, r8 + mov r8, rdx + mov rdx, rcx + mov eax, r8d + vbroadcasti64x4 zmm1, YMMWORD PTR L_mldsa_rej_q_avx512 + vbroadcasti64x4 zmm2, YMMWORD PTR L_mldsa_rej_mask_avx512 + vbroadcasti64x4 zmm3, YMMWORD PTR L_mldsa_rej_shuffle_avx512 +L_wc_mldsa_rej_uniform_avx512_start_512: + cmp r8d, 16 + jl L_wc_mldsa_rej_uniform_avx512_done_512 + cmp r10d, 56 + jl L_wc_mldsa_rej_uniform_avx512_done_512 + vmovdqu64 ymm0, YMMWORD PTR [r9] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r9+24], 1 + vpermq zmm0, zmm0, 148 + vpshufb zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm2 + vpcmpd k1, zmm0, zmm1, 1 + vpcompressd [rdx]{k1}, zmm0 + kmovw ebx, k1 + popcnt ebx, ebx + lea rdx, QWORD PTR [rdx+4*rbx] + sub r8d, ebx + add r9, 48 + sub r10d, 48 + jmp L_wc_mldsa_rej_uniform_avx512_start_512 +L_wc_mldsa_rej_uniform_avx512_done_512: + cmp r8d, 0 + je L_wc_mldsa_rej_uniform_avx512_done_64 + mov r12, 72057589759737855 + mov r11, 36028792732385279 +L_wc_mldsa_rej_uniform_avx512_start_64: + cmp r10d, 8 + jl L_wc_mldsa_rej_uniform_avx512_done_64 + mov rcx, QWORD PTR [r9] + pdep rcx, rcx, r12 + and rcx, r11 + cmp ecx, 8380417 + jge L_wc_mldsa_rej_uniform_avx512_rej_large_0 + mov DWORD PTR [rdx], ecx + add rdx, 4 + sub r8d, 1 + je L_wc_mldsa_rej_uniform_avx512_done_64 +L_wc_mldsa_rej_uniform_avx512_rej_large_0: + shr rcx, 32 + cmp ecx, 8380417 + jge L_wc_mldsa_rej_uniform_avx512_rej_large_1 + mov DWORD PTR [rdx], ecx + add rdx, 4 + sub r8d, 1 + je L_wc_mldsa_rej_uniform_avx512_done_64 +L_wc_mldsa_rej_uniform_avx512_rej_large_1: + add r9, 6 + sub r10d, 6 + jle L_wc_mldsa_rej_uniform_avx512_done_64 + cmp r8d, 0 + jg L_wc_mldsa_rej_uniform_avx512_start_64 +L_wc_mldsa_rej_uniform_avx512_done_64: + vzeroupper + sub eax, r8d + pop r12 + pop rbx + ret +wc_mldsa_rej_uniform_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta2_avx512_over DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh +ptr_L_mldsa_extract_coeffs_eta2_avx512_over QWORD L_mldsa_extract_coeffs_eta2_avx512_over +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh +ptr_L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles QWORD L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta2_avx512_table DWORD 00000002h, 00000001h, 00000000h, 0ffffffffh + DWORD 0fffffffeh, 00000002h, 00000001h, 00000000h + DWORD 0ffffffffh, 0fffffffeh, 00000002h, 00000001h + DWORD 00000000h, 0ffffffffh, 0fffffffeh, 00000000h +ptr_L_mldsa_extract_coeffs_eta2_avx512_table QWORD L_mldsa_extract_coeffs_eta2_avx512_table +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta2_avx512_dup DWORD 00000000h, 00000000h, 00000001h, 00000001h + DWORD 00000002h, 00000002h, 00000003h, 00000003h + DWORD 00000004h, 00000004h, 00000005h, 00000005h + DWORD 00000006h, 00000006h, 00000007h, 00000007h +ptr_L_mldsa_extract_coeffs_eta2_avx512_dup QWORD L_mldsa_extract_coeffs_eta2_avx512_dup +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta2_avx512_shift DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h +ptr_L_mldsa_extract_coeffs_eta2_avx512_shift QWORD L_mldsa_extract_coeffs_eta2_avx512_shift +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_extract_coeffs_eta2_avx512 PROC + push rbx + push r12 + push r13 + sub rsp, 16 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_extract_coeffs_eta2_avx512_dup + vmovdqu64 zmm3, ZMMWORD PTR L_mldsa_extract_coeffs_eta2_avx512_shift + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_extract_coeffs_eta2_avx512_mask_nibbles + vmovdqu64 zmm5, ZMMWORD PTR L_mldsa_extract_coeffs_eta2_avx512_over + vmovdqu64 zmm6, ZMMWORD PTR L_mldsa_extract_coeffs_eta2_avx512_table + mov r13, QWORD PTR [ptr_L_mldsa_extract_coeffs_eta2_avx512_table] + mov r10d, DWORD PTR [r9] + cmp r10d, 0 + jne L_mldsa_extract_coeffs_eta2_avx512_less_than_256 + vpmovzxbd ymm0, QWORD PTR [rcx] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+8] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+16] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+24] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+32] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+40] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+48] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+56] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+64] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+72] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+80] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+88] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+96] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+104] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+112] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+120] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + sub edx, 128 + add rcx, 128 +L_mldsa_extract_coeffs_eta2_avx512_less_than_256: + cmp r10d, 240 + jg L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm +L_mldsa_extract_coeffs_eta2_avx512_start_one_zmm: + vpmovzxbd ymm0, QWORD PTR [rcx] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + sub edx, 8 + add rcx, 8 + cmp edx, 8 + jl L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm + cmp r10d, 240 + jle L_mldsa_extract_coeffs_eta2_avx512_start_one_zmm +L_mldsa_extract_coeffs_eta2_avx512_less_than_zmm: + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta2_avx512_done +L_mldsa_extract_coeffs_eta2_avx512_start_byte: + cmp edx, 0 + je L_mldsa_extract_coeffs_eta2_avx512_done + movzx ebx, BYTE PTR [rcx] + add rcx, 1 + sub edx, 1 + mov eax, ebx + shr eax, 4 + and bl, 15 + xor r11, r11 + cmp bl, 15 + adc r11d, 0 + mov r12d, DWORD PTR [r13+4*rbx] + mov DWORD PTR [r8], r12d + add r10d, r11d + shl r11d, 2 + add r8, r11 + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta2_avx512_done + xor r11, r11 + cmp al, 15 + adc r11d, 0 + mov r12d, DWORD PTR [r13+4*rax] + mov DWORD PTR [r8], r12d + add r10d, r11d + shl r11d, 2 + add r8, r11 + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta2_avx512_done + jmp L_mldsa_extract_coeffs_eta2_avx512_start_byte +L_mldsa_extract_coeffs_eta2_avx512_done: + mov DWORD PTR [r9], r10d + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + add rsp, 16 + pop r13 + pop r12 + pop rbx + ret +wc_mldsa_extract_coeffs_eta2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta4_avx512_over DWORD 00000009h, 00000009h, 00000009h, 00000009h + DWORD 00000009h, 00000009h, 00000009h, 00000009h + DWORD 00000009h, 00000009h, 00000009h, 00000009h + DWORD 00000009h, 00000009h, 00000009h, 00000009h +ptr_L_mldsa_extract_coeffs_eta4_avx512_over QWORD L_mldsa_extract_coeffs_eta4_avx512_over +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh +ptr_L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles QWORD L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta4_avx512_table DWORD 00000004h, 00000003h, 00000002h, 00000001h + DWORD 00000000h, 0ffffffffh, 0fffffffeh, 0fffffffdh + DWORD 0fffffffch, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_extract_coeffs_eta4_avx512_table QWORD L_mldsa_extract_coeffs_eta4_avx512_table +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta4_avx512_dup DWORD 00000000h, 00000000h, 00000001h, 00000001h + DWORD 00000002h, 00000002h, 00000003h, 00000003h + DWORD 00000004h, 00000004h, 00000005h, 00000005h + DWORD 00000006h, 00000006h, 00000007h, 00000007h +ptr_L_mldsa_extract_coeffs_eta4_avx512_dup QWORD L_mldsa_extract_coeffs_eta4_avx512_dup +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_extract_coeffs_eta4_avx512_shift DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000000h, 00000004h, 00000000h, 00000004h +ptr_L_mldsa_extract_coeffs_eta4_avx512_shift QWORD L_mldsa_extract_coeffs_eta4_avx512_shift +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_extract_coeffs_eta4_avx512 PROC + push rbx + push r12 + push r13 + sub rsp, 16 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_extract_coeffs_eta4_avx512_dup + vmovdqu64 zmm3, ZMMWORD PTR L_mldsa_extract_coeffs_eta4_avx512_shift + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_extract_coeffs_eta4_avx512_mask_nibbles + vmovdqu64 zmm5, ZMMWORD PTR L_mldsa_extract_coeffs_eta4_avx512_over + vmovdqu64 zmm6, ZMMWORD PTR L_mldsa_extract_coeffs_eta4_avx512_table + mov r13, QWORD PTR [ptr_L_mldsa_extract_coeffs_eta4_avx512_table] + mov r10d, DWORD PTR [r9] + cmp r10d, 0 + jne L_mldsa_extract_coeffs_eta4_avx512_less_than_256 + vpmovzxbd ymm0, QWORD PTR [rcx] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+8] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+16] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+24] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+32] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+40] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+48] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+56] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+64] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+72] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+80] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+88] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+96] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+104] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpmovzxbd ymm0, QWORD PTR [rcx+112] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpmovzxbd ymm1, QWORD PTR [rcx+120] + vpermd zmm1, zmm2, zmm1 + vpsrlvd zmm1, zmm1, zmm3 + vpandd zmm1, zmm1, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + vpcmpd k1, zmm1, zmm5, 1 + vpermd zmm1, zmm1, zmm6 + vpcompressd [r8]{k1}, zmm1 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + sub edx, 128 + add rcx, 128 +L_mldsa_extract_coeffs_eta4_avx512_less_than_256: + cmp r10d, 240 + jg L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm +L_mldsa_extract_coeffs_eta4_avx512_start_one_zmm: + vpmovzxbd ymm0, QWORD PTR [rcx] + vpermd zmm0, zmm2, zmm0 + vpsrlvd zmm0, zmm0, zmm3 + vpandd zmm0, zmm0, zmm4 + vpcmpd k1, zmm0, zmm5, 1 + vpermd zmm0, zmm0, zmm6 + vpcompressd [r8]{k1}, zmm0 + kmovw eax, k1 + popcnt eax, eax + lea r8, QWORD PTR [r8+4*rax] + add r10d, eax + sub edx, 8 + add rcx, 8 + cmp edx, 8 + jl L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm + cmp r10d, 240 + jle L_mldsa_extract_coeffs_eta4_avx512_start_one_zmm +L_mldsa_extract_coeffs_eta4_avx512_less_than_zmm: + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta4_avx512_done +L_mldsa_extract_coeffs_eta4_avx512_start_byte: + cmp edx, 0 + je L_mldsa_extract_coeffs_eta4_avx512_done + movzx ebx, BYTE PTR [rcx] + add rcx, 1 + sub edx, 1 + mov eax, ebx + shr eax, 4 + and bl, 15 + xor r11, r11 + cmp bl, 9 + adc r11d, 0 + mov r12d, DWORD PTR [r13+4*rbx] + mov DWORD PTR [r8], r12d + add r10d, r11d + shl r11d, 2 + add r8, r11 + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta4_avx512_done + xor r11, r11 + cmp al, 9 + adc r11d, 0 + mov r12d, DWORD PTR [r13+4*rax] + mov DWORD PTR [r8], r12d + add r10d, r11d + shl r11d, 2 + add r8, r11 + cmp r10d, 256 + je L_mldsa_extract_coeffs_eta4_avx512_done + jmp L_mldsa_extract_coeffs_eta4_avx512_start_byte +L_mldsa_extract_coeffs_eta4_avx512_done: + mov DWORD PTR [r9], r10d + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + add rsp, 16 + pop r13 + pop r12 + pop rbx + ret +wc_mldsa_extract_coeffs_eta4_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_88_avx512_low DWORD 00017400h, 00017400h, 00017400h, 00017400h + DWORD 00017400h, 00017400h, 00017400h, 00017400h + DWORD 00017400h, 00017400h, 00017400h, 00017400h + DWORD 00017400h, 00017400h, 00017400h, 00017400h +ptr_L_mldsa_make_hint_88_avx512_low QWORD L_mldsa_make_hint_88_avx512_low +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_88_avx512_neg_low DWORD 0fffe8c00h, 0fffe8c00h, 0fffe8c00h, 0fffe8c00h + DWORD 0fffe8c00h, 0fffe8c00h, 0fffe8c00h, 0fffe8c00h + DWORD 0fffe8c00h, 0fffe8c00h, 0fffe8c00h, 0fffe8c00h + DWORD 0fffe8c00h, 0fffe8c00h, 0fffe8c00h, 0fffe8c00h +ptr_L_mldsa_make_hint_88_avx512_neg_low QWORD L_mldsa_make_hint_88_avx512_neg_low +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_88_avx512_seq DWORD 00000000h, 00000001h, 00000002h, 00000003h + DWORD 00000004h, 00000005h, 00000006h, 00000007h + DWORD 00000008h, 00000009h, 0000000ah, 0000000bh + DWORD 0000000ch, 0000000dh, 0000000eh, 0000000fh +ptr_L_mldsa_make_hint_88_avx512_seq QWORD L_mldsa_make_hint_88_avx512_seq +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_88_avx512_step DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h +ptr_L_mldsa_make_hint_88_avx512_step QWORD L_mldsa_make_hint_88_avx512_step +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_make_hint_88_avx512 PROC + push rbx + mov r10, QWORD PTR [rsp+48] + sub rsp, 16 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu64 zmm3, ZMMWORD PTR L_mldsa_make_hint_88_avx512_low + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_make_hint_88_avx512_neg_low + vmovdqu64 zmm1, ZMMWORD PTR L_mldsa_make_hint_88_avx512_seq + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_make_hint_88_avx512_step + vpxord zmm5, zmm5, zmm5 + xor rbx, rbx + movzx ebx, BYTE PTR [r10] + lea r9, QWORD PTR [r9+rbx] + vmovdqu64 zmm0, [rcx] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+64] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+64] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+128] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+128] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+192] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+192] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+256] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+256] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+320] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+320] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+384] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+384] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+448] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+448] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+512] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+512] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+576] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+576] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+640] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+640] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+704] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+704] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+768] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+768] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+832] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+832] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+896] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+896] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+960] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+960] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_88_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + mov BYTE PTR [r10], bl + xor eax, eax + jmp L_mldsa_make_hint_88_avx512_done +L_mldsa_make_hint_88_avx512_too_many: + mov eax, -1 +L_mldsa_make_hint_88_avx512_done: + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + add rsp, 16 + pop rbx + ret +wc_mldsa_make_hint_88_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_32_avx512_low DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h + DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h + DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h + DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h +ptr_L_mldsa_make_hint_32_avx512_low QWORD L_mldsa_make_hint_32_avx512_low +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_32_avx512_neg_low DWORD 0fffc0100h, 0fffc0100h, 0fffc0100h, 0fffc0100h + DWORD 0fffc0100h, 0fffc0100h, 0fffc0100h, 0fffc0100h + DWORD 0fffc0100h, 0fffc0100h, 0fffc0100h, 0fffc0100h + DWORD 0fffc0100h, 0fffc0100h, 0fffc0100h, 0fffc0100h +ptr_L_mldsa_make_hint_32_avx512_neg_low QWORD L_mldsa_make_hint_32_avx512_neg_low +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_32_avx512_seq DWORD 00000000h, 00000001h, 00000002h, 00000003h + DWORD 00000004h, 00000005h, 00000006h, 00000007h + DWORD 00000008h, 00000009h, 0000000ah, 0000000bh + DWORD 0000000ch, 0000000dh, 0000000eh, 0000000fh +ptr_L_mldsa_make_hint_32_avx512_seq QWORD L_mldsa_make_hint_32_avx512_seq +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_make_hint_32_avx512_step DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h + DWORD 00000010h, 00000010h, 00000010h, 00000010h +ptr_L_mldsa_make_hint_32_avx512_step QWORD L_mldsa_make_hint_32_avx512_step +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_make_hint_32_avx512 PROC + push rbx + mov r10, QWORD PTR [rsp+48] + sub rsp, 16 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu64 zmm3, ZMMWORD PTR L_mldsa_make_hint_32_avx512_low + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_make_hint_32_avx512_neg_low + vmovdqu64 zmm1, ZMMWORD PTR L_mldsa_make_hint_32_avx512_seq + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_make_hint_32_avx512_step + vpxord zmm5, zmm5, zmm5 + xor rbx, rbx + movzx ebx, BYTE PTR [r10] + lea r9, QWORD PTR [r9+rbx] + vmovdqu64 zmm0, [rcx] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+64] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+64] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+128] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+128] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+192] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+192] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+256] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+256] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+320] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+320] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+384] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+384] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+448] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+448] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+512] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+512] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+576] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+576] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+640] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+640] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+704] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+704] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+768] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+768] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+832] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+832] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+896] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+896] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + vpaddd zmm1, zmm1, zmm2 + vmovdqu64 zmm0, [rcx+960] + vpcmpd k1, zmm0, zmm3, 6 + vpcmpd k2, zmm0, zmm4, 1 + vpcmpd k3, zmm0, zmm4, 0 + vmovdqu64 zmm6, [rdx+960] + vpcmpd k4, zmm6, zmm5, 4 + kandw k3, k3, k4 + korw k1, k1, k2 + korw k1, k1, k3 + vpcompressd zmm0{k1}{z}, zmm1 + kmovw r11d, k1 + popcnt r11d, r11d + add ebx, r11d + cmp ebx, r8d + jg L_mldsa_make_hint_32_avx512_too_many + mov eax, 4294967295 + bzhi eax, eax, r11d + kmovw k4, eax + vpmovdb OWORD PTR [r9]{k4}, zmm0 + lea r9, QWORD PTR [r9+r11] + mov BYTE PTR [r10], bl + xor eax, eax + jmp L_mldsa_make_hint_32_avx512_done +L_mldsa_make_hint_32_avx512_too_many: + mov eax, -1 +L_mldsa_make_hint_32_avx512_done: + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + add rsp, 16 + pop rbx + ret +wc_mldsa_make_hint_32_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_use_hint_88_avx512 PROC + push r12 + push r13 + push r14 + mov rax, rdx + mov rdx, rcx + sub rsp, 48 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + mov r14, 8380417 + vmovd xmm3, r14d + vpbroadcastd zmm3, xmm3 + mov r14, 95232 + vmovd xmm4, r14d + vpbroadcastd zmm4, xmm4 + mov r14, 190464 + vmovd xmm5, r14d + vpbroadcastd zmm5, xmm5 + mov r14, 4190164 + vmovd xmm6, r14d + vpbroadcastd zmm6, xmm6 + mov r14, 44 + vmovd xmm7, r14d + vpbroadcastd zmm7, xmm7 + mov r14, 1 + vmovd xmm8, r14d + vpbroadcastd zmm8, xmm8 + xor r9, r9 + mov r10b, [rax] + ; 1/4 vectors + mov r8b, [rax+80] + vmovdqu64 zmm0, [rdx] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_12: +L_mldsa_use_hint_88_avx512_hints_next_0_0: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + jge L_mldsa_use_hint_88_avx512_hints_done_0_0 mov cl, r10b - sub cl, 192 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_12 + jge L_mldsa_use_hint_88_avx512_hints_done_0_0 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_12 -L_mldsa_use_hint_88_avx2_hints_done_1_12: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1792], ymm4 - vmovdqu YMMWORD PTR [rdx+1824], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1856] - vmovdqu ymm1, YMMWORD PTR [rdx+1888] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_0 +L_mldsa_use_hint_88_avx512_hints_done_0_0: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx], zmm2 + vmovdqu64 zmm0, [rdx+64] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_13: +L_mldsa_use_hint_88_avx512_hints_next_0_1: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + jge L_mldsa_use_hint_88_avx512_hints_done_0_1 mov cl, r10b - sub cl, 208 + sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_13 + jge L_mldsa_use_hint_88_avx512_hints_done_0_1 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_13 -L_mldsa_use_hint_88_avx2_hints_done_1_13: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1856], ymm4 - vmovdqu YMMWORD PTR [rdx+1888], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1920] - vmovdqu ymm1, YMMWORD PTR [rdx+1952] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_1 +L_mldsa_use_hint_88_avx512_hints_done_0_1: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+64], zmm2 + vmovdqu64 zmm0, [rdx+128] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 - xor r12, r12 - xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_14: - cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_14 - mov cl, r10b - sub cl, 224 - cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_14 - mov r13, r11 - shl r13, cl - or r12, r13 - inc r9b - mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_14 -L_mldsa_use_hint_88_avx2_hints_done_1_14: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1920], ymm4 - vmovdqu YMMWORD PTR [rdx+1952], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+1984] - vmovdqu ymm1, YMMWORD PTR [rdx+2016] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_0_2: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_0_2 + mov cl, r10b + sub cl, 32 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_0_2 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_0_2 +L_mldsa_use_hint_88_avx512_hints_done_0_2: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+128], zmm2 + vmovdqu64 zmm0, [rdx+192] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_1_15: +L_mldsa_use_hint_88_avx512_hints_next_0_3: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + jge L_mldsa_use_hint_88_avx512_hints_done_0_3 mov cl, r10b - sub cl, 240 + sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_1_15 + jge L_mldsa_use_hint_88_avx512_hints_done_0_3 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_1_15 -L_mldsa_use_hint_88_avx2_hints_done_1_15: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+1984], ymm4 - vmovdqu YMMWORD PTR [rdx+2016], ymm5 - ; 3/4 vectors - mov r8b, [rax+82] - vmovdqu ymm0, YMMWORD PTR [rdx+2048] - vmovdqu ymm1, YMMWORD PTR [rdx+2080] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_3 +L_mldsa_use_hint_88_avx512_hints_done_0_3: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+192], zmm2 + vmovdqu64 zmm0, [rdx+256] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_0: +L_mldsa_use_hint_88_avx512_hints_next_0_4: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + jge L_mldsa_use_hint_88_avx512_hints_done_0_4 mov cl, r10b + sub cl, 64 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_0 + jge L_mldsa_use_hint_88_avx512_hints_done_0_4 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_0 -L_mldsa_use_hint_88_avx2_hints_done_2_0: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2048], ymm4 - vmovdqu YMMWORD PTR [rdx+2080], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2112] - vmovdqu ymm1, YMMWORD PTR [rdx+2144] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_4 +L_mldsa_use_hint_88_avx512_hints_done_0_4: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+256], zmm2 + vmovdqu64 zmm0, [rdx+320] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_1: +L_mldsa_use_hint_88_avx512_hints_next_0_5: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + jge L_mldsa_use_hint_88_avx512_hints_done_0_5 mov cl, r10b - sub cl, 16 + sub cl, 80 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_1 + jge L_mldsa_use_hint_88_avx512_hints_done_0_5 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_1 -L_mldsa_use_hint_88_avx2_hints_done_2_1: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2112], ymm4 - vmovdqu YMMWORD PTR [rdx+2144], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2176] - vmovdqu ymm1, YMMWORD PTR [rdx+2208] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_5 +L_mldsa_use_hint_88_avx512_hints_done_0_5: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+320], zmm2 + vmovdqu64 zmm0, [rdx+384] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_2: +L_mldsa_use_hint_88_avx512_hints_next_0_6: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + jge L_mldsa_use_hint_88_avx512_hints_done_0_6 mov cl, r10b - sub cl, 32 + sub cl, 96 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_2 + jge L_mldsa_use_hint_88_avx512_hints_done_0_6 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_2 -L_mldsa_use_hint_88_avx2_hints_done_2_2: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2176], ymm4 - vmovdqu YMMWORD PTR [rdx+2208], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2240] - vmovdqu ymm1, YMMWORD PTR [rdx+2272] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_6 +L_mldsa_use_hint_88_avx512_hints_done_0_6: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+384], zmm2 + vmovdqu64 zmm0, [rdx+448] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_3: +L_mldsa_use_hint_88_avx512_hints_next_0_7: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + jge L_mldsa_use_hint_88_avx512_hints_done_0_7 mov cl, r10b - sub cl, 48 + sub cl, 112 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_3 + jge L_mldsa_use_hint_88_avx512_hints_done_0_7 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_3 -L_mldsa_use_hint_88_avx2_hints_done_2_3: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2240], ymm4 - vmovdqu YMMWORD PTR [rdx+2272], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2304] - vmovdqu ymm1, YMMWORD PTR [rdx+2336] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_7 +L_mldsa_use_hint_88_avx512_hints_done_0_7: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+448], zmm2 + vmovdqu64 zmm0, [rdx+512] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_4: +L_mldsa_use_hint_88_avx512_hints_next_0_8: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + jge L_mldsa_use_hint_88_avx512_hints_done_0_8 mov cl, r10b - sub cl, 64 + sub cl, 128 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_4 + jge L_mldsa_use_hint_88_avx512_hints_done_0_8 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_4 -L_mldsa_use_hint_88_avx2_hints_done_2_4: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2304], ymm4 - vmovdqu YMMWORD PTR [rdx+2336], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2368] - vmovdqu ymm1, YMMWORD PTR [rdx+2400] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_8 +L_mldsa_use_hint_88_avx512_hints_done_0_8: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+512], zmm2 + vmovdqu64 zmm0, [rdx+576] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_0_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_0_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_0_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_0_9 +L_mldsa_use_hint_88_avx512_hints_done_0_9: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+576], zmm2 + vmovdqu64 zmm0, [rdx+640] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_0_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_0_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_0_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_0_10 +L_mldsa_use_hint_88_avx512_hints_done_0_10: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+640], zmm2 + vmovdqu64 zmm0, [rdx+704] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_0_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_0_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_0_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_0_11 +L_mldsa_use_hint_88_avx512_hints_done_0_11: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+704], zmm2 + vmovdqu64 zmm0, [rdx+768] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_0_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_0_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_0_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_0_12 +L_mldsa_use_hint_88_avx512_hints_done_0_12: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+768], zmm2 + vmovdqu64 zmm0, [rdx+832] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_5: +L_mldsa_use_hint_88_avx512_hints_next_0_13: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + jge L_mldsa_use_hint_88_avx512_hints_done_0_13 mov cl, r10b - sub cl, 80 + sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_5 + jge L_mldsa_use_hint_88_avx512_hints_done_0_13 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_5 -L_mldsa_use_hint_88_avx2_hints_done_2_5: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2368], ymm4 - vmovdqu YMMWORD PTR [rdx+2400], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2432] - vmovdqu ymm1, YMMWORD PTR [rdx+2464] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_13 +L_mldsa_use_hint_88_avx512_hints_done_0_13: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+832], zmm2 + vmovdqu64 zmm0, [rdx+896] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_6: +L_mldsa_use_hint_88_avx512_hints_next_0_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + jge L_mldsa_use_hint_88_avx512_hints_done_0_14 mov cl, r10b - sub cl, 96 + sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_6 + jge L_mldsa_use_hint_88_avx512_hints_done_0_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_6 -L_mldsa_use_hint_88_avx2_hints_done_2_6: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2432], ymm4 - vmovdqu YMMWORD PTR [rdx+2464], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2496] - vmovdqu ymm1, YMMWORD PTR [rdx+2528] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_14 +L_mldsa_use_hint_88_avx512_hints_done_0_14: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+896], zmm2 + vmovdqu64 zmm0, [rdx+960] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_7: +L_mldsa_use_hint_88_avx512_hints_next_0_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + jge L_mldsa_use_hint_88_avx512_hints_done_0_15 mov cl, r10b - sub cl, 112 + sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_7 + jge L_mldsa_use_hint_88_avx512_hints_done_0_15 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_7 -L_mldsa_use_hint_88_avx2_hints_done_2_7: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2496], ymm4 - vmovdqu YMMWORD PTR [rdx+2528], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2560] - vmovdqu ymm1, YMMWORD PTR [rdx+2592] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_0_15 +L_mldsa_use_hint_88_avx512_hints_done_0_15: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+960], zmm2 + ; 2/4 vectors + mov r8b, [rax+81] + vmovdqu64 zmm0, [rdx+1024] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_8: +L_mldsa_use_hint_88_avx512_hints_next_1_0: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + jge L_mldsa_use_hint_88_avx512_hints_done_1_0 mov cl, r10b - sub cl, 128 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_8 + jge L_mldsa_use_hint_88_avx512_hints_done_1_0 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_8 -L_mldsa_use_hint_88_avx2_hints_done_2_8: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2560], ymm4 - vmovdqu YMMWORD PTR [rdx+2592], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2624] - vmovdqu ymm1, YMMWORD PTR [rdx+2656] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_0 +L_mldsa_use_hint_88_avx512_hints_done_1_0: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1024], zmm2 + vmovdqu64 zmm0, [rdx+1088] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_9: +L_mldsa_use_hint_88_avx512_hints_next_1_1: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + jge L_mldsa_use_hint_88_avx512_hints_done_1_1 mov cl, r10b - sub cl, 144 + sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_9 + jge L_mldsa_use_hint_88_avx512_hints_done_1_1 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_9 -L_mldsa_use_hint_88_avx2_hints_done_2_9: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2624], ymm4 - vmovdqu YMMWORD PTR [rdx+2656], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2688] - vmovdqu ymm1, YMMWORD PTR [rdx+2720] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_1 +L_mldsa_use_hint_88_avx512_hints_done_1_1: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1088], zmm2 + vmovdqu64 zmm0, [rdx+1152] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_10: +L_mldsa_use_hint_88_avx512_hints_next_1_2: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + jge L_mldsa_use_hint_88_avx512_hints_done_1_2 mov cl, r10b - sub cl, 160 + sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_10 + jge L_mldsa_use_hint_88_avx512_hints_done_1_2 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_10 -L_mldsa_use_hint_88_avx2_hints_done_2_10: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2688], ymm4 - vmovdqu YMMWORD PTR [rdx+2720], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2752] - vmovdqu ymm1, YMMWORD PTR [rdx+2784] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_2 +L_mldsa_use_hint_88_avx512_hints_done_1_2: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1152], zmm2 + vmovdqu64 zmm0, [rdx+1216] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_3: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_3 + mov cl, r10b + sub cl, 48 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_3 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_3 +L_mldsa_use_hint_88_avx512_hints_done_1_3: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1216], zmm2 + vmovdqu64 zmm0, [rdx+1280] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_4 +L_mldsa_use_hint_88_avx512_hints_done_1_4: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1280], zmm2 + vmovdqu64 zmm0, [rdx+1344] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_5 +L_mldsa_use_hint_88_avx512_hints_done_1_5: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1344], zmm2 + vmovdqu64 zmm0, [rdx+1408] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_6 +L_mldsa_use_hint_88_avx512_hints_done_1_6: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1408], zmm2 + vmovdqu64 zmm0, [rdx+1472] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_7: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_7 + mov cl, r10b + sub cl, 112 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_7 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_7 +L_mldsa_use_hint_88_avx512_hints_done_1_7: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1472], zmm2 + vmovdqu64 zmm0, [rdx+1536] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_11: +L_mldsa_use_hint_88_avx512_hints_next_1_8: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + jge L_mldsa_use_hint_88_avx512_hints_done_1_8 + mov cl, r10b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_8 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_8 +L_mldsa_use_hint_88_avx512_hints_done_1_8: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1536], zmm2 + vmovdqu64 zmm0, [rdx+1600] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_9 +L_mldsa_use_hint_88_avx512_hints_done_1_9: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1600], zmm2 + vmovdqu64 zmm0, [rdx+1664] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_1_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_1_10 +L_mldsa_use_hint_88_avx512_hints_done_1_10: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1664], zmm2 + vmovdqu64 zmm0, [rdx+1728] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_1_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_1_11 mov cl, r10b sub cl, 176 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_11 + jge L_mldsa_use_hint_88_avx512_hints_done_1_11 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_11 -L_mldsa_use_hint_88_avx2_hints_done_2_11: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2752], ymm4 - vmovdqu YMMWORD PTR [rdx+2784], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2816] - vmovdqu ymm1, YMMWORD PTR [rdx+2848] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_11 +L_mldsa_use_hint_88_avx512_hints_done_1_11: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1728], zmm2 + vmovdqu64 zmm0, [rdx+1792] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_12: +L_mldsa_use_hint_88_avx512_hints_next_1_12: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + jge L_mldsa_use_hint_88_avx512_hints_done_1_12 mov cl, r10b sub cl, 192 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_12 + jge L_mldsa_use_hint_88_avx512_hints_done_1_12 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_12 -L_mldsa_use_hint_88_avx2_hints_done_2_12: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2816], ymm4 - vmovdqu YMMWORD PTR [rdx+2848], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2880] - vmovdqu ymm1, YMMWORD PTR [rdx+2912] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_12 +L_mldsa_use_hint_88_avx512_hints_done_1_12: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1792], zmm2 + vmovdqu64 zmm0, [rdx+1856] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_13: +L_mldsa_use_hint_88_avx512_hints_next_1_13: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + jge L_mldsa_use_hint_88_avx512_hints_done_1_13 mov cl, r10b sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_13 + jge L_mldsa_use_hint_88_avx512_hints_done_1_13 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_13 -L_mldsa_use_hint_88_avx2_hints_done_2_13: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2880], ymm4 - vmovdqu YMMWORD PTR [rdx+2912], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+2944] - vmovdqu ymm1, YMMWORD PTR [rdx+2976] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_13 +L_mldsa_use_hint_88_avx512_hints_done_1_13: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1856], zmm2 + vmovdqu64 zmm0, [rdx+1920] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_14: +L_mldsa_use_hint_88_avx512_hints_next_1_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_14 + jge L_mldsa_use_hint_88_avx512_hints_done_1_14 mov cl, r10b sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_14 + jge L_mldsa_use_hint_88_avx512_hints_done_1_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_14 -L_mldsa_use_hint_88_avx2_hints_done_2_14: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+2944], ymm4 - vmovdqu YMMWORD PTR [rdx+2976], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3008] - vmovdqu ymm1, YMMWORD PTR [rdx+3040] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_14 +L_mldsa_use_hint_88_avx512_hints_done_1_14: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1920], zmm2 + vmovdqu64 zmm0, [rdx+1984] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_2_15: +L_mldsa_use_hint_88_avx512_hints_next_1_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + jge L_mldsa_use_hint_88_avx512_hints_done_1_15 mov cl, r10b sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_2_15 + jge L_mldsa_use_hint_88_avx512_hints_done_1_15 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_2_15 -L_mldsa_use_hint_88_avx2_hints_done_2_15: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3008], ymm4 - vmovdqu YMMWORD PTR [rdx+3040], ymm5 - ; 4/4 vectors - mov r8b, [rax+83] - vmovdqu ymm0, YMMWORD PTR [rdx+3072] - vmovdqu ymm1, YMMWORD PTR [rdx+3104] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_1_15 +L_mldsa_use_hint_88_avx512_hints_done_1_15: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+1984], zmm2 + ; 3/4 vectors + mov r8b, [rax+82] + vmovdqu64 zmm0, [rdx+2048] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_0: +L_mldsa_use_hint_88_avx512_hints_next_2_0: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + jge L_mldsa_use_hint_88_avx512_hints_done_2_0 mov cl, r10b cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_0 + jge L_mldsa_use_hint_88_avx512_hints_done_2_0 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_0 -L_mldsa_use_hint_88_avx2_hints_done_3_0: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3072], ymm4 - vmovdqu YMMWORD PTR [rdx+3104], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3136] - vmovdqu ymm1, YMMWORD PTR [rdx+3168] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_0 +L_mldsa_use_hint_88_avx512_hints_done_2_0: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2048], zmm2 + vmovdqu64 zmm0, [rdx+2112] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_1: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_1 + mov cl, r10b + sub cl, 16 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_1 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_1 +L_mldsa_use_hint_88_avx512_hints_done_2_1: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2112], zmm2 + vmovdqu64 zmm0, [rdx+2176] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_2: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_2 + mov cl, r10b + sub cl, 32 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_2 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_2 +L_mldsa_use_hint_88_avx512_hints_done_2_2: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2176], zmm2 + vmovdqu64 zmm0, [rdx+2240] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_1: +L_mldsa_use_hint_88_avx512_hints_next_2_3: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_1 + jge L_mldsa_use_hint_88_avx512_hints_done_2_3 mov cl, r10b - sub cl, 16 + sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_1 + jge L_mldsa_use_hint_88_avx512_hints_done_2_3 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_1 -L_mldsa_use_hint_88_avx2_hints_done_3_1: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3136], ymm4 - vmovdqu YMMWORD PTR [rdx+3168], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3200] - vmovdqu ymm1, YMMWORD PTR [rdx+3232] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_3 +L_mldsa_use_hint_88_avx512_hints_done_2_3: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2240], zmm2 + vmovdqu64 zmm0, [rdx+2304] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_2: +L_mldsa_use_hint_88_avx512_hints_next_2_4: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_2 + jge L_mldsa_use_hint_88_avx512_hints_done_2_4 mov cl, r10b - sub cl, 32 + sub cl, 64 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_2 + jge L_mldsa_use_hint_88_avx512_hints_done_2_4 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_2 -L_mldsa_use_hint_88_avx2_hints_done_3_2: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3200], ymm4 - vmovdqu YMMWORD PTR [rdx+3232], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3264] - vmovdqu ymm1, YMMWORD PTR [rdx+3296] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_4 +L_mldsa_use_hint_88_avx512_hints_done_2_4: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2304], zmm2 + vmovdqu64 zmm0, [rdx+2368] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_3: +L_mldsa_use_hint_88_avx512_hints_next_2_5: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_3 + jge L_mldsa_use_hint_88_avx512_hints_done_2_5 mov cl, r10b - sub cl, 48 + sub cl, 80 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_3 + jge L_mldsa_use_hint_88_avx512_hints_done_2_5 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_3 -L_mldsa_use_hint_88_avx2_hints_done_3_3: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3264], ymm4 - vmovdqu YMMWORD PTR [rdx+3296], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3328] - vmovdqu ymm1, YMMWORD PTR [rdx+3360] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_5 +L_mldsa_use_hint_88_avx512_hints_done_2_5: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2368], zmm2 + vmovdqu64 zmm0, [rdx+2432] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_4: +L_mldsa_use_hint_88_avx512_hints_next_2_6: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + jge L_mldsa_use_hint_88_avx512_hints_done_2_6 mov cl, r10b - sub cl, 64 + sub cl, 96 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_4 + jge L_mldsa_use_hint_88_avx512_hints_done_2_6 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_4 -L_mldsa_use_hint_88_avx2_hints_done_3_4: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3328], ymm4 - vmovdqu YMMWORD PTR [rdx+3360], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3392] - vmovdqu ymm1, YMMWORD PTR [rdx+3424] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_6 +L_mldsa_use_hint_88_avx512_hints_done_2_6: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2432], zmm2 + vmovdqu64 zmm0, [rdx+2496] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_5: +L_mldsa_use_hint_88_avx512_hints_next_2_7: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + jge L_mldsa_use_hint_88_avx512_hints_done_2_7 mov cl, r10b - sub cl, 80 + sub cl, 112 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_5 + jge L_mldsa_use_hint_88_avx512_hints_done_2_7 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_5 -L_mldsa_use_hint_88_avx2_hints_done_3_5: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3392], ymm4 - vmovdqu YMMWORD PTR [rdx+3424], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3456] - vmovdqu ymm1, YMMWORD PTR [rdx+3488] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_7 +L_mldsa_use_hint_88_avx512_hints_done_2_7: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2496], zmm2 + vmovdqu64 zmm0, [rdx+2560] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_6: +L_mldsa_use_hint_88_avx512_hints_next_2_8: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + jge L_mldsa_use_hint_88_avx512_hints_done_2_8 mov cl, r10b - sub cl, 96 + sub cl, 128 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_6 + jge L_mldsa_use_hint_88_avx512_hints_done_2_8 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_6 -L_mldsa_use_hint_88_avx2_hints_done_3_6: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3456], ymm4 - vmovdqu YMMWORD PTR [rdx+3488], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3520] - vmovdqu ymm1, YMMWORD PTR [rdx+3552] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_8 +L_mldsa_use_hint_88_avx512_hints_done_2_8: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2560], zmm2 + vmovdqu64 zmm0, [rdx+2624] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_9 +L_mldsa_use_hint_88_avx512_hints_done_2_9: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2624], zmm2 + vmovdqu64 zmm0, [rdx+2688] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_10 +L_mldsa_use_hint_88_avx512_hints_done_2_10: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2688], zmm2 + vmovdqu64 zmm0, [rdx+2752] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_11 +L_mldsa_use_hint_88_avx512_hints_done_2_11: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2752], zmm2 + vmovdqu64 zmm0, [rdx+2816] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_12 +L_mldsa_use_hint_88_avx512_hints_done_2_12: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2816], zmm2 + vmovdqu64 zmm0, [rdx+2880] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_2_13: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_2_13 + mov cl, r10b + sub cl, 208 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_2_13 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_2_13 +L_mldsa_use_hint_88_avx512_hints_done_2_13: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2880], zmm2 + vmovdqu64 zmm0, [rdx+2944] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_7: +L_mldsa_use_hint_88_avx512_hints_next_2_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + jge L_mldsa_use_hint_88_avx512_hints_done_2_14 mov cl, r10b - sub cl, 112 + sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_7 + jge L_mldsa_use_hint_88_avx512_hints_done_2_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_7 -L_mldsa_use_hint_88_avx2_hints_done_3_7: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3520], ymm4 - vmovdqu YMMWORD PTR [rdx+3552], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3584] - vmovdqu ymm1, YMMWORD PTR [rdx+3616] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_14 +L_mldsa_use_hint_88_avx512_hints_done_2_14: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+2944], zmm2 + vmovdqu64 zmm0, [rdx+3008] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_8: +L_mldsa_use_hint_88_avx512_hints_next_2_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + jge L_mldsa_use_hint_88_avx512_hints_done_2_15 mov cl, r10b - sub cl, 128 + sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_8 + jge L_mldsa_use_hint_88_avx512_hints_done_2_15 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_8 -L_mldsa_use_hint_88_avx2_hints_done_3_8: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3584], ymm4 - vmovdqu YMMWORD PTR [rdx+3616], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3648] - vmovdqu ymm1, YMMWORD PTR [rdx+3680] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_2_15 +L_mldsa_use_hint_88_avx512_hints_done_2_15: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3008], zmm2 + ; 4/4 vectors + mov r8b, [rax+83] + vmovdqu64 zmm0, [rdx+3072] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_9: +L_mldsa_use_hint_88_avx512_hints_next_3_0: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_9 + jge L_mldsa_use_hint_88_avx512_hints_done_3_0 mov cl, r10b - sub cl, 144 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_9 + jge L_mldsa_use_hint_88_avx512_hints_done_3_0 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_9 -L_mldsa_use_hint_88_avx2_hints_done_3_9: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3648], ymm4 - vmovdqu YMMWORD PTR [rdx+3680], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3712] - vmovdqu ymm1, YMMWORD PTR [rdx+3744] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_0 +L_mldsa_use_hint_88_avx512_hints_done_3_0: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3072], zmm2 + vmovdqu64 zmm0, [rdx+3136] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_10: +L_mldsa_use_hint_88_avx512_hints_next_3_1: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_10 + jge L_mldsa_use_hint_88_avx512_hints_done_3_1 mov cl, r10b - sub cl, 160 + sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_10 + jge L_mldsa_use_hint_88_avx512_hints_done_3_1 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_10 -L_mldsa_use_hint_88_avx2_hints_done_3_10: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3712], ymm4 - vmovdqu YMMWORD PTR [rdx+3744], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3776] - vmovdqu ymm1, YMMWORD PTR [rdx+3808] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_1 +L_mldsa_use_hint_88_avx512_hints_done_3_1: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3136], zmm2 + vmovdqu64 zmm0, [rdx+3200] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_11: +L_mldsa_use_hint_88_avx512_hints_next_3_2: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_11 + jge L_mldsa_use_hint_88_avx512_hints_done_3_2 mov cl, r10b - sub cl, 176 + sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_11 + jge L_mldsa_use_hint_88_avx512_hints_done_3_2 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_11 -L_mldsa_use_hint_88_avx2_hints_done_3_11: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3776], ymm4 - vmovdqu YMMWORD PTR [rdx+3808], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3840] - vmovdqu ymm1, YMMWORD PTR [rdx+3872] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_2 +L_mldsa_use_hint_88_avx512_hints_done_3_2: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3200], zmm2 + vmovdqu64 zmm0, [rdx+3264] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_12: +L_mldsa_use_hint_88_avx512_hints_next_3_3: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_12 + jge L_mldsa_use_hint_88_avx512_hints_done_3_3 mov cl, r10b - sub cl, 192 + sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_12 + jge L_mldsa_use_hint_88_avx512_hints_done_3_3 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_12 -L_mldsa_use_hint_88_avx2_hints_done_3_12: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3840], ymm4 - vmovdqu YMMWORD PTR [rdx+3872], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3904] - vmovdqu ymm1, YMMWORD PTR [rdx+3936] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_3 +L_mldsa_use_hint_88_avx512_hints_done_3_3: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3264], zmm2 + vmovdqu64 zmm0, [rdx+3328] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_4: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_4 + mov cl, r10b + sub cl, 64 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_4 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_4 +L_mldsa_use_hint_88_avx512_hints_done_3_4: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3328], zmm2 + vmovdqu64 zmm0, [rdx+3392] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_5: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_5 + mov cl, r10b + sub cl, 80 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_5 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_5 +L_mldsa_use_hint_88_avx512_hints_done_3_5: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3392], zmm2 + vmovdqu64 zmm0, [rdx+3456] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_6: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_6 + mov cl, r10b + sub cl, 96 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_6 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_6 +L_mldsa_use_hint_88_avx512_hints_done_3_6: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3456], zmm2 + vmovdqu64 zmm0, [rdx+3520] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_7: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_7 + mov cl, r10b + sub cl, 112 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_7 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_7 +L_mldsa_use_hint_88_avx512_hints_done_3_7: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3520], zmm2 + vmovdqu64 zmm0, [rdx+3584] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_13: +L_mldsa_use_hint_88_avx512_hints_next_3_8: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_13 + jge L_mldsa_use_hint_88_avx512_hints_done_3_8 + mov cl, r10b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_8 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_8 +L_mldsa_use_hint_88_avx512_hints_done_3_8: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3584], zmm2 + vmovdqu64 zmm0, [rdx+3648] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_9: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_9 + mov cl, r10b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_9 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_9 +L_mldsa_use_hint_88_avx512_hints_done_3_9: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3648], zmm2 + vmovdqu64 zmm0, [rdx+3712] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_10: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_10 + mov cl, r10b + sub cl, 160 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_10 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_10 +L_mldsa_use_hint_88_avx512_hints_done_3_10: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3712], zmm2 + vmovdqu64 zmm0, [rdx+3776] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_11: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_11 + mov cl, r10b + sub cl, 176 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_11 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_11 +L_mldsa_use_hint_88_avx512_hints_done_3_11: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3776], zmm2 + vmovdqu64 zmm0, [rdx+3840] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_12: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_12 + mov cl, r10b + sub cl, 192 + cmp rcx, 16 + jge L_mldsa_use_hint_88_avx512_hints_done_3_12 + mov r13, r11 + shl r13, cl + or r12, r13 + inc r9b + mov r10b, [rax+r9] + jmp L_mldsa_use_hint_88_avx512_hints_next_3_12 +L_mldsa_use_hint_88_avx512_hints_done_3_12: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3840], zmm2 + vmovdqu64 zmm0, [rdx+3904] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + mov r11, 1 + xor r12, r12 + xor rcx, rcx +L_mldsa_use_hint_88_avx512_hints_next_3_13: + cmp r9b, r8b + jge L_mldsa_use_hint_88_avx512_hints_done_3_13 mov cl, r10b sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_13 + jge L_mldsa_use_hint_88_avx512_hints_done_3_13 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_13 -L_mldsa_use_hint_88_avx2_hints_done_3_13: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3904], ymm4 - vmovdqu YMMWORD PTR [rdx+3936], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+3968] - vmovdqu ymm1, YMMWORD PTR [rdx+4000] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_13 +L_mldsa_use_hint_88_avx512_hints_done_3_13: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3904], zmm2 + vmovdqu64 zmm0, [rdx+3968] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_14: +L_mldsa_use_hint_88_avx512_hints_next_3_14: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_14 + jge L_mldsa_use_hint_88_avx512_hints_done_3_14 mov cl, r10b sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_14 + jge L_mldsa_use_hint_88_avx512_hints_done_3_14 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_14 -L_mldsa_use_hint_88_avx2_hints_done_3_14: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+3968], ymm4 - vmovdqu YMMWORD PTR [rdx+4000], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+4032] - vmovdqu ymm1, YMMWORD PTR [rdx+4064] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpmulld ymm4, ymm0, ymm12 - vpmulld ymm5, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm11 - vpaddd ymm5, ymm5, ymm11 - vpsrld ymm4, ymm4, 23 - vpsrld ymm5, ymm5, 23 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpcmpeqd ymm0, ymm4, ymm12 - vpcmpeqd ymm1, ymm5, ymm12 - vpaddd ymm2, ymm2, ymm0 - vpaddd ymm3, ymm3, ymm1 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_14 +L_mldsa_use_hint_88_avx512_hints_done_3_14: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+3968], zmm2 + vmovdqu64 zmm0, [rdx+4032] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm2, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm6 + vpsrld zmm2, zmm2, 23 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpcmpeqd k2, zmm2, zmm7 + vpsubd zmm1{k2}, zmm1, zmm8 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 mov r11, 1 xor r12, r12 xor rcx, rcx -L_mldsa_use_hint_88_avx2_hints_next_3_15: +L_mldsa_use_hint_88_avx512_hints_next_3_15: cmp r9b, r8b - jge L_mldsa_use_hint_88_avx2_hints_done_3_15 + jge L_mldsa_use_hint_88_avx512_hints_done_3_15 mov cl, r10b sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_88_avx2_hints_done_3_15 + jge L_mldsa_use_hint_88_avx512_hints_done_3_15 mov r13, r11 shl r13, cl or r12, r13 inc r9b mov r10b, [rax+r9] - jmp L_mldsa_use_hint_88_avx2_hints_next_3_15 -L_mldsa_use_hint_88_avx2_hints_done_3_15: - movd xmm6, r12d - shr r12, 8 - movd xmm7, r12d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpcmpgtd ymm0, ymm12, ymm4 - vpcmpgtd ymm1, ymm12, ymm5 - vpand ymm4, ymm4, ymm0 - vpand ymm5, ymm5, ymm1 - vpsrad ymm0, ymm4, 31 - vpsrad ymm1, ymm5, 31 - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpaddd ymm4, ymm4, ymm0 - vpaddd ymm5, ymm5, ymm1 - vmovdqu YMMWORD PTR [rdx+4032], ymm4 - vmovdqu YMMWORD PTR [rdx+4064], ymm5 + jmp L_mldsa_use_hint_88_avx512_hints_next_3_15 +L_mldsa_use_hint_88_avx512_hints_done_3_15: + kmovw k1, r12d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpcmpgtd k3, zmm7, zmm2 + vmovdqa32 zmm2{k3}{z}, zmm2 + vpsrad zmm0, zmm2, 31 + vpandd zmm0, zmm0, zmm7 + vpaddd zmm2, zmm2, zmm0 + vmovdqu64 [rdx+4032], zmm2 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp+8] - vmovdqu xmm7, OWORD PTR [rsp+24] - vmovdqu xmm8, OWORD PTR [rsp+40] - vmovdqu xmm9, OWORD PTR [rsp+56] - vmovdqu xmm10, OWORD PTR [rsp+72] - vmovdqu xmm11, OWORD PTR [rsp+88] - vmovdqu xmm12, OWORD PTR [rsp+104] - vmovdqu xmm13, OWORD PTR [rsp+120] - vmovdqu xmm14, OWORD PTR [rsp+136] - add rsp, 152 + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + add rsp, 48 + pop r14 pop r13 pop r12 ret -wc_mldsa_use_hint_88_avx2 ENDP +wc_mldsa_use_hint_88_avx512 ENDP _TEXT ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_q DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h - DWORD 007fe001h, 007fe001h, 007fe001h, 007fe001h -ptr_L_mldsa_use_hint_32_avx2_q QWORD L_mldsa_use_hint_32_avx2_q -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_q_low_32 DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h - DWORD 0003ff00h, 0003ff00h, 0003ff00h, 0003ff00h -ptr_L_mldsa_use_hint_32_avx2_q_low_32 QWORD L_mldsa_use_hint_32_avx2_q_low_32 -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_q_low_32_2 DWORD 0007fe00h, 0007fe00h, 0007fe00h, 0007fe00h - DWORD 0007fe00h, 0007fe00h, 0007fe00h, 0007fe00h -ptr_L_mldsa_use_hint_32_avx2_q_low_32_2 QWORD L_mldsa_use_hint_32_avx2_q_low_32_2 -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_q_low_32_m1 DWORD 0003feffh, 0003feffh, 0003feffh, 0003feffh - DWORD 0003feffh, 0003feffh, 0003feffh, 0003feffh -ptr_L_mldsa_use_hint_32_avx2_q_low_32_m1 QWORD L_mldsa_use_hint_32_avx2_q_low_32_m1 -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_mask DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh - DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh -ptr_L_mldsa_use_hint_32_avx2_mask QWORD L_mldsa_use_hint_32_avx2_mask -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_vsl DWORD 0000001fh, 0000001eh, 0000001dh, 0000001ch - DWORD 0000001bh, 0000001ah, 00000019h, 00000018h -ptr_L_mldsa_use_hint_32_avx2_vsl QWORD L_mldsa_use_hint_32_avx2_vsl -_DATA ENDS -_DATA SEGMENT -ALIGN 16 -L_mldsa_use_hint_32_avx2_one DWORD 00000001h, 00000001h, 00000001h, 00000001h - DWORD 00000001h, 00000001h, 00000001h, 00000001h -ptr_L_mldsa_use_hint_32_avx2_one QWORD L_mldsa_use_hint_32_avx2_one -_DATA ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_use_hint_32_avx2 PROC +wc_mldsa_use_hint_32_avx512 PROC push r12 push r13 push r14 push r15 + push rdi mov rax, rdx mov rdx, rcx - sub rsp, 152 - vmovdqu OWORD PTR [rsp+8], xmm6 - vmovdqu OWORD PTR [rsp+24], xmm7 - vmovdqu OWORD PTR [rsp+40], xmm8 - vmovdqu OWORD PTR [rsp+56], xmm9 - vmovdqu OWORD PTR [rsp+72], xmm10 - vmovdqu OWORD PTR [rsp+88], xmm11 - vmovdqu OWORD PTR [rsp+104], xmm12 - vmovdqu OWORD PTR [rsp+120], xmm13 - vmovdqu OWORD PTR [rsp+136], xmm14 - vpxor ymm8, ymm8, ymm8 - vmovdqu ymm8, YMMWORD PTR L_mldsa_use_hint_32_avx2_q - vmovdqu ymm9, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32 - vmovdqu ymm10, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32_2 - vmovdqu ymm11, YMMWORD PTR L_mldsa_use_hint_32_avx2_q_low_32_m1 - vmovdqu ymm12, YMMWORD PTR L_mldsa_use_hint_32_avx2_mask - vmovdqu ymm13, YMMWORD PTR L_mldsa_use_hint_32_avx2_vsl - vmovdqu ymm14, YMMWORD PTR L_mldsa_use_hint_32_avx2_one + sub rsp, 48 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + mov rdi, 8380417 + vmovd xmm3, edi + vpbroadcastd zmm3, xmm3 + mov rdi, 261888 + vmovd xmm4, edi + vpbroadcastd zmm4, xmm4 + mov rdi, 523776 + vmovd xmm5, edi + vpbroadcastd zmm5, xmm5 + mov rdi, 261887 + vmovd xmm6, edi + vpbroadcastd zmm6, xmm6 + mov rdi, 15 + vmovd xmm7, edi + vpbroadcastd zmm7, xmm7 + mov rdi, 1 + vmovd xmm8, edi + vpbroadcastd zmm8, xmm8 xor r10, r10 mov r11b, [r8] imul r15, rax, 10 sub r15, 5 -L_mldsa_use_hint_32_avx2_start_256: +L_mldsa_use_hint_32_avx512_start_256: mov r9b, [r8+r15] inc r15 - vmovdqu ymm0, YMMWORD PTR [rdx] - vmovdqu ymm1, YMMWORD PTR [rdx+32] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - mov r12, 1 - xor r13, r13 - xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__0: - cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__0 - mov cl, r11b - cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__0 - mov r14, r12 - shl r14, cl - or r13, r14 - inc r10b - mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__0 -L_mldsa_use_hint_32_avx2_hints_done__0: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx], ymm4 - vmovdqu YMMWORD PTR [rdx+32], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+64] - vmovdqu ymm1, YMMWORD PTR [rdx+96] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - mov r12, 1 - xor r13, r13 - xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__1: - cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__1 - mov cl, r11b - sub cl, 16 - cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__1 - mov r14, r12 - shl r14, cl - or r13, r14 - inc r10b - mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__1 -L_mldsa_use_hint_32_avx2_hints_done__1: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+64], ymm4 - vmovdqu YMMWORD PTR [rdx+96], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+128] - vmovdqu ymm1, YMMWORD PTR [rdx+160] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + vmovdqu64 zmm0, [rdx] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__2: +L_mldsa_use_hint_32_avx512_hints_next_0: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__2 + jge L_mldsa_use_hint_32_avx512_hints_done_0 mov cl, r11b - sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__2 + jge L_mldsa_use_hint_32_avx512_hints_done_0 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__2 -L_mldsa_use_hint_32_avx2_hints_done__2: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+128], ymm4 - vmovdqu YMMWORD PTR [rdx+160], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+192] - vmovdqu ymm1, YMMWORD PTR [rdx+224] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_0 +L_mldsa_use_hint_32_avx512_hints_done_0: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx], zmm2 + vmovdqu64 zmm0, [rdx+64] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__3: +L_mldsa_use_hint_32_avx512_hints_next_1: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__3 + jge L_mldsa_use_hint_32_avx512_hints_done_1 mov cl, r11b - sub cl, 48 + sub cl, 16 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__3 + jge L_mldsa_use_hint_32_avx512_hints_done_1 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__3 -L_mldsa_use_hint_32_avx2_hints_done__3: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+192], ymm4 - vmovdqu YMMWORD PTR [rdx+224], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+256] - vmovdqu ymm1, YMMWORD PTR [rdx+288] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_1 +L_mldsa_use_hint_32_avx512_hints_done_1: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+64], zmm2 + vmovdqu64 zmm0, [rdx+128] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__4: +L_mldsa_use_hint_32_avx512_hints_next_2: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__4 + jge L_mldsa_use_hint_32_avx512_hints_done_2 mov cl, r11b - sub cl, 64 + sub cl, 32 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__4 + jge L_mldsa_use_hint_32_avx512_hints_done_2 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__4 -L_mldsa_use_hint_32_avx2_hints_done__4: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+256], ymm4 - vmovdqu YMMWORD PTR [rdx+288], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+320] - vmovdqu ymm1, YMMWORD PTR [rdx+352] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_2 +L_mldsa_use_hint_32_avx512_hints_done_2: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+128], zmm2 + vmovdqu64 zmm0, [rdx+192] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__5: +L_mldsa_use_hint_32_avx512_hints_next_3: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__5 + jge L_mldsa_use_hint_32_avx512_hints_done_3 mov cl, r11b - sub cl, 80 + sub cl, 48 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__5 + jge L_mldsa_use_hint_32_avx512_hints_done_3 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__5 -L_mldsa_use_hint_32_avx2_hints_done__5: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+320], ymm4 - vmovdqu YMMWORD PTR [rdx+352], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+384] - vmovdqu ymm1, YMMWORD PTR [rdx+416] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_3 +L_mldsa_use_hint_32_avx512_hints_done_3: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+192], zmm2 + vmovdqu64 zmm0, [rdx+256] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__6: +L_mldsa_use_hint_32_avx512_hints_next_4: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__6 + jge L_mldsa_use_hint_32_avx512_hints_done_4 mov cl, r11b - sub cl, 96 + sub cl, 64 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__6 + jge L_mldsa_use_hint_32_avx512_hints_done_4 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__6 -L_mldsa_use_hint_32_avx2_hints_done__6: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+384], ymm4 - vmovdqu YMMWORD PTR [rdx+416], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+448] - vmovdqu ymm1, YMMWORD PTR [rdx+480] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_4 +L_mldsa_use_hint_32_avx512_hints_done_4: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+256], zmm2 + vmovdqu64 zmm0, [rdx+320] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__7: +L_mldsa_use_hint_32_avx512_hints_next_5: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__7 + jge L_mldsa_use_hint_32_avx512_hints_done_5 mov cl, r11b - sub cl, 112 + sub cl, 80 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__7 + jge L_mldsa_use_hint_32_avx512_hints_done_5 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__7 -L_mldsa_use_hint_32_avx2_hints_done__7: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+448], ymm4 - vmovdqu YMMWORD PTR [rdx+480], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+512] - vmovdqu ymm1, YMMWORD PTR [rdx+544] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_5 +L_mldsa_use_hint_32_avx512_hints_done_5: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+320], zmm2 + vmovdqu64 zmm0, [rdx+384] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__8: +L_mldsa_use_hint_32_avx512_hints_next_6: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__8 + jge L_mldsa_use_hint_32_avx512_hints_done_6 mov cl, r11b - sub cl, 128 + sub cl, 96 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__8 + jge L_mldsa_use_hint_32_avx512_hints_done_6 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__8 -L_mldsa_use_hint_32_avx2_hints_done__8: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+512], ymm4 - vmovdqu YMMWORD PTR [rdx+544], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+576] - vmovdqu ymm1, YMMWORD PTR [rdx+608] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_6 +L_mldsa_use_hint_32_avx512_hints_done_6: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+384], zmm2 + vmovdqu64 zmm0, [rdx+448] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__9: +L_mldsa_use_hint_32_avx512_hints_next_7: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__9 + jge L_mldsa_use_hint_32_avx512_hints_done_7 mov cl, r11b - sub cl, 144 + sub cl, 112 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__9 + jge L_mldsa_use_hint_32_avx512_hints_done_7 mov r14, r12 shl r14, cl - or r13, r14 - inc r10b - mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__9 -L_mldsa_use_hint_32_avx2_hints_done__9: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+576], ymm4 - vmovdqu YMMWORD PTR [rdx+608], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+640] - vmovdqu ymm1, YMMWORD PTR [rdx+672] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx512_hints_next_7 +L_mldsa_use_hint_32_avx512_hints_done_7: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+448], zmm2 + vmovdqu64 zmm0, [rdx+512] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__10: +L_mldsa_use_hint_32_avx512_hints_next_8: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__10 + jge L_mldsa_use_hint_32_avx512_hints_done_8 + mov cl, r11b + sub cl, 128 + cmp rcx, 16 + jge L_mldsa_use_hint_32_avx512_hints_done_8 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx512_hints_next_8 +L_mldsa_use_hint_32_avx512_hints_done_8: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+512], zmm2 + vmovdqu64 zmm0, [rdx+576] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 + mov r12, 1 + xor r13, r13 + xor rcx, rcx +L_mldsa_use_hint_32_avx512_hints_next_9: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx512_hints_done_9 + mov cl, r11b + sub cl, 144 + cmp rcx, 16 + jge L_mldsa_use_hint_32_avx512_hints_done_9 + mov r14, r12 + shl r14, cl + or r13, r14 + inc r10b + mov r11b, [r8+r10] + jmp L_mldsa_use_hint_32_avx512_hints_next_9 +L_mldsa_use_hint_32_avx512_hints_done_9: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+576], zmm2 + vmovdqu64 zmm0, [rdx+640] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 + mov r12, 1 + xor r13, r13 + xor rcx, rcx +L_mldsa_use_hint_32_avx512_hints_next_10: + cmp r10b, r9b + jge L_mldsa_use_hint_32_avx512_hints_done_10 mov cl, r11b sub cl, 160 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__10 + jge L_mldsa_use_hint_32_avx512_hints_done_10 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__10 -L_mldsa_use_hint_32_avx2_hints_done__10: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+640], ymm4 - vmovdqu YMMWORD PTR [rdx+672], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+704] - vmovdqu ymm1, YMMWORD PTR [rdx+736] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_10 +L_mldsa_use_hint_32_avx512_hints_done_10: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+640], zmm2 + vmovdqu64 zmm0, [rdx+704] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__11: +L_mldsa_use_hint_32_avx512_hints_next_11: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__11 + jge L_mldsa_use_hint_32_avx512_hints_done_11 mov cl, r11b sub cl, 176 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__11 + jge L_mldsa_use_hint_32_avx512_hints_done_11 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__11 -L_mldsa_use_hint_32_avx2_hints_done__11: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+704], ymm4 - vmovdqu YMMWORD PTR [rdx+736], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+768] - vmovdqu ymm1, YMMWORD PTR [rdx+800] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_11 +L_mldsa_use_hint_32_avx512_hints_done_11: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+704], zmm2 + vmovdqu64 zmm0, [rdx+768] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__12: +L_mldsa_use_hint_32_avx512_hints_next_12: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__12 + jge L_mldsa_use_hint_32_avx512_hints_done_12 mov cl, r11b sub cl, 192 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__12 + jge L_mldsa_use_hint_32_avx512_hints_done_12 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__12 -L_mldsa_use_hint_32_avx2_hints_done__12: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+768], ymm4 - vmovdqu YMMWORD PTR [rdx+800], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+832] - vmovdqu ymm1, YMMWORD PTR [rdx+864] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_12 +L_mldsa_use_hint_32_avx512_hints_done_12: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+768], zmm2 + vmovdqu64 zmm0, [rdx+832] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__13: +L_mldsa_use_hint_32_avx512_hints_next_13: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__13 + jge L_mldsa_use_hint_32_avx512_hints_done_13 mov cl, r11b sub cl, 208 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__13 + jge L_mldsa_use_hint_32_avx512_hints_done_13 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__13 -L_mldsa_use_hint_32_avx2_hints_done__13: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+832], ymm4 - vmovdqu YMMWORD PTR [rdx+864], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+896] - vmovdqu ymm1, YMMWORD PTR [rdx+928] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_13 +L_mldsa_use_hint_32_avx512_hints_done_13: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+832], zmm2 + vmovdqu64 zmm0, [rdx+896] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__14: +L_mldsa_use_hint_32_avx512_hints_next_14: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__14 + jge L_mldsa_use_hint_32_avx512_hints_done_14 mov cl, r11b sub cl, 224 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__14 + jge L_mldsa_use_hint_32_avx512_hints_done_14 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__14 -L_mldsa_use_hint_32_avx2_hints_done__14: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+896], ymm4 - vmovdqu YMMWORD PTR [rdx+928], ymm5 - vmovdqu ymm0, YMMWORD PTR [rdx+960] - vmovdqu ymm1, YMMWORD PTR [rdx+992] - vpsrad ymm2, ymm0, 31 - vpsrad ymm3, ymm1, 31 - vpand ymm2, ymm2, ymm8 - vpand ymm3, ymm3, ymm8 - vpaddd ymm0, ymm0, ymm2 - vpaddd ymm1, ymm1, ymm3 - vpaddd ymm4, ymm0, ymm11 - vpaddd ymm5, ymm1, ymm11 - vpsrld ymm4, ymm4, 19 - vpsrld ymm5, ymm5, 19 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsubd ymm2, ymm9, ymm2 - vpsubd ymm3, ymm9, ymm3 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpmulld ymm2, ymm4, ymm10 - vpmulld ymm3, ymm5, ymm10 - vpsubd ymm2, ymm0, ymm2 - vpsubd ymm3, ymm1, ymm3 - vpsrld ymm0, ymm4, 4 - vpsrld ymm1, ymm5, 4 - vpsubd ymm2, ymm2, ymm0 - vpsubd ymm3, ymm3, ymm1 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 + jmp L_mldsa_use_hint_32_avx512_hints_next_14 +L_mldsa_use_hint_32_avx512_hints_done_14: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+896], zmm2 + vmovdqu64 zmm0, [rdx+960] + vpsrad zmm1, zmm0, 31 + vpandd zmm1, zmm1, zmm3 + vpaddd zmm0, zmm0, zmm1 + vpaddd zmm2, zmm0, zmm6 + vpsrld zmm2, zmm2, 19 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm4, zmm1 + vpsrld zmm1, zmm1, 31 + vpaddd zmm2, zmm2, zmm1 + vpmulld zmm1, zmm2, zmm5 + vpsubd zmm1, zmm0, zmm1 + vpsrld zmm0, zmm2, 4 + vpsubd zmm1, zmm1, zmm0 + vpandd zmm2, zmm2, zmm7 mov r12, 1 xor r13, r13 xor rcx, rcx -L_mldsa_use_hint_32_avx2_hints_next__15: +L_mldsa_use_hint_32_avx512_hints_next_15: cmp r10b, r9b - jge L_mldsa_use_hint_32_avx2_hints_done__15 + jge L_mldsa_use_hint_32_avx512_hints_done_15 mov cl, r11b sub cl, 240 cmp rcx, 16 - jge L_mldsa_use_hint_32_avx2_hints_done__15 + jge L_mldsa_use_hint_32_avx512_hints_done_15 mov r14, r12 shl r14, cl or r13, r14 inc r10b mov r11b, [r8+r10] - jmp L_mldsa_use_hint_32_avx2_hints_next__15 -L_mldsa_use_hint_32_avx2_hints_done__15: - movd xmm6, r13d - shr r13, 8 - movd xmm7, r13d - vpbroadcastd ymm6, xmm6 - vpbroadcastd ymm7, xmm7 - vpsllvd ymm6, ymm6, ymm13 - vpsllvd ymm7, ymm7, ymm13 - vpsrad ymm6, ymm6, 31 - vpsrad ymm7, ymm7, 31 - vpsubd ymm2, ymm2, ymm14 - vpsubd ymm3, ymm3, ymm14 - vpsrld ymm2, ymm2, 31 - vpsrld ymm3, ymm3, 31 - vpslld ymm2, ymm2, 1 - vpslld ymm3, ymm3, 1 - vpsubd ymm2, ymm14, ymm2 - vpsubd ymm3, ymm14, ymm3 - vpand ymm2, ymm2, ymm6 - vpand ymm3, ymm3, ymm7 - vpaddd ymm4, ymm4, ymm2 - vpaddd ymm5, ymm5, ymm3 - vpand ymm4, ymm4, ymm12 - vpand ymm5, ymm5, ymm12 - vmovdqu YMMWORD PTR [rdx+960], ymm4 - vmovdqu YMMWORD PTR [rdx+992], ymm5 + jmp L_mldsa_use_hint_32_avx512_hints_next_15 +L_mldsa_use_hint_32_avx512_hints_done_15: + kmovw k1, r13d + vpsubd zmm1, zmm1, zmm8 + vpsrld zmm1, zmm1, 31 + vpslld zmm1, zmm1, 1 + vpsubd zmm1, zmm8, zmm1 + vpaddd zmm2{k1}, zmm2, zmm1 + vpandd zmm2, zmm2, zmm7 + vmovdqu64 [rdx+960], zmm2 add rdx, 1024 sub rax, 1 - jne L_mldsa_use_hint_32_avx2_start_256 + jne L_mldsa_use_hint_32_avx512_start_256 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + add rsp, 48 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +wc_mldsa_use_hint_32_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_redistribute_21_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx+64], zmm0 + vmovdqu64 [rax+64], zmm1 + vmovdqu64 [r9+64], zmm2 + vmovdqu64 [r10+64], zmm3 + vmovdqu64 [r11+64], zmm4 + vmovdqu64 [r12+64], zmm5 + vmovdqu64 [r13+64], zmm6 + vmovdqu64 [r14+64], zmm7 + mov rdi, QWORD PTR [rcx+1024] + mov QWORD PTR [rdx+128], rdi + mov rdi, QWORD PTR [rcx+1032] + mov QWORD PTR [rax+128], rdi + mov rdi, QWORD PTR [rcx+1040] + mov QWORD PTR [r9+128], rdi + mov rdi, QWORD PTR [rcx+1048] + mov QWORD PTR [r10+128], rdi + mov rdi, QWORD PTR [rcx+1056] + mov QWORD PTR [r11+128], rdi + mov rdi, QWORD PTR [rcx+1064] + mov QWORD PTR [r12+128], rdi + mov rdi, QWORD PTR [rcx+1072] + mov QWORD PTR [r13+128], rdi + mov rdi, QWORD PTR [rcx+1080] + mov QWORD PTR [r14+128], rdi + mov rdi, QWORD PTR [rcx+1088] + mov QWORD PTR [rdx+136], rdi + mov rdi, QWORD PTR [rcx+1096] + mov QWORD PTR [rax+136], rdi + mov rdi, QWORD PTR [rcx+1104] + mov QWORD PTR [r9+136], rdi + mov rdi, QWORD PTR [rcx+1112] + mov QWORD PTR [r10+136], rdi + mov rdi, QWORD PTR [rcx+1120] + mov QWORD PTR [r11+136], rdi + mov rdi, QWORD PTR [rcx+1128] + mov QWORD PTR [r12+136], rdi + mov rdi, QWORD PTR [rcx+1136] + mov QWORD PTR [r13+136], rdi + mov rdi, QWORD PTR [rcx+1144] + mov QWORD PTR [r14+136], rdi + mov rdi, QWORD PTR [rcx+1152] + mov QWORD PTR [rdx+144], rdi + mov rdi, QWORD PTR [rcx+1160] + mov QWORD PTR [rax+144], rdi + mov rdi, QWORD PTR [rcx+1168] + mov QWORD PTR [r9+144], rdi + mov rdi, QWORD PTR [rcx+1176] + mov QWORD PTR [r10+144], rdi + mov rdi, QWORD PTR [rcx+1184] + mov QWORD PTR [r11+144], rdi + mov rdi, QWORD PTR [rcx+1192] + mov QWORD PTR [r12+144], rdi + mov rdi, QWORD PTR [rcx+1200] + mov QWORD PTR [r13+144], rdi + mov rdi, QWORD PTR [rcx+1208] + mov QWORD PTR [r14+144], rdi + mov rdi, QWORD PTR [rcx+1216] + mov QWORD PTR [rdx+152], rdi + mov rdi, QWORD PTR [rcx+1224] + mov QWORD PTR [rax+152], rdi + mov rdi, QWORD PTR [rcx+1232] + mov QWORD PTR [r9+152], rdi + mov rdi, QWORD PTR [rcx+1240] + mov QWORD PTR [r10+152], rdi + mov rdi, QWORD PTR [rcx+1248] + mov QWORD PTR [r11+152], rdi + mov rdi, QWORD PTR [rcx+1256] + mov QWORD PTR [r12+152], rdi + mov rdi, QWORD PTR [rcx+1264] + mov QWORD PTR [r13+152], rdi + mov rdi, QWORD PTR [rcx+1272] + mov QWORD PTR [r14+152], rdi + mov rdi, QWORD PTR [rcx+1280] + mov QWORD PTR [rdx+160], rdi + mov rdi, QWORD PTR [rcx+1288] + mov QWORD PTR [rax+160], rdi + mov rdi, QWORD PTR [rcx+1296] + mov QWORD PTR [r9+160], rdi + mov rdi, QWORD PTR [rcx+1304] + mov QWORD PTR [r10+160], rdi + mov rdi, QWORD PTR [rcx+1312] + mov QWORD PTR [r11+160], rdi + mov rdi, QWORD PTR [rcx+1320] + mov QWORD PTR [r12+160], rdi + mov rdi, QWORD PTR [rcx+1328] + mov QWORD PTR [r13+160], rdi + mov rdi, QWORD PTR [rcx+1336] + mov QWORD PTR [r14+160], rdi + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +wc_mldsa_redistribute_21_rand_x8_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_redistribute_17_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx+64], zmm0 + vmovdqu64 [rax+64], zmm1 + vmovdqu64 [r9+64], zmm2 + vmovdqu64 [r10+64], zmm3 + vmovdqu64 [r11+64], zmm4 + vmovdqu64 [r12+64], zmm5 + vmovdqu64 [r13+64], zmm6 + vmovdqu64 [r14+64], zmm7 + mov rdi, QWORD PTR [rcx+1024] + mov QWORD PTR [rdx+128], rdi + mov rdi, QWORD PTR [rcx+1032] + mov QWORD PTR [rax+128], rdi + mov rdi, QWORD PTR [rcx+1040] + mov QWORD PTR [r9+128], rdi + mov rdi, QWORD PTR [rcx+1048] + mov QWORD PTR [r10+128], rdi + mov rdi, QWORD PTR [rcx+1056] + mov QWORD PTR [r11+128], rdi + mov rdi, QWORD PTR [rcx+1064] + mov QWORD PTR [r12+128], rdi + mov rdi, QWORD PTR [rcx+1072] + mov QWORD PTR [r13+128], rdi + mov rdi, QWORD PTR [rcx+1080] + mov QWORD PTR [r14+128], rdi + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +wc_mldsa_redistribute_17_rand_x8_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_shuff_0 BYTE 00h, 01h, 02h, 0ffh, 02h, 03h, 04h, 0ffh + BYTE 04h, 05h, 06h, 0ffh, 06h, 07h, 08h, 0ffh + BYTE 0ffh, 01h, 02h, 03h, 0ffh, 03h, 04h, 05h + BYTE 0ffh, 05h, 06h, 07h, 0ffh, 07h, 08h, 09h +ptr_L_mldsa_decode_gamma1_17_x2_avx512_shuff_0 QWORD L_mldsa_decode_gamma1_17_x2_avx512_shuff_0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_shuff_1 BYTE 02h, 03h, 04h, 0ffh, 04h, 05h, 06h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 08h, 09h, 0ah, 0ffh + BYTE 0ffh, 03h, 04h, 05h, 0ffh, 05h, 06h, 07h + BYTE 0ffh, 07h, 08h, 09h, 0ffh, 09h, 0ah, 0bh +ptr_L_mldsa_decode_gamma1_17_x2_avx512_shuff_1 QWORD L_mldsa_decode_gamma1_17_x2_avx512_shuff_1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_shuff_2 BYTE 04h, 05h, 06h, 0ffh, 06h, 07h, 08h, 0ffh + BYTE 08h, 09h, 0ah, 0ffh, 0ah, 0bh, 0ch, 0ffh + BYTE 0ffh, 05h, 06h, 07h, 0ffh, 07h, 08h, 09h + BYTE 0ffh, 09h, 0ah, 0bh, 0ffh, 0bh, 0ch, 0dh +ptr_L_mldsa_decode_gamma1_17_x2_avx512_shuff_2 QWORD L_mldsa_decode_gamma1_17_x2_avx512_shuff_2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_shuff_3 BYTE 06h, 07h, 08h, 0ffh, 08h, 09h, 0ah, 0ffh + BYTE 0ah, 0bh, 0ch, 0ffh, 0ch, 0dh, 0eh, 0ffh + BYTE 0ffh, 07h, 08h, 09h, 0ffh, 09h, 0ah, 0bh + BYTE 0ffh, 0bh, 0ch, 0dh, 0ffh, 0dh, 0eh, 0fh +ptr_L_mldsa_decode_gamma1_17_x2_avx512_shuff_3 QWORD L_mldsa_decode_gamma1_17_x2_avx512_shuff_3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_vs_8 DWORD 00000000h, 00000002h, 00000004h, 00000006h + DWORD 00000008h, 0000000ah, 0000000ch, 0000000eh +ptr_L_mldsa_decode_gamma1_17_x2_avx512_vs_8 QWORD L_mldsa_decode_gamma1_17_x2_avx512_vs_8 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_mask DWORD 0003ffffh, 0003ffffh, 0003ffffh, 0003ffffh + DWORD 0003ffffh, 0003ffffh, 0003ffffh, 0003ffffh +ptr_L_mldsa_decode_gamma1_17_x2_avx512_mask QWORD L_mldsa_decode_gamma1_17_x2_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_17_x2_avx512_gamma17 DWORD 00020000h, 00020000h, 00020000h, 00020000h + DWORD 00020000h, 00020000h, 00020000h, 00020000h +ptr_L_mldsa_decode_gamma1_17_x2_avx512_gamma17 QWORD L_mldsa_decode_gamma1_17_x2_avx512_gamma17 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_gamma1_17_x2_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu64 zmm14, ZMMWORD PTR L_mldsa_avx512_perm21 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_shuff_0 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_shuff_1 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_shuff_2 + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_shuff_3 + vbroadcasti64x4 zmm11, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_vs_8 + vbroadcasti64x4 zmm12, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_mask + vbroadcasti64x4 zmm13, YMMWORD PTR L_mldsa_decode_gamma1_17_x2_avx512_gamma17 + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm5, YMMWORD PTR [rcx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rdx+160], 1 + ; 0/15 + vpermq zmm6, zmm0, 148 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8], ymm6 + vextracti64x4 YMMWORD PTR [r9], zmm6, 1 + ; 1/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm0, zmm1 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+32], ymm6 + vextracti64x4 YMMWORD PTR [r9+32], zmm6, 1 + ; 2/15 + vpermq zmm6, zmm1, 148 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+64], ymm6 + vextracti64x4 YMMWORD PTR [r9+64], zmm6, 1 + ; 3/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm1, zmm2 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+96], ymm6 + vextracti64x4 YMMWORD PTR [r9+96], zmm6, 1 + ; 4/15 + vpermq zmm6, zmm2, 233 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+128], ymm6 + vextracti64x4 YMMWORD PTR [r9+128], zmm6, 1 + ; 5/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm2, zmm3 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+160], ymm6 + vextracti64x4 YMMWORD PTR [r9+160], zmm6, 1 + ; 6/15 + vpermq zmm6, zmm3, 233 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+192], ymm6 + vextracti64x4 YMMWORD PTR [r9+192], zmm6, 1 + ; 7/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm3, zmm4 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+224], ymm6 + vextracti64x4 YMMWORD PTR [r9+224], zmm6, 1 + ; 8/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm4, zmm5 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+256], ymm6 + vextracti64x4 YMMWORD PTR [r9+256], zmm6, 1 + ; 9/15 + vpermq zmm6, zmm5, 148 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+288], ymm6 + vextracti64x4 YMMWORD PTR [r9+288], zmm6, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+192] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+224] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+224], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+256], 1 + ; 10/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm5, zmm0 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+320], ymm6 + vextracti64x4 YMMWORD PTR [r9+320], zmm6, 1 + ; 11/15 + vpermq zmm6, zmm0, 148 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+352], ymm6 + vextracti64x4 YMMWORD PTR [r9+352], zmm6, 1 + ; 12/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm0, zmm1 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+384], ymm6 + vextracti64x4 YMMWORD PTR [r9+384], zmm6, 1 + ; 13/15 + vpermq zmm6, zmm1, 233 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+416], ymm6 + vextracti64x4 YMMWORD PTR [r9+416], zmm6, 1 + ; 14/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm1, zmm2 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+448], ymm6 + vextracti64x4 YMMWORD PTR [r9+448], zmm6, 1 + ; 15/15 + vpermq zmm6, zmm2, 233 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+480], ymm6 + vextracti64x4 YMMWORD PTR [r9+480], zmm6, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+288] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+288], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+320] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+352] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+352], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+384] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+416] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+416], 1 + vmovdqu64 ymm5, YMMWORD PTR [rcx+448] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rdx+448], 1 + ; 0/15 + vpermq zmm6, zmm0, 148 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+512], ymm6 + vextracti64x4 YMMWORD PTR [r9+512], zmm6, 1 + ; 1/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm0, zmm1 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+544], ymm6 + vextracti64x4 YMMWORD PTR [r9+544], zmm6, 1 + ; 2/15 + vpermq zmm6, zmm1, 148 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+576], ymm6 + vextracti64x4 YMMWORD PTR [r9+576], zmm6, 1 + ; 3/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm1, zmm2 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+608], ymm6 + vextracti64x4 YMMWORD PTR [r9+608], zmm6, 1 + ; 4/15 + vpermq zmm6, zmm2, 233 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+640], ymm6 + vextracti64x4 YMMWORD PTR [r9+640], zmm6, 1 + ; 5/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm2, zmm3 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+672], ymm6 + vextracti64x4 YMMWORD PTR [r9+672], zmm6, 1 + ; 6/15 + vpermq zmm6, zmm3, 233 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+704], ymm6 + vextracti64x4 YMMWORD PTR [r9+704], zmm6, 1 + ; 7/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm3, zmm4 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+736], ymm6 + vextracti64x4 YMMWORD PTR [r9+736], zmm6, 1 + ; 8/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm4, zmm5 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+768], ymm6 + vextracti64x4 YMMWORD PTR [r9+768], zmm6, 1 + ; 9/15 + vpermq zmm6, zmm5, 148 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+800], ymm6 + vextracti64x4 YMMWORD PTR [r9+800], zmm6, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+480] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+480], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+512] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+512], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+544] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+544], 1 + ; 10/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm5, zmm0 + vpermq zmm6, zmm6, 148 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+832], ymm6 + vextracti64x4 YMMWORD PTR [r9+832], zmm6, 1 + ; 11/15 + vpermq zmm6, zmm0, 148 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+864], ymm6 + vextracti64x4 YMMWORD PTR [r9+864], zmm6, 1 + ; 12/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm0, zmm1 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm7 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+896], ymm6 + vextracti64x4 YMMWORD PTR [r9+896], zmm6, 1 + ; 13/15 + vpermq zmm6, zmm1, 233 + vpshufb zmm6, zmm6, zmm8 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+928], ymm6 + vextracti64x4 YMMWORD PTR [r9+928], zmm6, 1 + ; 14/15 + vmovdqa64 zmm6, zmm14 + vpermi2q zmm6, zmm1, zmm2 + vpermq zmm6, zmm6, 233 + vpshufb zmm6, zmm6, zmm9 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+960], ymm6 + vextracti64x4 YMMWORD PTR [r9+960], zmm6, 1 + ; 15/15 + vpermq zmm6, zmm2, 233 + vpshufb zmm6, zmm6, zmm10 + vpsrlvd zmm6, zmm6, zmm11 + vpandd zmm6, zmm6, zmm12 + vpsubd zmm6, zmm13, zmm6 + vmovdqu64 YMMWORD PTR [r8+992], ymm6 + vextracti64x4 YMMWORD PTR [r9+992], zmm6, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_decode_gamma1_17_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_19_x2_avx512_shuff_0 BYTE 00h, 01h, 02h, 0ffh, 02h, 03h, 04h, 0ffh + BYTE 05h, 06h, 07h, 0ffh, 07h, 08h, 09h, 0ffh + BYTE 0ffh, 02h, 03h, 04h, 0ffh, 04h, 05h, 06h + BYTE 0ffh, 07h, 08h, 09h, 0ffh, 09h, 0ah, 0bh +ptr_L_mldsa_decode_gamma1_19_x2_avx512_shuff_0 QWORD L_mldsa_decode_gamma1_19_x2_avx512_shuff_0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_19_x2_avx512_shuff_1 BYTE 04h, 05h, 06h, 0ffh, 06h, 07h, 08h, 0ffh + BYTE 09h, 0ah, 0bh, 0ffh, 0bh, 0ch, 0dh, 0ffh + BYTE 0ffh, 06h, 07h, 08h, 0ffh, 08h, 09h, 0ah + BYTE 0ffh, 0bh, 0ch, 0dh, 0ffh, 0dh, 0eh, 0fh +ptr_L_mldsa_decode_gamma1_19_x2_avx512_shuff_1 QWORD L_mldsa_decode_gamma1_19_x2_avx512_shuff_1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_19_x2_avx512_vs_8 DWORD 00000000h, 00000004h, 00000000h, 00000004h + DWORD 00000008h, 0000000ch, 00000008h, 0000000ch +ptr_L_mldsa_decode_gamma1_19_x2_avx512_vs_8 QWORD L_mldsa_decode_gamma1_19_x2_avx512_vs_8 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_19_x2_avx512_mask DWORD 000fffffh, 000fffffh, 000fffffh, 000fffffh + DWORD 000fffffh, 000fffffh, 000fffffh, 000fffffh +ptr_L_mldsa_decode_gamma1_19_x2_avx512_mask QWORD L_mldsa_decode_gamma1_19_x2_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_gamma1_19_x2_avx512_gamma19 DWORD 00080000h, 00080000h, 00080000h, 00080000h + DWORD 00080000h, 00080000h, 00080000h, 00080000h +ptr_L_mldsa_decode_gamma1_19_x2_avx512_gamma19 QWORD L_mldsa_decode_gamma1_19_x2_avx512_gamma19 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_gamma1_19_x2_avx512 PROC + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu64 zmm11, ZMMWORD PTR L_mldsa_avx512_perm21 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_decode_gamma1_19_x2_avx512_shuff_0 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_decode_gamma1_19_x2_avx512_shuff_1 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_gamma1_19_x2_avx512_vs_8 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_gamma1_19_x2_avx512_mask + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_gamma1_19_x2_avx512_gamma19 + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+128], 1 + ; 0/7 + vpermq zmm5, zmm0, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8], ymm5 + vextracti64x4 YMMWORD PTR [r9], zmm5, 1 + ; 1/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm0, zmm1 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+32], ymm5 + vextracti64x4 YMMWORD PTR [r9+32], zmm5, 1 + ; 2/7 + vpermq zmm5, zmm1, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+64], ymm5 + vextracti64x4 YMMWORD PTR [r9+64], zmm5, 1 + ; 3/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm1, zmm2 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+96], ymm5 + vextracti64x4 YMMWORD PTR [r9+96], zmm5, 1 + ; 4/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm2, zmm3 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+128], ymm5 + vextracti64x4 YMMWORD PTR [r9+128], zmm5, 1 + ; 5/7 + vpermq zmm5, zmm3, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+160], ymm5 + vextracti64x4 YMMWORD PTR [r9+160], zmm5, 1 + ; 6/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm3, zmm4 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+192], ymm5 + vextracti64x4 YMMWORD PTR [r9+192], zmm5, 1 + ; 7/7 + vpermq zmm5, zmm4, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+224], ymm5 + vextracti64x4 YMMWORD PTR [r9+224], zmm5, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+160] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+160], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+192] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+224] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+224], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+256] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+288] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+288], 1 + ; 0/7 + vpermq zmm5, zmm0, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+256], ymm5 + vextracti64x4 YMMWORD PTR [r9+256], zmm5, 1 + ; 1/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm0, zmm1 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+288], ymm5 + vextracti64x4 YMMWORD PTR [r9+288], zmm5, 1 + ; 2/7 + vpermq zmm5, zmm1, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+320], ymm5 + vextracti64x4 YMMWORD PTR [r9+320], zmm5, 1 + ; 3/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm1, zmm2 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+352], ymm5 + vextracti64x4 YMMWORD PTR [r9+352], zmm5, 1 + ; 4/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm2, zmm3 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+384], ymm5 + vextracti64x4 YMMWORD PTR [r9+384], zmm5, 1 + ; 5/7 + vpermq zmm5, zmm3, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+416], ymm5 + vextracti64x4 YMMWORD PTR [r9+416], zmm5, 1 + ; 6/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm3, zmm4 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+448], ymm5 + vextracti64x4 YMMWORD PTR [r9+448], zmm5, 1 + ; 7/7 + vpermq zmm5, zmm4, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+480], ymm5 + vextracti64x4 YMMWORD PTR [r9+480], zmm5, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+320] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+352] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+352], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+416], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+448] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+448], 1 + ; 0/7 + vpermq zmm5, zmm0, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+512], ymm5 + vextracti64x4 YMMWORD PTR [r9+512], zmm5, 1 + ; 1/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm0, zmm1 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+544], ymm5 + vextracti64x4 YMMWORD PTR [r9+544], zmm5, 1 + ; 2/7 + vpermq zmm5, zmm1, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+576], ymm5 + vextracti64x4 YMMWORD PTR [r9+576], zmm5, 1 + ; 3/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm1, zmm2 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+608], ymm5 + vextracti64x4 YMMWORD PTR [r9+608], zmm5, 1 + ; 4/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm2, zmm3 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+640], ymm5 + vextracti64x4 YMMWORD PTR [r9+640], zmm5, 1 + ; 5/7 + vpermq zmm5, zmm3, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+672], ymm5 + vextracti64x4 YMMWORD PTR [r9+672], zmm5, 1 + ; 6/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm3, zmm4 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+704], ymm5 + vextracti64x4 YMMWORD PTR [r9+704], zmm5, 1 + ; 7/7 + vpermq zmm5, zmm4, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+736], ymm5 + vextracti64x4 YMMWORD PTR [r9+736], zmm5, 1 + vmovdqu64 ymm0, YMMWORD PTR [rcx+480] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+480], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+512] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+512], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+544] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+544], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+576] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+576], 1 + vmovdqu64 ymm4, YMMWORD PTR [rcx+608] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+608], 1 + ; 0/7 + vpermq zmm5, zmm0, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+768], ymm5 + vextracti64x4 YMMWORD PTR [r9+768], zmm5, 1 + ; 1/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm0, zmm1 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+800], ymm5 + vextracti64x4 YMMWORD PTR [r9+800], zmm5, 1 + ; 2/7 + vpermq zmm5, zmm1, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+832], ymm5 + vextracti64x4 YMMWORD PTR [r9+832], zmm5, 1 + ; 3/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm1, zmm2 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+864], ymm5 + vextracti64x4 YMMWORD PTR [r9+864], zmm5, 1 + ; 4/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm2, zmm3 + vpermq zmm5, zmm5, 148 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+896], ymm5 + vextracti64x4 YMMWORD PTR [r9+896], zmm5, 1 + ; 5/7 + vpermq zmm5, zmm3, 148 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+928], ymm5 + vextracti64x4 YMMWORD PTR [r9+928], zmm5, 1 + ; 6/7 + vmovdqa64 zmm5, zmm11 + vpermi2q zmm5, zmm3, zmm4 + vpermq zmm5, zmm5, 233 + vpshufb zmm5, zmm5, zmm6 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+960], ymm5 + vextracti64x4 YMMWORD PTR [r9+960], zmm5, 1 + ; 7/7 + vpermq zmm5, zmm4, 233 + vpshufb zmm5, zmm5, zmm7 + vpsrlvd zmm5, zmm5, zmm8 + vpandd zmm5, zmm5, zmm9 + vpsubd zmm5, zmm10, zmm5 + vmovdqu64 YMMWORD PTR [r8+992], ymm5 + vextracti64x4 YMMWORD PTR [r9+992], zmm5, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 + ret +wc_mldsa_decode_gamma1_19_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_0 BYTE 00h, 01h, 0ffh, 0ffh, 0ffh, 01h, 02h, 03h + BYTE 03h, 04h, 05h, 0ffh, 04h, 05h, 06h, 07h + BYTE 06h, 07h, 08h, 0ffh, 0ffh, 08h, 09h, 0ffh + BYTE 09h, 0ah, 0bh, 0ffh, 0ffh, 0ffh, 0bh, 0ch +ptr_L_mldsa_decode_t0_x2_avx512_shuff_0 QWORD L_mldsa_decode_t0_x2_avx512_shuff_0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_1 BYTE 05h, 06h, 0ffh, 0ffh, 0ffh, 06h, 07h, 08h + BYTE 08h, 09h, 0ffh, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 03h, 04h, 05h, 0ffh, 0ffh, 05h, 06h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 0ffh, 0ffh, 08h, 09h +ptr_L_mldsa_decode_t0_x2_avx512_shuff_1 QWORD L_mldsa_decode_t0_x2_avx512_shuff_1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_2 BYTE 02h, 03h, 0ffh, 0ffh, 0ffh, 03h, 04h, 05h + BYTE 05h, 06h, 0ffh, 0ffh, 06h, 07h, 08h, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 0ffh, 02h, 03h, 0ffh + BYTE 03h, 04h, 05h, 0ffh, 0ffh, 0ffh, 05h, 06h +ptr_L_mldsa_decode_t0_x2_avx512_shuff_2 QWORD L_mldsa_decode_t0_x2_avx512_shuff_2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_3 BYTE 07h, 08h, 0ffh, 0ffh, 0ffh, 08h, 09h, 0ah + BYTE 0ah, 0bh, 0ffh, 0ffh, 0bh, 0ch, 0dh, 0ffh + BYTE 05h, 06h, 07h, 0ffh, 0ffh, 07h, 08h, 0ffh + BYTE 08h, 09h, 0ah, 0ffh, 0ffh, 0ffh, 0ah, 0bh +ptr_L_mldsa_decode_t0_x2_avx512_shuff_3 QWORD L_mldsa_decode_t0_x2_avx512_shuff_3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_4 BYTE 04h, 05h, 0ffh, 0ffh, 0ffh, 05h, 06h, 07h + BYTE 07h, 08h, 0ffh, 0ffh, 08h, 09h, 0ah, 0ffh + BYTE 02h, 03h, 04h, 0ffh, 0ffh, 04h, 05h, 0ffh + BYTE 05h, 06h, 07h, 0ffh, 0ffh, 0ffh, 07h, 08h +ptr_L_mldsa_decode_t0_x2_avx512_shuff_4 QWORD L_mldsa_decode_t0_x2_avx512_shuff_4 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_5 BYTE 01h, 02h, 0ffh, 0ffh, 0ffh, 02h, 03h, 04h + BYTE 04h, 05h, 0ffh, 0ffh, 05h, 06h, 07h, 0ffh + BYTE 07h, 08h, 09h, 0ffh, 0ffh, 09h, 0ah, 0ffh + BYTE 0ah, 0bh, 0ch, 0ffh, 0ffh, 0ffh, 0ch, 0dh +ptr_L_mldsa_decode_t0_x2_avx512_shuff_5 QWORD L_mldsa_decode_t0_x2_avx512_shuff_5 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_6 BYTE 06h, 07h, 0ffh, 0ffh, 0ffh, 07h, 08h, 09h + BYTE 09h, 0ah, 0ffh, 0ffh, 0ah, 0bh, 0ch, 0ffh + BYTE 04h, 05h, 06h, 0ffh, 0ffh, 06h, 07h, 08h + BYTE 07h, 08h, 09h, 0ffh, 0ffh, 0ffh, 09h, 0ah +ptr_L_mldsa_decode_t0_x2_avx512_shuff_6 QWORD L_mldsa_decode_t0_x2_avx512_shuff_6 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_shuff_7 BYTE 03h, 04h, 0ffh, 0ffh, 0ffh, 04h, 05h, 06h + BYTE 06h, 07h, 0ffh, 0ffh, 07h, 08h, 09h, 0ffh + BYTE 01h, 02h, 03h, 0ffh, 0ffh, 03h, 04h, 0ffh + BYTE 04h, 05h, 06h, 0ffh, 0ffh, 0ffh, 06h, 07h +ptr_L_mldsa_decode_t0_x2_avx512_shuff_7 QWORD L_mldsa_decode_t0_x2_avx512_shuff_7 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_vs_8 DWORD 00000000h, 0000000dh, 00000002h, 00000007h + DWORD 00000004h, 00000009h, 00000006h, 00000013h +ptr_L_mldsa_decode_t0_x2_avx512_vs_8 QWORD L_mldsa_decode_t0_x2_avx512_vs_8 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_mask DWORD 00001fffh, 00001fffh, 00001fffh, 00001fffh + DWORD 00001fffh, 00001fffh, 00001fffh, 00001fffh +ptr_L_mldsa_decode_t0_x2_avx512_mask QWORD L_mldsa_decode_t0_x2_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t0_x2_avx512_d_max_half DWORD 00001000h, 00001000h, 00001000h, 00001000h + DWORD 00001000h, 00001000h, 00001000h, 00001000h +ptr_L_mldsa_decode_t0_x2_avx512_d_max_half QWORD L_mldsa_decode_t0_x2_avx512_d_max_half +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_t0_x2_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu64 zmm16, ZMMWORD PTR L_mldsa_avx512_perm21 + vbroadcasti64x4 zmm5, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_0 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_1 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_2 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_3 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_4 + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_5 + vbroadcasti64x4 zmm11, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_6 + vbroadcasti64x4 zmm12, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_shuff_7 + vbroadcasti64x4 zmm13, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_vs_8 + vbroadcasti64x4 zmm14, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_mask + vbroadcasti64x4 zmm15, YMMWORD PTR L_mldsa_decode_t0_x2_avx512_d_max_half + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + ; 1/32 + vpermq zmm4, zmm0, 68 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8], ymm4 + vextracti64x4 YMMWORD PTR [r9], zmm4, 1 + ; 2/32 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+32], ymm4 + vextracti64x4 YMMWORD PTR [r9+32], zmm4, 1 + ; 3/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+64], ymm4 + vextracti64x4 YMMWORD PTR [r9+64], zmm4, 1 + ; 4/32 + vpermq zmm4, zmm1, 148 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+96], ymm4 + vextracti64x4 YMMWORD PTR [r9+96], zmm4, 1 + ; 5/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm1, zmm2 + vmovdqa64 zmm1, zmm17 + vpermq zmm4, zmm1, 148 + vpshufb zmm4, zmm4, zmm9 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+128], ymm4 + vextracti64x4 YMMWORD PTR [r9+128], zmm4, 1 + ; 6/32 + vpermq zmm4, zmm2, 68 + vpshufb zmm4, zmm4, zmm10 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+160], ymm4 + vextracti64x4 YMMWORD PTR [r9+160], zmm4, 1 + ; 7/32 + vpermq zmm4, zmm2, 233 + vpshufb zmm4, zmm4, zmm11 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+192], ymm4 + vextracti64x4 YMMWORD PTR [r9+192], zmm4, 1 + ; 8/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermq zmm4, zmm2, 233 + vpshufb zmm4, zmm4, zmm12 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+224], ymm4 + vextracti64x4 YMMWORD PTR [r9+224], zmm4, 1 + ; 9/32 + vpermq zmm4, zmm3, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+256], ymm4 + vextracti64x4 YMMWORD PTR [r9+256], zmm4, 1 + ; 10/32 + vmovdqu64 ymm0, YMMWORD PTR [rcx+128] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+160] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+160], 1 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm3, zmm0 + vmovdqa64 zmm3, zmm17 + vpermq zmm4, zmm3, 148 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+288], ymm4 + vextracti64x4 YMMWORD PTR [r9+288], zmm4, 1 + ; 11/32 + vpermq zmm4, zmm0, 148 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+320], ymm4 + vextracti64x4 YMMWORD PTR [r9+320], zmm4, 1 + ; 12/32 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+352], ymm4 + vextracti64x4 YMMWORD PTR [r9+352], zmm4, 1 + ; 13/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm9 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+384], ymm4 + vextracti64x4 YMMWORD PTR [r9+384], zmm4, 1 + ; 14/32 + vpermq zmm4, zmm1, 153 + vpshufb zmm4, zmm4, zmm10 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+416], ymm4 + vextracti64x4 YMMWORD PTR [r9+416], zmm4, 1 + ; 15/32 + vmovdqu64 ymm2, YMMWORD PTR [rcx+192] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+224] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm1, zmm2 + vmovdqa64 zmm1, zmm17 + vpermq zmm4, zmm1, 148 + vpshufb zmm4, zmm4, zmm11 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+448], ymm4 + vextracti64x4 YMMWORD PTR [r9+448], zmm4, 1 + ; 16/32 + vpermq zmm4, zmm2, 148 + vpshufb zmm4, zmm4, zmm12 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+480], ymm4 + vextracti64x4 YMMWORD PTR [r9+480], zmm4, 1 + ; 17/32 + vpermq zmm4, zmm2, 238 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+512], ymm4 + vextracti64x4 YMMWORD PTR [r9+512], zmm4, 1 + ; 18/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermq zmm4, zmm2, 233 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+544], ymm4 + vextracti64x4 YMMWORD PTR [r9+544], zmm4, 1 + ; 19/32 + vpermq zmm4, zmm3, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+576], ymm4 + vextracti64x4 YMMWORD PTR [r9+576], zmm4, 1 + ; 20/32 + vmovdqu64 ymm0, YMMWORD PTR [rcx+256] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+288] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+288], 1 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm3, zmm0 + vmovdqa64 zmm3, zmm17 + vpermq zmm4, zmm3, 148 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+608], ymm4 + vextracti64x4 YMMWORD PTR [r9+608], zmm4, 1 + ; 21/32 + vpermq zmm4, zmm0, 148 + vpshufb zmm4, zmm4, zmm9 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+640], ymm4 + vextracti64x4 YMMWORD PTR [r9+640], zmm4, 1 + ; 22/32 + vpermq zmm4, zmm0, 238 + vpshufb zmm4, zmm4, zmm10 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+672], ymm4 + vextracti64x4 YMMWORD PTR [r9+672], zmm4, 1 + ; 23/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm11 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+704], ymm4 + vextracti64x4 YMMWORD PTR [r9+704], zmm4, 1 + ; 24/32 + vpermq zmm4, zmm1, 233 + vpshufb zmm4, zmm4, zmm12 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+736], ymm4 + vextracti64x4 YMMWORD PTR [r9+736], zmm4, 1 + ; 25/32 + vmovdqu64 ymm2, YMMWORD PTR [rcx+320] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+352] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm1, zmm2 + vmovdqa64 zmm1, zmm17 + vpermq zmm4, zmm1, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+768], ymm4 + vextracti64x4 YMMWORD PTR [r9+768], zmm4, 1 + ; 26/32 + vpermq zmm4, zmm2, 148 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+800], ymm4 + vextracti64x4 YMMWORD PTR [r9+800], zmm4, 1 + ; 27/32 + vpermq zmm4, zmm2, 62 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+832], ymm4 + vextracti64x4 YMMWORD PTR [r9+832], zmm4, 1 + ; 28/32 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermq zmm4, zmm2, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+864], ymm4 + vextracti64x4 YMMWORD PTR [r9+864], zmm4, 1 + ; 29/32 + vpermq zmm4, zmm3, 233 + vpshufb zmm4, zmm4, zmm9 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+896], ymm4 + vextracti64x4 YMMWORD PTR [r9+896], zmm4, 1 + ; 30/32 + vmovdqu64 ymm0, YMMWORD PTR [rcx+384] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+384], 1 + vmovdqa64 zmm17, zmm16 + vpermi2q zmm17, zmm3, zmm0 + vmovdqa64 zmm3, zmm17 + vpermq zmm4, zmm3, 153 + vpshufb zmm4, zmm4, zmm10 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+928], ymm4 + vextracti64x4 YMMWORD PTR [r9+928], zmm4, 1 + ; 31/32 + vpermq zmm4, zmm0, 148 + vpshufb zmm4, zmm4, zmm11 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+960], ymm4 + vextracti64x4 YMMWORD PTR [r9+960], zmm4, 1 + ; 32/32 + vpermq zmm4, zmm0, 62 + vpshufb zmm4, zmm4, zmm12 + vpsrlvd zmm4, zmm4, zmm13 + vpandd zmm4, zmm4, zmm14 + vpsubd zmm4, zmm15, zmm4 + vmovdqu64 YMMWORD PTR [r8+992], ymm4 + vextracti64x4 YMMWORD PTR [r9+992], zmm4, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_decode_t0_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_shuff_0 BYTE 00h, 01h, 0ffh, 0ffh, 0ffh, 01h, 02h, 0ffh + BYTE 02h, 03h, 0ffh, 0ffh, 0ffh, 03h, 04h, 0ffh + BYTE 05h, 06h, 0ffh, 0ffh, 0ffh, 06h, 07h, 0ffh + BYTE 07h, 08h, 0ffh, 0ffh, 0ffh, 08h, 09h, 0ffh +ptr_L_mldsa_decode_t1_x2_avx512_shuff_0 QWORD L_mldsa_decode_t1_x2_avx512_shuff_0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_shuff_1 BYTE 02h, 03h, 0ffh, 0ffh, 0ffh, 03h, 04h, 0ffh + BYTE 04h, 05h, 0ffh, 0ffh, 0ffh, 05h, 06h, 0ffh + BYTE 07h, 08h, 0ffh, 0ffh, 0ffh, 08h, 09h, 0ffh + BYTE 09h, 0ah, 08h, 0ffh, 0ffh, 0ah, 0bh, 0ffh +ptr_L_mldsa_decode_t1_x2_avx512_shuff_1 QWORD L_mldsa_decode_t1_x2_avx512_shuff_1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_shuff_2 BYTE 04h, 05h, 0ffh, 0ffh, 0ffh, 05h, 06h, 0ffh + BYTE 06h, 07h, 0ffh, 0ffh, 0ffh, 07h, 08h, 0ffh + BYTE 01h, 02h, 0ffh, 0ffh, 0ffh, 02h, 03h, 0ffh + BYTE 03h, 04h, 0ffh, 0ffh, 0ffh, 04h, 05h, 0ffh +ptr_L_mldsa_decode_t1_x2_avx512_shuff_2 QWORD L_mldsa_decode_t1_x2_avx512_shuff_2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_shuff_3 BYTE 06h, 07h, 0ffh, 0ffh, 0ffh, 07h, 08h, 0ffh + BYTE 08h, 09h, 0ffh, 0ffh, 0ffh, 09h, 0ah, 0ffh + BYTE 03h, 04h, 0ffh, 0ffh, 0ffh, 04h, 05h, 0ffh + BYTE 05h, 06h, 0ffh, 0ffh, 0ffh, 06h, 07h, 0ffh +ptr_L_mldsa_decode_t1_x2_avx512_shuff_3 QWORD L_mldsa_decode_t1_x2_avx512_shuff_3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_vs_8 DWORD 00000000h, 0000000ah, 00000004h, 0000000eh + DWORD 00000000h, 0000000ah, 00000004h, 0000000eh +ptr_L_mldsa_decode_t1_x2_avx512_vs_8 QWORD L_mldsa_decode_t1_x2_avx512_vs_8 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_t1_x2_avx512_mask DWORD 000003ffh, 000003ffh, 000003ffh, 000003ffh + DWORD 000003ffh, 000003ffh, 000003ffh, 000003ffh +ptr_L_mldsa_decode_t1_x2_avx512_mask QWORD L_mldsa_decode_t1_x2_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_t1_x2_avx512 PROC + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu64 zmm11, ZMMWORD PTR L_mldsa_avx512_perm21 + vbroadcasti64x4 zmm5, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_shuff_0 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_shuff_1 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_shuff_2 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_shuff_3 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_vs_8 + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_t1_x2_avx512_mask + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + ; 1/32 + vpermq zmm4, zmm0, 68 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8], ymm4 + vextracti64x4 YMMWORD PTR [r9], zmm4, 1 + ; 2/32 + vpermq zmm4, zmm0, 153 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+32], ymm4 + vextracti64x4 YMMWORD PTR [r9+32], zmm4, 1 + ; 3/32 + vpermq zmm4, zmm0, 62 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+64], ymm4 + vextracti64x4 YMMWORD PTR [r9+64], zmm4, 1 + ; 4/32 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm0, zmm1 + vmovdqa64 zmm0, zmm12 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+96], ymm4 + vextracti64x4 YMMWORD PTR [r9+96], zmm4, 1 + ; 5/32 + vpermq zmm4, zmm1, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+128], ymm4 + vextracti64x4 YMMWORD PTR [r9+128], zmm4, 1 + ; 6/32 + vpermq zmm4, zmm1, 238 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+160], ymm4 + vextracti64x4 YMMWORD PTR [r9+160], zmm4, 1 + ; 7/32 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm1, zmm2 + vmovdqa64 zmm1, zmm12 + vpermq zmm4, zmm1, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+192], ymm4 + vextracti64x4 YMMWORD PTR [r9+192], zmm4, 1 + ; 8/32 + vpermq zmm4, zmm2, 148 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+224], ymm4 + vextracti64x4 YMMWORD PTR [r9+224], zmm4, 1 + ; 9/32 + vpermq zmm4, zmm2, 238 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+256], ymm4 + vextracti64x4 YMMWORD PTR [r9+256], zmm4, 1 + ; 10/32 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm2, zmm3 + vmovdqa64 zmm2, zmm12 + vpermq zmm4, zmm2, 153 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+288], ymm4 + vextracti64x4 YMMWORD PTR [r9+288], zmm4, 1 + ; 11/32 + vpermq zmm4, zmm3, 148 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+320], ymm4 + vextracti64x4 YMMWORD PTR [r9+320], zmm4, 1 + ; 12/32 + vpermq zmm4, zmm3, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+352], ymm4 + vextracti64x4 YMMWORD PTR [r9+352], zmm4, 1 + ; 13/32 + vmovdqu64 ymm0, YMMWORD PTR [rcx+128] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+160] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+160], 1 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm3, zmm0 + vmovdqa64 zmm3, zmm12 + vpermq zmm4, zmm3, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+384], ymm4 + vextracti64x4 YMMWORD PTR [r9+384], zmm4, 1 + ; 14/32 + vpermq zmm4, zmm0, 68 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+416], ymm4 + vextracti64x4 YMMWORD PTR [r9+416], zmm4, 1 + ; 15/32 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+448], ymm4 + vextracti64x4 YMMWORD PTR [r9+448], zmm4, 1 + ; 16/32 + vpermq zmm4, zmm0, 62 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+480], ymm4 + vextracti64x4 YMMWORD PTR [r9+480], zmm4, 1 + ; 17/32 + vpermq zmm4, zmm1, 68 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+512], ymm4 + vextracti64x4 YMMWORD PTR [r9+512], zmm4, 1 + ; 18/32 + vpermq zmm4, zmm1, 153 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+544], ymm4 + vextracti64x4 YMMWORD PTR [r9+544], zmm4, 1 + ; 19/32 + vpermq zmm4, zmm1, 62 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+576], ymm4 + vextracti64x4 YMMWORD PTR [r9+576], zmm4, 1 + ; 20/32 + vmovdqu64 ymm2, YMMWORD PTR [rcx+192] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+224] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm1, zmm2 + vmovdqa64 zmm1, zmm12 + vpermq zmm4, zmm1, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+608], ymm4 + vextracti64x4 YMMWORD PTR [r9+608], zmm4, 1 + ; 21/32 + vpermq zmm4, zmm2, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+640], ymm4 + vextracti64x4 YMMWORD PTR [r9+640], zmm4, 1 + ; 22/32 + vpermq zmm4, zmm2, 238 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+672], ymm4 + vextracti64x4 YMMWORD PTR [r9+672], zmm4, 1 + ; 23/32 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm2, zmm3 + vmovdqa64 zmm2, zmm12 + vpermq zmm4, zmm2, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+704], ymm4 + vextracti64x4 YMMWORD PTR [r9+704], zmm4, 1 + ; 24/32 + vpermq zmm4, zmm3, 148 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+736], ymm4 + vextracti64x4 YMMWORD PTR [r9+736], zmm4, 1 + ; 25/32 + vpermq zmm4, zmm3, 238 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+768], ymm4 + vextracti64x4 YMMWORD PTR [r9+768], zmm4, 1 + ; 26/32 + vmovdqu64 ymm0, YMMWORD PTR [rcx+256] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+288] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+288], 1 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm3, zmm0 + vmovdqa64 zmm3, zmm12 + vpermq zmm4, zmm3, 153 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+800], ymm4 + vextracti64x4 YMMWORD PTR [r9+800], zmm4, 1 + ; 27/32 + vpermq zmm4, zmm0, 148 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+832], ymm4 + vextracti64x4 YMMWORD PTR [r9+832], zmm4, 1 + ; 28/32 + vpermq zmm4, zmm0, 233 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+864], ymm4 + vextracti64x4 YMMWORD PTR [r9+864], zmm4, 1 + ; 29/32 + vmovdqa64 zmm12, zmm11 + vpermi2q zmm12, zmm0, zmm1 + vmovdqa64 zmm0, zmm12 + vpermq zmm4, zmm0, 153 + vpshufb zmm4, zmm4, zmm5 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+896], ymm4 + vextracti64x4 YMMWORD PTR [r9+896], zmm4, 1 + ; 30/32 + vpermq zmm4, zmm1, 68 + vpshufb zmm4, zmm4, zmm6 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+928], ymm4 + vextracti64x4 YMMWORD PTR [r9+928], zmm4, 1 + ; 31/32 + vpermq zmm4, zmm1, 233 + vpshufb zmm4, zmm4, zmm7 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+960], ymm4 + vextracti64x4 YMMWORD PTR [r9+960], zmm4, 1 + ; 32/32 + vpermq zmm4, zmm1, 62 + vpshufb zmm4, zmm4, zmm8 + vpsrlvd zmm4, zmm4, zmm9 + vpandd zmm4, zmm4, zmm10 + vpslld zmm4, zmm4, 13 + vmovdqu64 YMMWORD PTR [r8+992], ymm4 + vextracti64x4 YMMWORD PTR [r9+992], zmm4, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 + ret +wc_mldsa_decode_t1_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_0 BYTE 00h, 0ffh, 0ffh, 0ffh, 00h, 0ffh, 0ffh, 0ffh + BYTE 00h, 01h, 0ffh, 0ffh, 01h, 0ffh, 0ffh, 0ffh + BYTE 01h, 0ffh, 0ffh, 0ffh, 01h, 02h, 0ffh, 0ffh + BYTE 02h, 0ffh, 0ffh, 0ffh, 02h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_0 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_1 BYTE 01h, 0ffh, 0ffh, 0ffh, 01h, 0ffh, 0ffh, 0ffh + BYTE 01h, 02h, 0ffh, 0ffh, 02h, 0ffh, 0ffh, 0ffh + BYTE 02h, 0ffh, 0ffh, 0ffh, 02h, 03h, 0ffh, 0ffh + BYTE 03h, 0ffh, 0ffh, 0ffh, 03h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_1 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_2 BYTE 02h, 0ffh, 0ffh, 0ffh, 02h, 0ffh, 0ffh, 0ffh + BYTE 02h, 03h, 0ffh, 0ffh, 03h, 0ffh, 0ffh, 0ffh + BYTE 03h, 0ffh, 0ffh, 0ffh, 03h, 04h, 0ffh, 0ffh + BYTE 04h, 0ffh, 0ffh, 0ffh, 04h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_2 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_3 BYTE 03h, 0ffh, 0ffh, 0ffh, 03h, 0ffh, 0ffh, 0ffh + BYTE 03h, 04h, 0ffh, 0ffh, 04h, 0ffh, 0ffh, 0ffh + BYTE 04h, 0ffh, 0ffh, 0ffh, 04h, 05h, 0ffh, 0ffh + BYTE 05h, 0ffh, 0ffh, 0ffh, 05h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_3 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_4 BYTE 04h, 0ffh, 0ffh, 0ffh, 04h, 0ffh, 0ffh, 0ffh + BYTE 04h, 05h, 0ffh, 0ffh, 05h, 0ffh, 0ffh, 0ffh + BYTE 05h, 0ffh, 0ffh, 0ffh, 05h, 06h, 0ffh, 0ffh + BYTE 06h, 0ffh, 0ffh, 0ffh, 06h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_4 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_4 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_5 BYTE 05h, 0ffh, 0ffh, 0ffh, 05h, 0ffh, 0ffh, 0ffh + BYTE 05h, 06h, 0ffh, 0ffh, 06h, 0ffh, 0ffh, 0ffh + BYTE 06h, 0ffh, 0ffh, 0ffh, 06h, 07h, 0ffh, 0ffh + BYTE 07h, 0ffh, 0ffh, 0ffh, 07h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_5 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_5 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_6 BYTE 06h, 0ffh, 0ffh, 0ffh, 06h, 0ffh, 0ffh, 0ffh + BYTE 06h, 07h, 0ffh, 0ffh, 07h, 0ffh, 0ffh, 0ffh + BYTE 07h, 0ffh, 0ffh, 0ffh, 07h, 08h, 0ffh, 0ffh + BYTE 08h, 0ffh, 0ffh, 0ffh, 08h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_6 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_6 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_shuff_7 BYTE 07h, 0ffh, 0ffh, 0ffh, 07h, 0ffh, 0ffh, 0ffh + BYTE 07h, 08h, 0ffh, 0ffh, 08h, 0ffh, 0ffh, 0ffh + BYTE 08h, 0ffh, 0ffh, 0ffh, 08h, 09h, 0ffh, 0ffh + BYTE 09h, 0ffh, 0ffh, 0ffh, 09h, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_decode_eta_2_x2_avx512_shuff_7 QWORD L_mldsa_decode_eta_2_x2_avx512_shuff_7 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_two DWORD 00000002h, 00000002h, 00000002h, 00000002h + DWORD 00000002h, 00000002h, 00000002h, 00000002h +ptr_L_mldsa_decode_eta_2_x2_avx512_two QWORD L_mldsa_decode_eta_2_x2_avx512_two +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_vs DWORD 00000000h, 00000003h, 00000006h, 00000001h + DWORD 00000004h, 00000007h, 00000002h, 00000005h +ptr_L_mldsa_decode_eta_2_x2_avx512_vs QWORD L_mldsa_decode_eta_2_x2_avx512_vs +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_2_x2_avx512_mask DWORD 00000007h, 00000007h, 00000007h, 00000007h + DWORD 00000007h, 00000007h, 00000007h, 00000007h +ptr_L_mldsa_decode_eta_2_x2_avx512_mask QWORD L_mldsa_decode_eta_2_x2_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_eta_2_x2_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu64 zmm15, ZMMWORD PTR L_mldsa_avx512_perm20 + vbroadcasti64x4 zmm4, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_0 + vbroadcasti64x4 zmm5, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_1 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_2 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_3 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_4 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_5 + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_6 + vbroadcasti64x4 zmm11, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_shuff_7 + vbroadcasti64x4 zmm12, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_two + vbroadcasti64x4 zmm13, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_vs + vbroadcasti64x4 zmm14, YMMWORD PTR L_mldsa_decode_eta_2_x2_avx512_mask + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm4 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8], ymm3 + vextracti64x4 YMMWORD PTR [r9], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm7 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+32], ymm3 + vextracti64x4 YMMWORD PTR [r9+32], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm10 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+64], ymm3 + vextracti64x4 YMMWORD PTR [r9+64], zmm3, 1 + vpermq zmm0, zmm0, 57 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm5 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+96], ymm3 + vextracti64x4 YMMWORD PTR [r9+96], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm8 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+128], ymm3 + vextracti64x4 YMMWORD PTR [r9+128], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm11 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+160], ymm3 + vextracti64x4 YMMWORD PTR [r9+160], zmm3, 1 + vpermq zmm0, zmm0, 57 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm6 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+192], ymm3 + vextracti64x4 YMMWORD PTR [r9+192], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm9 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+224], ymm3 + vextracti64x4 YMMWORD PTR [r9+224], zmm3, 1 + vpermq zmm0, zmm0, 57 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm4 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+256], ymm3 + vextracti64x4 YMMWORD PTR [r9+256], zmm3, 1 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm7 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+288], ymm3 + vextracti64x4 YMMWORD PTR [r9+288], zmm3, 1 + vmovdqa64 zmm16, zmm15 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpermq zmm0, zmm0, 56 + vpermq zmm3, zmm0, 68 + vpshufb zmm3, zmm3, zmm10 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+320], ymm3 + vextracti64x4 YMMWORD PTR [r9+320], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm5 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+352], ymm3 + vextracti64x4 YMMWORD PTR [r9+352], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm8 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+384], ymm3 + vextracti64x4 YMMWORD PTR [r9+384], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm11 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+416], ymm3 + vextracti64x4 YMMWORD PTR [r9+416], zmm3, 1 + vpermq zmm1, zmm1, 57 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm6 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+448], ymm3 + vextracti64x4 YMMWORD PTR [r9+448], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm9 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+480], ymm3 + vextracti64x4 YMMWORD PTR [r9+480], zmm3, 1 + vpermq zmm1, zmm1, 57 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm4 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+512], ymm3 + vextracti64x4 YMMWORD PTR [r9+512], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm7 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+544], ymm3 + vextracti64x4 YMMWORD PTR [r9+544], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm10 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+576], ymm3 + vextracti64x4 YMMWORD PTR [r9+576], zmm3, 1 + vpermq zmm1, zmm1, 57 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm5 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+608], ymm3 + vextracti64x4 YMMWORD PTR [r9+608], zmm3, 1 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm8 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+640], ymm3 + vextracti64x4 YMMWORD PTR [r9+640], zmm3, 1 + vmovdqa64 zmm16, zmm15 + vpermi2q zmm16, zmm1, zmm2 + vmovdqa64 zmm1, zmm16 + vpermq zmm1, zmm1, 56 + vpermq zmm3, zmm1, 68 + vpshufb zmm3, zmm3, zmm11 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+672], ymm3 + vextracti64x4 YMMWORD PTR [r9+672], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm6 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+704], ymm3 + vextracti64x4 YMMWORD PTR [r9+704], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm9 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+736], ymm3 + vextracti64x4 YMMWORD PTR [r9+736], zmm3, 1 + vpermq zmm2, zmm2, 57 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm4 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+768], ymm3 + vextracti64x4 YMMWORD PTR [r9+768], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm7 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+800], ymm3 + vextracti64x4 YMMWORD PTR [r9+800], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm10 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+832], ymm3 + vextracti64x4 YMMWORD PTR [r9+832], zmm3, 1 + vpermq zmm2, zmm2, 57 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm5 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+864], ymm3 + vextracti64x4 YMMWORD PTR [r9+864], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm8 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+896], ymm3 + vextracti64x4 YMMWORD PTR [r9+896], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm11 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+928], ymm3 + vextracti64x4 YMMWORD PTR [r9+928], zmm3, 1 + vpermq zmm2, zmm2, 57 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm6 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+960], ymm3 + vextracti64x4 YMMWORD PTR [r9+960], zmm3, 1 + vpermq zmm3, zmm2, 68 + vpshufb zmm3, zmm3, zmm9 + vpsrlvd zmm3, zmm3, zmm13 + vpandd zmm3, zmm3, zmm14 + vpsubd zmm3, zmm12, zmm3 + vmovdqu64 YMMWORD PTR [r8+992], ymm3 + vextracti64x4 YMMWORD PTR [r9+992], zmm3, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_decode_eta_2_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_4_x2_avx512_four DWORD 00000004h, 00000004h, 00000004h, 00000004h + DWORD 00000004h, 00000004h, 00000004h, 00000004h +ptr_L_mldsa_decode_eta_4_x2_avx512_four QWORD L_mldsa_decode_eta_4_x2_avx512_four +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_4_x2_avx512_vs DWORD 00000000h, 00000004h, 00000008h, 0000000ch + DWORD 00000010h, 00000014h, 00000018h, 0000001ch +ptr_L_mldsa_decode_eta_4_x2_avx512_vs QWORD L_mldsa_decode_eta_4_x2_avx512_vs +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_decode_eta_4_x2_avx512_mask DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh + DWORD 0000000fh, 0000000fh, 0000000fh, 0000000fh +ptr_L_mldsa_decode_eta_4_x2_avx512_mask QWORD L_mldsa_decode_eta_4_x2_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decode_eta_4_x2_avx512 PROC + sub rsp, 88 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + mov eax, 65280 + kmovw k1, eax + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_decode_eta_4_x2_avx512_four + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_decode_eta_4_x2_avx512_vs + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_decode_eta_4_x2_avx512_mask + vpbroadcastd zmm0, DWORD PTR [rcx] + vpbroadcastd zmm0{k1}, DWORD PTR [rdx] + vpbroadcastd zmm1, DWORD PTR [rcx+4] + vpbroadcastd zmm1{k1}, DWORD PTR [rdx+4] + vpbroadcastd zmm2, DWORD PTR [rcx+8] + vpbroadcastd zmm2{k1}, DWORD PTR [rdx+8] + vpbroadcastd zmm3, DWORD PTR [rcx+12] + vpbroadcastd zmm3{k1}, DWORD PTR [rdx+12] + vpbroadcastd zmm4, DWORD PTR [rcx+16] + vpbroadcastd zmm4{k1}, DWORD PTR [rdx+16] + vpbroadcastd zmm5, DWORD PTR [rcx+20] + vpbroadcastd zmm5{k1}, DWORD PTR [rdx+20] + vpbroadcastd zmm6, DWORD PTR [rcx+24] + vpbroadcastd zmm6{k1}, DWORD PTR [rdx+24] + vpbroadcastd zmm7, DWORD PTR [rcx+28] + vpbroadcastd zmm7{k1}, DWORD PTR [rdx+28] + vpsrlvd zmm0, zmm0, zmm9 + vpsrlvd zmm1, zmm1, zmm9 + vpsrlvd zmm2, zmm2, zmm9 + vpsrlvd zmm3, zmm3, zmm9 + vpsrlvd zmm4, zmm4, zmm9 + vpsrlvd zmm5, zmm5, zmm9 + vpsrlvd zmm6, zmm6, zmm9 + vpsrlvd zmm7, zmm7, zmm9 + vpandd zmm0, zmm0, zmm10 + vpandd zmm1, zmm1, zmm10 + vpandd zmm2, zmm2, zmm10 + vpandd zmm3, zmm3, zmm10 + vpandd zmm4, zmm4, zmm10 + vpandd zmm5, zmm5, zmm10 + vpandd zmm6, zmm6, zmm10 + vpandd zmm7, zmm7, zmm10 + vpsubd zmm0, zmm8, zmm0 + vpsubd zmm1, zmm8, zmm1 + vpsubd zmm2, zmm8, zmm2 + vpsubd zmm3, zmm8, zmm3 + vpsubd zmm4, zmm8, zmm4 + vpsubd zmm5, zmm8, zmm5 + vpsubd zmm6, zmm8, zmm6 + vpsubd zmm7, zmm8, zmm7 + vmovdqu64 YMMWORD PTR [r8], ymm0 + vextracti64x4 YMMWORD PTR [r9], zmm0, 1 + vmovdqu64 YMMWORD PTR [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [r9+32], zmm1, 1 + vmovdqu64 YMMWORD PTR [r8+64], ymm2 + vextracti64x4 YMMWORD PTR [r9+64], zmm2, 1 + vmovdqu64 YMMWORD PTR [r8+96], ymm3 + vextracti64x4 YMMWORD PTR [r9+96], zmm3, 1 + vmovdqu64 YMMWORD PTR [r8+128], ymm4 + vextracti64x4 YMMWORD PTR [r9+128], zmm4, 1 + vmovdqu64 YMMWORD PTR [r8+160], ymm5 + vextracti64x4 YMMWORD PTR [r9+160], zmm5, 1 + vmovdqu64 YMMWORD PTR [r8+192], ymm6 + vextracti64x4 YMMWORD PTR [r9+192], zmm6, 1 + vmovdqu64 YMMWORD PTR [r8+224], ymm7 + vextracti64x4 YMMWORD PTR [r9+224], zmm7, 1 + vpbroadcastd zmm0, DWORD PTR [rcx+32] + vpbroadcastd zmm0{k1}, DWORD PTR [rdx+32] + vpbroadcastd zmm1, DWORD PTR [rcx+36] + vpbroadcastd zmm1{k1}, DWORD PTR [rdx+36] + vpbroadcastd zmm2, DWORD PTR [rcx+40] + vpbroadcastd zmm2{k1}, DWORD PTR [rdx+40] + vpbroadcastd zmm3, DWORD PTR [rcx+44] + vpbroadcastd zmm3{k1}, DWORD PTR [rdx+44] + vpbroadcastd zmm4, DWORD PTR [rcx+48] + vpbroadcastd zmm4{k1}, DWORD PTR [rdx+48] + vpbroadcastd zmm5, DWORD PTR [rcx+52] + vpbroadcastd zmm5{k1}, DWORD PTR [rdx+52] + vpbroadcastd zmm6, DWORD PTR [rcx+56] + vpbroadcastd zmm6{k1}, DWORD PTR [rdx+56] + vpbroadcastd zmm7, DWORD PTR [rcx+60] + vpbroadcastd zmm7{k1}, DWORD PTR [rdx+60] + vpsrlvd zmm0, zmm0, zmm9 + vpsrlvd zmm1, zmm1, zmm9 + vpsrlvd zmm2, zmm2, zmm9 + vpsrlvd zmm3, zmm3, zmm9 + vpsrlvd zmm4, zmm4, zmm9 + vpsrlvd zmm5, zmm5, zmm9 + vpsrlvd zmm6, zmm6, zmm9 + vpsrlvd zmm7, zmm7, zmm9 + vpandd zmm0, zmm0, zmm10 + vpandd zmm1, zmm1, zmm10 + vpandd zmm2, zmm2, zmm10 + vpandd zmm3, zmm3, zmm10 + vpandd zmm4, zmm4, zmm10 + vpandd zmm5, zmm5, zmm10 + vpandd zmm6, zmm6, zmm10 + vpandd zmm7, zmm7, zmm10 + vpsubd zmm0, zmm8, zmm0 + vpsubd zmm1, zmm8, zmm1 + vpsubd zmm2, zmm8, zmm2 + vpsubd zmm3, zmm8, zmm3 + vpsubd zmm4, zmm8, zmm4 + vpsubd zmm5, zmm8, zmm5 + vpsubd zmm6, zmm8, zmm6 + vpsubd zmm7, zmm8, zmm7 + vmovdqu64 YMMWORD PTR [r8+256], ymm0 + vextracti64x4 YMMWORD PTR [r9+256], zmm0, 1 + vmovdqu64 YMMWORD PTR [r8+288], ymm1 + vextracti64x4 YMMWORD PTR [r9+288], zmm1, 1 + vmovdqu64 YMMWORD PTR [r8+320], ymm2 + vextracti64x4 YMMWORD PTR [r9+320], zmm2, 1 + vmovdqu64 YMMWORD PTR [r8+352], ymm3 + vextracti64x4 YMMWORD PTR [r9+352], zmm3, 1 + vmovdqu64 YMMWORD PTR [r8+384], ymm4 + vextracti64x4 YMMWORD PTR [r9+384], zmm4, 1 + vmovdqu64 YMMWORD PTR [r8+416], ymm5 + vextracti64x4 YMMWORD PTR [r9+416], zmm5, 1 + vmovdqu64 YMMWORD PTR [r8+448], ymm6 + vextracti64x4 YMMWORD PTR [r9+448], zmm6, 1 + vmovdqu64 YMMWORD PTR [r8+480], ymm7 + vextracti64x4 YMMWORD PTR [r9+480], zmm7, 1 + vpbroadcastd zmm0, DWORD PTR [rcx+64] + vpbroadcastd zmm0{k1}, DWORD PTR [rdx+64] + vpbroadcastd zmm1, DWORD PTR [rcx+68] + vpbroadcastd zmm1{k1}, DWORD PTR [rdx+68] + vpbroadcastd zmm2, DWORD PTR [rcx+72] + vpbroadcastd zmm2{k1}, DWORD PTR [rdx+72] + vpbroadcastd zmm3, DWORD PTR [rcx+76] + vpbroadcastd zmm3{k1}, DWORD PTR [rdx+76] + vpbroadcastd zmm4, DWORD PTR [rcx+80] + vpbroadcastd zmm4{k1}, DWORD PTR [rdx+80] + vpbroadcastd zmm5, DWORD PTR [rcx+84] + vpbroadcastd zmm5{k1}, DWORD PTR [rdx+84] + vpbroadcastd zmm6, DWORD PTR [rcx+88] + vpbroadcastd zmm6{k1}, DWORD PTR [rdx+88] + vpbroadcastd zmm7, DWORD PTR [rcx+92] + vpbroadcastd zmm7{k1}, DWORD PTR [rdx+92] + vpsrlvd zmm0, zmm0, zmm9 + vpsrlvd zmm1, zmm1, zmm9 + vpsrlvd zmm2, zmm2, zmm9 + vpsrlvd zmm3, zmm3, zmm9 + vpsrlvd zmm4, zmm4, zmm9 + vpsrlvd zmm5, zmm5, zmm9 + vpsrlvd zmm6, zmm6, zmm9 + vpsrlvd zmm7, zmm7, zmm9 + vpandd zmm0, zmm0, zmm10 + vpandd zmm1, zmm1, zmm10 + vpandd zmm2, zmm2, zmm10 + vpandd zmm3, zmm3, zmm10 + vpandd zmm4, zmm4, zmm10 + vpandd zmm5, zmm5, zmm10 + vpandd zmm6, zmm6, zmm10 + vpandd zmm7, zmm7, zmm10 + vpsubd zmm0, zmm8, zmm0 + vpsubd zmm1, zmm8, zmm1 + vpsubd zmm2, zmm8, zmm2 + vpsubd zmm3, zmm8, zmm3 + vpsubd zmm4, zmm8, zmm4 + vpsubd zmm5, zmm8, zmm5 + vpsubd zmm6, zmm8, zmm6 + vpsubd zmm7, zmm8, zmm7 + vmovdqu64 YMMWORD PTR [r8+512], ymm0 + vextracti64x4 YMMWORD PTR [r9+512], zmm0, 1 + vmovdqu64 YMMWORD PTR [r8+544], ymm1 + vextracti64x4 YMMWORD PTR [r9+544], zmm1, 1 + vmovdqu64 YMMWORD PTR [r8+576], ymm2 + vextracti64x4 YMMWORD PTR [r9+576], zmm2, 1 + vmovdqu64 YMMWORD PTR [r8+608], ymm3 + vextracti64x4 YMMWORD PTR [r9+608], zmm3, 1 + vmovdqu64 YMMWORD PTR [r8+640], ymm4 + vextracti64x4 YMMWORD PTR [r9+640], zmm4, 1 + vmovdqu64 YMMWORD PTR [r8+672], ymm5 + vextracti64x4 YMMWORD PTR [r9+672], zmm5, 1 + vmovdqu64 YMMWORD PTR [r8+704], ymm6 + vextracti64x4 YMMWORD PTR [r9+704], zmm6, 1 + vmovdqu64 YMMWORD PTR [r8+736], ymm7 + vextracti64x4 YMMWORD PTR [r9+736], zmm7, 1 + vpbroadcastd zmm0, DWORD PTR [rcx+96] + vpbroadcastd zmm0{k1}, DWORD PTR [rdx+96] + vpbroadcastd zmm1, DWORD PTR [rcx+100] + vpbroadcastd zmm1{k1}, DWORD PTR [rdx+100] + vpbroadcastd zmm2, DWORD PTR [rcx+104] + vpbroadcastd zmm2{k1}, DWORD PTR [rdx+104] + vpbroadcastd zmm3, DWORD PTR [rcx+108] + vpbroadcastd zmm3{k1}, DWORD PTR [rdx+108] + vpbroadcastd zmm4, DWORD PTR [rcx+112] + vpbroadcastd zmm4{k1}, DWORD PTR [rdx+112] + vpbroadcastd zmm5, DWORD PTR [rcx+116] + vpbroadcastd zmm5{k1}, DWORD PTR [rdx+116] + vpbroadcastd zmm6, DWORD PTR [rcx+120] + vpbroadcastd zmm6{k1}, DWORD PTR [rdx+120] + vpbroadcastd zmm7, DWORD PTR [rcx+124] + vpbroadcastd zmm7{k1}, DWORD PTR [rdx+124] + vpsrlvd zmm0, zmm0, zmm9 + vpsrlvd zmm1, zmm1, zmm9 + vpsrlvd zmm2, zmm2, zmm9 + vpsrlvd zmm3, zmm3, zmm9 + vpsrlvd zmm4, zmm4, zmm9 + vpsrlvd zmm5, zmm5, zmm9 + vpsrlvd zmm6, zmm6, zmm9 + vpsrlvd zmm7, zmm7, zmm9 + vpandd zmm0, zmm0, zmm10 + vpandd zmm1, zmm1, zmm10 + vpandd zmm2, zmm2, zmm10 + vpandd zmm3, zmm3, zmm10 + vpandd zmm4, zmm4, zmm10 + vpandd zmm5, zmm5, zmm10 + vpandd zmm6, zmm6, zmm10 + vpandd zmm7, zmm7, zmm10 + vpsubd zmm0, zmm8, zmm0 + vpsubd zmm1, zmm8, zmm1 + vpsubd zmm2, zmm8, zmm2 + vpsubd zmm3, zmm8, zmm3 + vpsubd zmm4, zmm8, zmm4 + vpsubd zmm5, zmm8, zmm5 + vpsubd zmm6, zmm8, zmm6 + vpsubd zmm7, zmm8, zmm7 + vmovdqu64 YMMWORD PTR [r8+768], ymm0 + vextracti64x4 YMMWORD PTR [r9+768], zmm0, 1 + vmovdqu64 YMMWORD PTR [r8+800], ymm1 + vextracti64x4 YMMWORD PTR [r9+800], zmm1, 1 + vmovdqu64 YMMWORD PTR [r8+832], ymm2 + vextracti64x4 YMMWORD PTR [r9+832], zmm2, 1 + vmovdqu64 YMMWORD PTR [r8+864], ymm3 + vextracti64x4 YMMWORD PTR [r9+864], zmm3, 1 + vmovdqu64 YMMWORD PTR [r8+896], ymm4 + vextracti64x4 YMMWORD PTR [r9+896], zmm4, 1 + vmovdqu64 YMMWORD PTR [r8+928], ymm5 + vextracti64x4 YMMWORD PTR [r9+928], zmm5, 1 + vmovdqu64 YMMWORD PTR [r8+960], ymm6 + vextracti64x4 YMMWORD PTR [r9+960], zmm6, 1 + vmovdqu64 YMMWORD PTR [r8+992], ymm7 + vextracti64x4 YMMWORD PTR [r9+992], zmm7, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + add rsp, 88 + ret +wc_mldsa_decode_eta_4_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_gamma DWORD 00020000h, 00020000h, 00020000h, 00020000h + DWORD 00020000h, 00020000h, 00020000h, 00020000h + DWORD 00020000h, 00020000h, 00020000h, 00020000h + DWORD 00020000h, 00020000h, 00020000h, 00020000h +ptr_L_mldsa_encode_gamma1_17_avx512_gamma QWORD L_mldsa_encode_gamma1_17_avx512_gamma +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_perm0 DWORD 00000000h, 00000001h, 00000003h, 00000005h + DWORD 00000007h, 00000008h, 0000000ah, 0000000ch + DWORD 0000000eh, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_17_avx512_perm0 QWORD L_mldsa_encode_gamma1_17_avx512_perm0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_shift0 DWORD 00000000h, 0000000eh, 0000000ah, 00000006h + DWORD 00000002h, 00000010h, 0000000ch, 00000008h + DWORD 00000004h, 00000020h, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_17_avx512_shift0 QWORD L_mldsa_encode_gamma1_17_avx512_shift0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_perm1 DWORD 00000001h, 00000002h, 00000004h, 00000006h + DWORD 00000008h, 00000009h, 0000000bh, 0000000dh + DWORD 0000000fh, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_17_avx512_perm1 QWORD L_mldsa_encode_gamma1_17_avx512_perm1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_shift1 DWORD 00000012h, 00000004h, 00000008h, 0000000ch + DWORD 00000010h, 00000002h, 00000006h, 0000000ah + DWORD 0000000eh, 00000020h, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_17_avx512_shift1 QWORD L_mldsa_encode_gamma1_17_avx512_shift1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_perm2 DWORD 00000000h, 00000003h, 00000005h, 00000007h + DWORD 00000000h, 0000000ah, 0000000ch, 0000000eh + DWORD 00000000h, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_17_avx512_perm2 QWORD L_mldsa_encode_gamma1_17_avx512_perm2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_17_avx512_shift2 DWORD 00000020h, 00000016h, 0000001ah, 0000001eh + DWORD 00000020h, 00000014h, 00000018h, 0000001ch + DWORD 00000020h, 00000020h, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_17_avx512_shift2 QWORD L_mldsa_encode_gamma1_17_avx512_shift2 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_gamma1_17_avx512 PROC + sub rsp, 88 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu64 zmm10, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_gamma + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_perm0 + vmovdqu64 zmm7, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_shift0 + vmovdqu64 zmm5, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_perm1 + vmovdqu64 zmm8, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_shift1 + vmovdqu64 zmm6, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_perm2 + vmovdqu64 zmm9, ZMMWORD PTR L_mldsa_encode_gamma1_17_avx512_shift2 + mov eax, 511 + kmovw k1, eax + vmovdqu64 zmm0, [rcx] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx], zmm1 + vmovdqu64 zmm0, [rcx+64] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+36], zmm1 + vmovdqu64 zmm0, [rcx+128] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+72], zmm1 + vmovdqu64 zmm0, [rcx+192] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+108], zmm1 + vmovdqu64 zmm0, [rcx+256] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+144], zmm1 + vmovdqu64 zmm0, [rcx+320] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+180], zmm1 + vmovdqu64 zmm0, [rcx+384] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+216], zmm1 + vmovdqu64 zmm0, [rcx+448] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+252], zmm1 + vmovdqu64 zmm0, [rcx+512] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+288], zmm1 + vmovdqu64 zmm0, [rcx+576] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+324], zmm1 + vmovdqu64 zmm0, [rcx+640] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+360], zmm1 + vmovdqu64 zmm0, [rcx+704] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+396], zmm1 + vmovdqu64 zmm0, [rcx+768] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+432], zmm1 + vmovdqu64 zmm0, [rcx+832] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+468], zmm1 + vmovdqu64 zmm0, [rcx+896] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+504], zmm1 + vmovdqu64 zmm0, [rcx+960] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu32 [rdx+540]{k1}, zmm1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + add rsp, 88 + ret +wc_mldsa_encode_gamma1_17_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_gamma DWORD 00080000h, 00080000h, 00080000h, 00080000h + DWORD 00080000h, 00080000h, 00080000h, 00080000h + DWORD 00080000h, 00080000h, 00080000h, 00080000h + DWORD 00080000h, 00080000h, 00080000h, 00080000h +ptr_L_mldsa_encode_gamma1_19_avx512_gamma QWORD L_mldsa_encode_gamma1_19_avx512_gamma +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_perm0 DWORD 00000000h, 00000001h, 00000003h, 00000004h + DWORD 00000006h, 00000008h, 00000009h, 0000000bh + DWORD 0000000ch, 0000000eh, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_19_avx512_perm0 QWORD L_mldsa_encode_gamma1_19_avx512_perm0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_shift0 DWORD 00000000h, 0000000ch, 00000004h, 00000010h + DWORD 00000008h, 00000000h, 0000000ch, 00000004h + DWORD 00000010h, 00000008h, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_19_avx512_shift0 QWORD L_mldsa_encode_gamma1_19_avx512_shift0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_perm1 DWORD 00000001h, 00000002h, 00000004h, 00000005h + DWORD 00000007h, 00000009h, 0000000ah, 0000000ch + DWORD 0000000dh, 0000000fh, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_19_avx512_perm1 QWORD L_mldsa_encode_gamma1_19_avx512_perm1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_shift1 DWORD 00000014h, 00000008h, 00000010h, 00000004h + DWORD 0000000ch, 00000014h, 00000008h, 00000010h + DWORD 00000004h, 0000000ch, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_19_avx512_shift1 QWORD L_mldsa_encode_gamma1_19_avx512_shift1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_perm2 DWORD 00000000h, 00000003h, 00000000h, 00000006h + DWORD 00000000h, 00000000h, 0000000bh, 00000000h + DWORD 0000000eh, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mldsa_encode_gamma1_19_avx512_perm2 QWORD L_mldsa_encode_gamma1_19_avx512_perm2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_gamma1_19_avx512_shift2 DWORD 00000020h, 0000001ch, 00000020h, 00000018h + DWORD 00000020h, 00000020h, 0000001ch, 00000020h + DWORD 00000018h, 00000020h, 00000020h, 00000020h + DWORD 00000020h, 00000020h, 00000020h, 00000020h +ptr_L_mldsa_encode_gamma1_19_avx512_shift2 QWORD L_mldsa_encode_gamma1_19_avx512_shift2 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_gamma1_19_avx512 PROC + sub rsp, 88 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu64 zmm10, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_gamma + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_perm0 + vmovdqu64 zmm7, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_shift0 + vmovdqu64 zmm5, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_perm1 + vmovdqu64 zmm8, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_shift1 + vmovdqu64 zmm6, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_perm2 + vmovdqu64 zmm9, ZMMWORD PTR L_mldsa_encode_gamma1_19_avx512_shift2 + mov eax, 1023 + kmovw k1, eax + vmovdqu64 zmm0, [rcx] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx], zmm1 + vmovdqu64 zmm0, [rcx+64] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+40], zmm1 + vmovdqu64 zmm0, [rcx+128] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+80], zmm1 + vmovdqu64 zmm0, [rcx+192] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+120], zmm1 + vmovdqu64 zmm0, [rcx+256] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+160], zmm1 + vmovdqu64 zmm0, [rcx+320] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+200], zmm1 + vmovdqu64 zmm0, [rcx+384] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+240], zmm1 + vmovdqu64 zmm0, [rcx+448] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+280], zmm1 + vmovdqu64 zmm0, [rcx+512] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+320], zmm1 + vmovdqu64 zmm0, [rcx+576] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+360], zmm1 + vmovdqu64 zmm0, [rcx+640] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+400], zmm1 + vmovdqu64 zmm0, [rcx+704] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+440], zmm1 + vmovdqu64 zmm0, [rcx+768] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+480], zmm1 + vmovdqu64 zmm0, [rcx+832] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+520], zmm1 + vmovdqu64 zmm0, [rcx+896] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu64 [rdx+560], zmm1 + vmovdqu64 zmm0, [rcx+960] + vpsubd zmm0, zmm10, zmm0 + vpermd zmm1, zmm4, zmm0 + vpermd zmm2, zmm5, zmm0 + vpermd zmm3, zmm6, zmm0 + vpsrlvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm9 + vpord zmm1, zmm1, zmm2 + vpord zmm1, zmm1, zmm3 + vmovdqu32 [rdx+600]{k1}, zmm1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + add rsp, 88 + ret +wc_mldsa_encode_gamma1_19_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_x2_avx512_shuff_0_even BYTE 00h, 09h, 0ah, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 00h, 09h, 0ah, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_w1_88_x2_avx512_shuff_0_even QWORD L_mldsa_encode_w1_88_x2_avx512_shuff_0_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd BYTE 04h, 05h, 0eh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 04h, 05h, 0eh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd QWORD L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_x2_avx512_shuff_1_even BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 00h, 09h + BYTE 0ah, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 00h, 09h, 0ah, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_w1_88_x2_avx512_shuff_1_even QWORD L_mldsa_encode_w1_88_x2_avx512_shuff_1_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 04h, 05h + BYTE 0eh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 04h, 05h, 0eh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd QWORD L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_x2_avx512_vs DWORD 00000000h, 00000006h, 0000000ch, 00000012h + DWORD 00000000h, 00000006h, 0000000ch, 00000012h +ptr_L_mldsa_encode_w1_88_x2_avx512_vs QWORD L_mldsa_encode_w1_88_x2_avx512_vs +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_w1_88_x2_avx512 PROC + sub rsp, 56 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vbroadcasti64x4 zmm4, YMMWORD PTR L_mldsa_encode_w1_88_x2_avx512_shuff_0_even + vbroadcasti64x4 zmm5, YMMWORD PTR L_mldsa_encode_w1_88_x2_avx512_shuff_0_odd + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_encode_w1_88_x2_avx512_shuff_1_even + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_encode_w1_88_x2_avx512_shuff_1_odd + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_encode_w1_88_x2_avx512_vs + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+64] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+96] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+96], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+128] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+160] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+160], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+192] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+224] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+224], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+256] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+288] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+288], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+320] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+352] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+352], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+384] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+416] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+416], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+448] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+448], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+480] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+480], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+512] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+512], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+544] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+544], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+576] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+576], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+608] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+608], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+640] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+640], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+672] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+672], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+704] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+704], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+736] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+736], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+768] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+768], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+800] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+800], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+832] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+832], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+864] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+864], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+896] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+896], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+928] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+928], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+960] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+960], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+992] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+992], 1 + vpsllvd zmm0, zmm0, zmm8 + vpsllvd zmm1, zmm1, zmm8 + vpshufb zmm2, zmm0, zmm5 + vpshufb zmm0, zmm0, zmm4 + vpshufb zmm3, zmm1, zmm7 + vpshufb zmm1, zmm1, zmm6 + vpord zmm0, zmm0, zmm2 + vpord zmm0, zmm0, zmm3 + vpord zmm0, zmm0, zmm1 + vshufi64x2 zmm2, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + vextracti32x4 xmm2, zmm0, 2 + movq QWORD PTR [r9], xmm2 + vpextrd DWORD PTR [r9+8], xmm2, 2 + add r8, 12 + add r9, 12 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + add rsp, 56 + ret +wc_mldsa_encode_w1_88_x2_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_w1_32_avx512 PROC + vmovdqu64 zmm0, [rcx] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx], zmm0 + vmovdqu64 zmm0, [rcx+64] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+8], zmm0 + vmovdqu64 zmm0, [rcx+128] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+16], zmm0 + vmovdqu64 zmm0, [rcx+192] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+24], zmm0 + vmovdqu64 zmm0, [rcx+256] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+32], zmm0 + vmovdqu64 zmm0, [rcx+320] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+40], zmm0 + vmovdqu64 zmm0, [rcx+384] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+48], zmm0 + vmovdqu64 zmm0, [rcx+448] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+56], zmm0 + vmovdqu64 zmm0, [rcx+512] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+64], zmm0 + vmovdqu64 zmm0, [rcx+576] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+72], zmm0 + vmovdqu64 zmm0, [rcx+640] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+80], zmm0 + vmovdqu64 zmm0, [rcx+704] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+88], zmm0 + vmovdqu64 zmm0, [rcx+768] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+96], zmm0 + vmovdqu64 zmm0, [rcx+832] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+104], zmm0 + vmovdqu64 zmm0, [rcx+896] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+112], zmm0 + vmovdqu64 zmm0, [rcx+960] + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+120], zmm0 + vzeroupper + ret +wc_mldsa_encode_w1_32_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_two DWORD 00000002h, 00000002h, 00000002h, 00000002h + DWORD 00000002h, 00000002h, 00000002h, 00000002h +ptr_L_mldsa_encode_eta_2_x2_avx512_two QWORD L_mldsa_encode_eta_2_x2_avx512_two +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_vs_3 DWORD 00000000h, 00000003h, 00000006h, 00000009h + DWORD 00000004h, 00000007h, 0000000ah, 0000000dh +ptr_L_mldsa_encode_eta_2_x2_avx512_vs_3 QWORD L_mldsa_encode_eta_2_x2_avx512_vs_3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_shuff_3_even BYTE 00h, 0ffh, 04h, 05h, 08h, 0ffh, 0ch, 0dh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 00h, 0ffh, 04h, 05h, 08h, 0ffh, 0ch, 0dh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_eta_2_x2_avx512_shuff_3_even QWORD L_mldsa_encode_eta_2_x2_avx512_shuff_3_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd BYTE 02h, 0ffh, 0ffh, 07h, 0ah, 0bh, 0ffh, 0fh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 02h, 0ffh, 0ffh, 07h, 0ah, 0bh, 0ffh, 0fh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd QWORD L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_shuff_6_even BYTE 00h, 04h, 05h, 08h, 0ch, 0dh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 00h, 04h + BYTE 05h, 08h, 0ch, 0dh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_eta_2_x2_avx512_shuff_6_even QWORD L_mldsa_encode_eta_2_x2_avx512_shuff_6_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd BYTE 02h, 03h, 07h, 0ah, 0bh, 0fh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 02h, 03h + BYTE 07h, 0ah, 0bh, 0fh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd QWORD L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_eta_2_x2_avx512 PROC + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_two + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_vs_3 + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_shuff_3_even + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_shuff_3_odd + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_shuff_6_even + vbroadcasti64x4 zmm11, YMMWORD PTR L_mldsa_encode_eta_2_x2_avx512_shuff_6_odd + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+128] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+160] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+160], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+192] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+224] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+256] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+288] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+288], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+320] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+352] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+384] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+416] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+416], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+448] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+448], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+480] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+480], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+512] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+512], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+544] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+544], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+576] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+576], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+608] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+608], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+640] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+640], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+672] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+672], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+704] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+704], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+736] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+736], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+768] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+768], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+800] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+800], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+832] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+832], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+864] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+864], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + vmovdqu64 OWORD PTR [r8], xmm0 + vmovdqu64 OWORD PTR [r9], xmm4 + add r8, 12 + add r9, 12 + vmovdqu64 ymm0, YMMWORD PTR [rcx+896] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+896], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+928] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+928], 1 + vmovdqu64 ymm2, YMMWORD PTR [rcx+960] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+960], 1 + vmovdqu64 ymm3, YMMWORD PTR [rcx+992] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+992], 1 + vpsubd zmm0, zmm6, zmm0 + vpsubd zmm1, zmm6, zmm1 + vpsubd zmm2, zmm6, zmm2 + vpsubd zmm3, zmm6, zmm3 + vpsllvd zmm0, zmm0, zmm7 + vpsllvd zmm1, zmm1, zmm7 + vpsllvd zmm2, zmm2, zmm7 + vpsllvd zmm3, zmm3, zmm7 + vpackusdw zmm0, zmm0, zmm2 + vpackusdw zmm1, zmm1, zmm3 + vpermq zmm0, zmm0, 216 + vpermq zmm1, zmm1, 216 + vpshufb zmm4, zmm0, zmm9 + vpshufb zmm5, zmm1, zmm9 + vpshufb zmm0, zmm0, zmm8 + vpshufb zmm1, zmm1, zmm8 + vpord zmm0, zmm0, zmm4 + vpord zmm1, zmm1, zmm5 + vpermq zmm1, zmm1, 177 + vpord zmm0, zmm0, zmm1 + vpshufb zmm4, zmm0, zmm11 + vpshufb zmm0, zmm0, zmm10 + vpord zmm0, zmm0, zmm4 + vshufi64x2 zmm4, zmm0, zmm0, 245 + vpord zmm0, zmm0, zmm4 + vextracti32x4 xmm4, zmm0, 2 + movq QWORD PTR [r8], xmm0 + vpextrd DWORD PTR [r8+8], xmm0, 2 + movq QWORD PTR [r9], xmm4 + vpextrd DWORD PTR [r9+8], xmm4, 2 + add r8, 12 + add r9, 12 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 + ret +wc_mldsa_encode_eta_2_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_eta_4_avx512_four DWORD 00000004h, 00000004h, 00000004h, 00000004h + DWORD 00000004h, 00000004h, 00000004h, 00000004h + DWORD 00000004h, 00000004h, 00000004h, 00000004h + DWORD 00000004h, 00000004h, 00000004h, 00000004h +ptr_L_mldsa_encode_eta_4_avx512_four QWORD L_mldsa_encode_eta_4_avx512_four +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_eta_4_avx512 PROC + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_encode_eta_4_avx512_four + vmovdqu64 zmm0, [rcx] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx], zmm0 + vmovdqu64 zmm0, [rcx+64] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+8], zmm0 + vmovdqu64 zmm0, [rcx+128] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+16], zmm0 + vmovdqu64 zmm0, [rcx+192] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+24], zmm0 + vmovdqu64 zmm0, [rcx+256] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+32], zmm0 + vmovdqu64 zmm0, [rcx+320] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+40], zmm0 + vmovdqu64 zmm0, [rcx+384] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+48], zmm0 + vmovdqu64 zmm0, [rcx+448] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+56], zmm0 + vmovdqu64 zmm0, [rcx+512] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+64], zmm0 + vmovdqu64 zmm0, [rcx+576] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+72], zmm0 + vmovdqu64 zmm0, [rcx+640] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+80], zmm0 + vmovdqu64 zmm0, [rcx+704] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+88], zmm0 + vmovdqu64 zmm0, [rcx+768] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+96], zmm0 + vmovdqu64 zmm0, [rcx+832] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+104], zmm0 + vmovdqu64 zmm0, [rcx+896] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+112], zmm0 + vmovdqu64 zmm0, [rcx+960] + vpsubd zmm0, zmm2, zmm0 + vpsrlq zmm1, zmm0, 28 + vpord zmm0, zmm0, zmm1 + vpmovqb QWORD PTR [rdx+120], zmm0 + vzeroupper + ret +wc_mldsa_encode_eta_4_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1 DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1 QWORD L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_d_max_half DWORD 00001000h, 00001000h, 00001000h, 00001000h + DWORD 00001000h, 00001000h, 00001000h, 00001000h +ptr_L_mldsa_encode_t0_t1_x2_avx512_d_max_half QWORD L_mldsa_encode_t0_t1_x2_avx512_d_max_half +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_vs_13 DWORD 00000000h, 0000000dh, 00000002h, 0000000fh + DWORD 00000004h, 00000011h, 00000006h, 00000013h +ptr_L_mldsa_encode_t0_t1_x2_avx512_vs_13 QWORD L_mldsa_encode_t0_t1_x2_avx512_vs_13 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even BYTE 00h, 01h, 0ffh, 08h, 09h, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 00h, 01h + BYTE 02h, 08h, 09h, 0ah, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even QWORD L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd BYTE 0ffh, 05h, 06h, 07h, 0dh, 0eh, 0fh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 06h, 07h, 0ffh, 0eh, 0fh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd QWORD L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_vs_10 DWORD 00000000h, 0000000ah, 00000004h, 0000000eh + DWORD 00000000h, 0000000ah, 00000004h, 0000000eh +ptr_L_mldsa_encode_t0_t1_x2_avx512_vs_10 QWORD L_mldsa_encode_t0_t1_x2_avx512_vs_10 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even BYTE 00h, 01h, 08h, 09h, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 00h, 01h, 08h + BYTE 09h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even QWORD L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd BYTE 0ffh, 05h, 06h, 0dh, 0eh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 05h, 06h + BYTE 0dh, 0eh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd QWORD L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_t0_t1_x2_avx512 PROC + mov rax, QWORD PTR [rsp+40] + mov r10, QWORD PTR [rsp+48] + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vbroadcasti64x4 zmm6, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_d_max_half_m1 + vbroadcasti64x4 zmm7, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_d_max_half + vbroadcasti64x4 zmm8, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_vs_13 + vbroadcasti64x4 zmm9, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_shuff_13_even + vbroadcasti64x4 zmm10, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_shuff_13_odd + vbroadcasti64x4 zmm11, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_vs_10 + vbroadcasti64x4 zmm12, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_shuff_10_even + vbroadcasti64x4 zmm13, YMMWORD PTR L_mldsa_encode_t0_t1_x2_avx512_shuff_10_odd + vmovdqu64 ymm0, YMMWORD PTR [rcx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+64] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+96] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+96], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+128] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+160] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+160], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+192] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+224] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+224], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+256] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+288] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+288], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+320] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+352] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+352], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+384] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+416] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+416], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+448] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+448], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+480] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+480], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+512] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+512], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+544] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+544], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+576] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+576], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+608] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+608], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+640] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+640], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+672] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+672], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+704] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+704], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+736] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+736], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+768] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+768], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+800] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+800], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+832] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+832], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+864] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+864], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+896] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+896], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+928] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+928], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + vmovdqu64 OWORD PTR [r8], xmm3 + vmovdqu64 OWORD PTR [r9], xmm1 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + vmovdqu64 OWORD PTR [rax], xmm5 + vmovdqu64 OWORD PTR [r10], xmm1 + add rax, 10 + add r10, 10 + vmovdqu64 ymm0, YMMWORD PTR [rcx+960] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx+960], 1 + vmovdqu64 ymm1, YMMWORD PTR [rcx+992] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+992], 1 + vpaddd zmm4, zmm0, zmm6 + vpaddd zmm5, zmm1, zmm6 + vpsrld zmm4, zmm4, 13 + vpsrld zmm5, zmm5, 13 + vpslld zmm2, zmm4, 13 + vpslld zmm3, zmm5, 13 + vpsubd zmm2, zmm0, zmm2 + vpsubd zmm3, zmm1, zmm3 + vpsubd zmm2, zmm7, zmm2 + vpsubd zmm3, zmm7, zmm3 + vpsllvd zmm2, zmm2, zmm8 + vpsllvd zmm3, zmm3, zmm8 + vpshufb zmm0, zmm2, zmm10 + vpshufb zmm1, zmm3, zmm10 + vpshufb zmm2, zmm2, zmm9 + vpshufb zmm3, zmm3, zmm9 + vpord zmm2, zmm2, zmm0 + vpord zmm3, zmm3, zmm1 + vshufi64x2 zmm0, zmm2, zmm2, 245 + vpord zmm2, zmm2, zmm0 + vshufi64x2 zmm1, zmm3, zmm3, 245 + vpord zmm3, zmm3, zmm1 + vextracti32x4 xmm0, zmm2, 2 + vmovdqu64 OWORD PTR [r8], xmm2 + vmovdqu64 OWORD PTR [r9], xmm0 + add r8, 13 + add r9, 13 + vextracti32x4 xmm1, zmm3, 2 + movq QWORD PTR [r8], xmm3 + vpextrd DWORD PTR [r8+8], xmm3, 2 + vpextrb BYTE PTR [r8+12], xmm3, 12 + movq QWORD PTR [r9], xmm1 + vpextrd DWORD PTR [r9+8], xmm1, 2 + vpextrb BYTE PTR [r9+12], xmm1, 12 + add r8, 13 + add r9, 13 + vpsllvd zmm4, zmm4, zmm11 + vpsllvd zmm5, zmm5, zmm11 + vpshufb zmm0, zmm4, zmm13 + vpshufb zmm1, zmm5, zmm13 + vpshufb zmm4, zmm4, zmm12 + vpshufb zmm5, zmm5, zmm12 + vpord zmm4, zmm4, zmm0 + vpord zmm5, zmm5, zmm1 + vshufi64x2 zmm0, zmm4, zmm4, 245 + vpord zmm4, zmm4, zmm0 + vshufi64x2 zmm1, zmm5, zmm5, 245 + vpord zmm5, zmm5, zmm1 + vextracti32x4 xmm0, zmm4, 2 + vmovdqu64 OWORD PTR [rax], xmm4 + vmovdqu64 OWORD PTR [r10], xmm0 + add rax, 10 + add r10, 10 + vextracti32x4 xmm1, zmm5, 2 + movq QWORD PTR [rax], xmm5 + vpextrw WORD PTR [rax+8], xmm5, 4 + movq QWORD PTR [r10], xmm1 + vpextrw WORD PTR [r10+8], xmm1, 4 + add rax, 10 + add r10, 10 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +wc_mldsa_encode_t0_t1_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_zetas_1p DWORD 000064f7h, 000064f7h, 000064f7h, 000064f7h + DWORD 000064f7h, 000064f7h, 000064f7h, 000064f7h + DWORD 000064f7h, 000064f7h, 000064f7h, 000064f7h + DWORD 000064f7h, 000064f7h, 000064f7h, 000064f7h + DWORD 6d1f44f7h, 6d1f44f7h, 6d1f44f7h, 6d1f44f7h + DWORD 6d1f44f7h, 6d1f44f7h, 6d1f44f7h, 6d1f44f7h + DWORD 6d1f44f7h, 6d1f44f7h, 6d1f44f7h, 6d1f44f7h + DWORD 6d1f44f7h, 6d1f44f7h, 6d1f44f7h, 6d1f44f7h + DWORD 0ffd83102h, 0ffd83102h, 0ffd83102h, 0ffd83102h + DWORD 0ffd83102h, 0ffd83102h, 0ffd83102h, 0ffd83102h + DWORD 0ffd83102h, 0ffd83102h, 0ffd83102h, 0ffd83102h + DWORD 0ffd83102h, 0ffd83102h, 0ffd83102h, 0ffd83102h + DWORD 8cf87102h, 8cf87102h, 8cf87102h, 8cf87102h + DWORD 8cf87102h, 8cf87102h, 8cf87102h, 8cf87102h + DWORD 8cf87102h, 8cf87102h, 8cf87102h, 8cf87102h + DWORD 8cf87102h, 8cf87102h, 8cf87102h, 8cf87102h + DWORD 0fff81503h, 0fff81503h, 0fff81503h, 0fff81503h + DWORD 0fff81503h, 0fff81503h, 0fff81503h, 0fff81503h + DWORD 0fff81503h, 0fff81503h, 0fff81503h, 0fff81503h + DWORD 0fff81503h, 0fff81503h, 0fff81503h, 0fff81503h + DWORD 8d187503h, 8d187503h, 8d187503h, 8d187503h + DWORD 8d187503h, 8d187503h, 8d187503h, 8d187503h + DWORD 8d187503h, 8d187503h, 8d187503h, 8d187503h + DWORD 8d187503h, 8d187503h, 8d187503h, 8d187503h + DWORD 00039e44h, 00039e44h, 00039e44h, 00039e44h + DWORD 00039e44h, 00039e44h, 00039e44h, 00039e44h + DWORD 00039e44h, 00039e44h, 00039e44h, 00039e44h + DWORD 00039e44h, 00039e44h, 00039e44h, 00039e44h + DWORD 61cc1e44h, 61cc1e44h, 61cc1e44h, 61cc1e44h + DWORD 61cc1e44h, 61cc1e44h, 61cc1e44h, 61cc1e44h + DWORD 61cc1e44h, 61cc1e44h, 61cc1e44h, 61cc1e44h + DWORD 61cc1e44h, 61cc1e44h, 61cc1e44h, 61cc1e44h + DWORD 0fff42118h, 0fff42118h, 0fff42118h, 0fff42118h + DWORD 0fff42118h, 0fff42118h, 0fff42118h, 0fff42118h + DWORD 0fff42118h, 0fff42118h, 0fff42118h, 0fff42118h + DWORD 0fff42118h, 0fff42118h, 0fff42118h, 0fff42118h + DWORD 58172118h, 58172118h, 58172118h, 58172118h + DWORD 58172118h, 58172118h, 58172118h, 58172118h + DWORD 58172118h, 58172118h, 58172118h, 58172118h + DWORD 58172118h, 58172118h, 58172118h, 58172118h + DWORD 0fff2a128h, 0fff2a128h, 0fff2a128h, 0fff2a128h + DWORD 0fff2a128h, 0fff2a128h, 0fff2a128h, 0fff2a128h + DWORD 0fff2a128h, 0fff2a128h, 0fff2a128h, 0fff2a128h + DWORD 0fff2a128h, 0fff2a128h, 0fff2a128h, 0fff2a128h + DWORD 6017a128h, 6017a128h, 6017a128h, 6017a128h + DWORD 6017a128h, 6017a128h, 6017a128h, 6017a128h + DWORD 6017a128h, 6017a128h, 6017a128h, 6017a128h + DWORD 6017a128h, 6017a128h, 6017a128h, 6017a128h + DWORD 00071e24h, 00071e24h, 00071e24h, 00071e24h + DWORD 00071e24h, 00071e24h, 00071e24h, 00071e24h + DWORD 00071e24h, 00071e24h, 00071e24h, 00071e24h + DWORD 00071e24h, 00071e24h, 00071e24h, 00071e24h + DWORD 61cb9e24h, 61cb9e24h, 61cb9e24h, 61cb9e24h + DWORD 61cb9e24h, 61cb9e24h, 61cb9e24h, 61cb9e24h + DWORD 61cb9e24h, 61cb9e24h, 61cb9e24h, 61cb9e24h + DWORD 61cb9e24h, 61cb9e24h, 61cb9e24h, 61cb9e24h + DWORD 001bde2bh, 001bde2bh, 001bde2bh, 001bde2bh + DWORD 001bde2bh, 001bde2bh, 001bde2bh, 001bde2bh + DWORD 001bde2bh, 001bde2bh, 001bde2bh, 001bde2bh + DWORD 001bde2bh, 001bde2bh, 001bde2bh, 001bde2bh + DWORD 12613e2bh, 12613e2bh, 12613e2bh, 12613e2bh + DWORD 12613e2bh, 12613e2bh, 12613e2bh, 12613e2bh + DWORD 12613e2bh, 12613e2bh, 12613e2bh, 12613e2bh + DWORD 12613e2bh, 12613e2bh, 12613e2bh, 12613e2bh + DWORD 0023e92bh, 0023e92bh, 0023e92bh, 0023e92bh + DWORD 0023e92bh, 0023e92bh, 0023e92bh, 0023e92bh + DWORD 0023e92bh, 0023e92bh, 0023e92bh, 0023e92bh + DWORD 0023e92bh, 0023e92bh, 0023e92bh, 0023e92bh + DWORD 93c9492bh, 93c9492bh, 93c9492bh, 93c9492bh + DWORD 93c9492bh, 93c9492bh, 93c9492bh, 93c9492bh + DWORD 93c9492bh, 93c9492bh, 93c9492bh, 93c9492bh + DWORD 93c9492bh, 93c9492bh, 93c9492bh, 93c9492bh + DWORD 0fffa84adh, 0fffa84adh, 0fffa84adh, 0fffa84adh + DWORD 0fffa84adh, 0fffa84adh, 0fffa84adh, 0fffa84adh + DWORD 0fffa84adh, 0fffa84adh, 0fffa84adh, 0fffa84adh + DWORD 0fffa84adh, 0fffa84adh, 0fffa84adh, 0fffa84adh + DWORD 0ae1024adh, 0ae1024adh, 0ae1024adh, 0ae1024adh + DWORD 0ae1024adh, 0ae1024adh, 0ae1024adh, 0ae1024adh + DWORD 0ae1024adh, 0ae1024adh, 0ae1024adh, 0ae1024adh + DWORD 0ae1024adh, 0ae1024adh, 0ae1024adh, 0ae1024adh + DWORD 0ffe0147fh, 0ffe0147fh, 0ffe0147fh, 0ffe0147fh + DWORD 0ffe0147fh, 0ffe0147fh, 0ffe0147fh, 0ffe0147fh + DWORD 0ffe0147fh, 0ffe0147fh, 0ffe0147fh, 0ffe0147fh + DWORD 0ffe0147fh, 0ffe0147fh, 0ffe0147fh, 0ffe0147fh + DWORD 0beeff47fh, 0beeff47fh, 0beeff47fh, 0beeff47fh + DWORD 0beeff47fh, 0beeff47fh, 0beeff47fh, 0beeff47fh + DWORD 0beeff47fh, 0beeff47fh, 0beeff47fh, 0beeff47fh + DWORD 0beeff47fh, 0beeff47fh, 0beeff47fh, 0beeff47fh + DWORD 002f9a75h, 002f9a75h, 002f9a75h, 002f9a75h + DWORD 002f9a75h, 002f9a75h, 002f9a75h, 002f9a75h + DWORD 002f9a75h, 002f9a75h, 002f9a75h, 002f9a75h + DWORD 002f9a75h, 002f9a75h, 002f9a75h, 002f9a75h + DWORD 8cfe3a75h, 8cfe3a75h, 8cfe3a75h, 8cfe3a75h + DWORD 8cfe3a75h, 8cfe3a75h, 8cfe3a75h, 8cfe3a75h + DWORD 8cfe3a75h, 8cfe3a75h, 8cfe3a75h, 8cfe3a75h + DWORD 8cfe3a75h, 8cfe3a75h, 8cfe3a75h, 8cfe3a75h + DWORD 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h + DWORD 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h + DWORD 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h + DWORD 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h, 0ffd3fb09h + DWORD 1eb51b09h, 1eb51b09h, 1eb51b09h, 1eb51b09h + DWORD 1eb51b09h, 1eb51b09h, 1eb51b09h, 1eb51b09h + DWORD 1eb51b09h, 1eb51b09h, 1eb51b09h, 1eb51b09h + DWORD 1eb51b09h, 1eb51b09h, 1eb51b09h, 1eb51b09h + DWORD 002f7a49h, 002f7a49h, 002f7a49h, 002f7a49h + DWORD 002f7a49h, 002f7a49h, 002f7a49h, 002f7a49h + DWORD 002f7a49h, 002f7a49h, 002f7a49h, 002f7a49h + DWORD 002f7a49h, 002f7a49h, 002f7a49h, 002f7a49h + DWORD 0eef89a49h, 0eef89a49h, 0eef89a49h, 0eef89a49h + DWORD 0eef89a49h, 0eef89a49h, 0eef89a49h, 0eef89a49h + DWORD 0eef89a49h, 0eef89a49h, 0eef89a49h, 0eef89a49h + DWORD 0eef89a49h, 0eef89a49h, 0eef89a49h, 0eef89a49h + DWORD 0028e527h, 0028e527h, 0028e527h, 0028e527h + DWORD 0028e527h, 0028e527h, 0028e527h, 0028e527h + DWORD 0028e527h, 0028e527h, 0028e527h, 0028e527h + DWORD 0028e527h, 0028e527h, 0028e527h, 0028e527h + DWORD 254dc527h, 254dc527h, 254dc527h, 254dc527h + DWORD 254dc527h, 254dc527h, 254dc527h, 254dc527h + DWORD 254dc527h, 254dc527h, 254dc527h, 254dc527h + DWORD 254dc527h, 254dc527h, 254dc527h, 254dc527h + DWORD 00299658h, 00299658h, 00299658h, 00299658h + DWORD 00299658h, 00299658h, 00299658h, 00299658h + DWORD 000fa070h, 000fa070h, 000fa070h, 000fa070h + DWORD 000fa070h, 000fa070h, 000fa070h, 000fa070h + DWORD 66f49658h, 66f49658h, 66f49658h, 66f49658h + DWORD 66f49658h, 66f49658h, 66f49658h, 66f49658h + DWORD 7c1da070h, 7c1da070h, 7c1da070h, 7c1da070h + DWORD 7c1da070h, 7c1da070h, 7c1da070h, 7c1da070h + DWORD 0ffef85a4h, 0ffef85a4h, 0ffef85a4h, 0ffef85a4h + DWORD 0ffef85a4h, 0ffef85a4h, 0ffef85a4h, 0ffef85a4h + DWORD 0036b788h, 0036b788h, 0036b788h, 0036b788h + DWORD 0036b788h, 0036b788h, 0036b788h, 0036b788h + DWORD 0aea405a4h, 0aea405a4h, 0aea405a4h, 0aea405a4h + DWORD 0aea405a4h, 0aea405a4h, 0aea405a4h, 0aea405a4h + DWORD 3327b788h, 3327b788h, 3327b788h, 3327b788h + DWORD 3327b788h, 3327b788h, 3327b788h, 3327b788h + DWORD 0fff79d90h, 0fff79d90h, 0fff79d90h, 0fff79d90h + DWORD 0fff79d90h, 0fff79d90h, 0fff79d90h, 0fff79d90h + DWORD 0ffeeeaa0h, 0ffeeeaa0h, 0ffeeeaa0h, 0ffeeeaa0h + DWORD 0ffeeeaa0h, 0ffeeeaa0h, 0ffeeeaa0h, 0ffeeeaa0h + DWORD 6ba99d90h, 6ba99d90h, 6ba99d90h, 6ba99d90h + DWORD 6ba99d90h, 6ba99d90h, 6ba99d90h, 6ba99d90h + DWORD 0d42eaa0h, 0d42eaa0h, 0d42eaa0h, 0d42eaa0h + DWORD 0d42eaa0h, 0d42eaa0h, 0d42eaa0h, 0d42eaa0h + DWORD 0027f968h, 0027f968h, 0027f968h, 0027f968h + DWORD 0027f968h, 0027f968h, 0027f968h, 0027f968h + DWORD 0ffdfd37bh, 0ffdfd37bh, 0ffdfd37bh, 0ffdfd37bh + DWORD 0ffdfd37bh, 0ffdfd37bh, 0ffdfd37bh, 0ffdfd37bh + DWORD 0eb54f968h, 0eb54f968h, 0eb54f968h, 0eb54f968h + DWORD 0eb54f968h, 0eb54f968h, 0eb54f968h, 0eb54f968h + DWORD 28cf337bh, 28cf337bh, 28cf337bh, 28cf337bh + DWORD 28cf337bh, 28cf337bh, 28cf337bh, 28cf337bh + DWORD 0ffdfadd6h, 0ffdfadd6h, 0ffdfadd6h, 0ffdfadd6h + DWORD 0ffdfadd6h, 0ffdfadd6h, 0ffdfadd6h, 0ffdfadd6h + DWORD 0ffc51ae7h, 0ffc51ae7h, 0ffc51ae7h, 0ffc51ae7h + DWORD 0ffc51ae7h, 0ffc51ae7h, 0ffc51ae7h, 0ffc51ae7h + DWORD 629a6dd6h, 629a6dd6h, 629a6dd6h, 629a6dd6h + DWORD 629a6dd6h, 629a6dd6h, 629a6dd6h, 629a6dd6h + DWORD 0cba1fae7h, 0cba1fae7h, 0cba1fae7h, 0cba1fae7h + DWORD 0cba1fae7h, 0cba1fae7h, 0cba1fae7h, 0cba1fae7h + DWORD 0ffeaa4f7h, 0ffeaa4f7h, 0ffeaa4f7h, 0ffeaa4f7h + DWORD 0ffeaa4f7h, 0ffeaa4f7h, 0ffeaa4f7h, 0ffeaa4f7h + DWORD 0ffcdfc98h, 0ffcdfc98h, 0ffcdfc98h, 0ffcdfc98h + DWORD 0ffcdfc98h, 0ffcdfc98h, 0ffcdfc98h, 0ffcdfc98h + DWORD 0b50984f7h, 0b50984f7h, 0b50984f7h, 0b50984f7h + DWORD 0b50984f7h, 0b50984f7h, 0b50984f7h, 0b50984f7h + DWORD 0d360fc98h, 0d360fc98h, 0d360fc98h, 0d360fc98h + DWORD 0d360fc98h, 0d360fc98h, 0d360fc98h, 0d360fc98h + DWORD 001ad035h, 001ad035h, 001ad035h, 001ad035h + DWORD 001ad035h, 001ad035h, 001ad035h, 001ad035h + DWORD 0ffffb422h, 0ffffb422h, 0ffffb422h, 0ffffb422h + DWORD 0ffffb422h, 0ffffb422h, 0ffffb422h, 0ffffb422h + DWORD 13a17035h, 13a17035h, 13a17035h, 13a17035h + DWORD 13a17035h, 13a17035h, 13a17035h, 13a17035h + DWORD 6d83f422h, 6d83f422h, 6d83f422h, 6d83f422h + DWORD 6d83f422h, 6d83f422h, 6d83f422h, 6d83f422h + DWORD 003d3201h, 003d3201h, 003d3201h, 003d3201h + DWORD 003d3201h, 003d3201h, 003d3201h, 003d3201h + DWORD 000445c5h, 000445c5h, 000445c5h, 000445c5h + DWORD 000445c5h, 000445c5h, 000445c5h, 000445c5h + DWORD 0a9fd5201h, 0a9fd5201h, 0a9fd5201h, 0a9fd5201h + DWORD 0a9fd5201h, 0a9fd5201h, 0a9fd5201h, 0a9fd5201h + DWORD 0ba3ce5c5h, 0ba3ce5c5h, 0ba3ce5c5h, 0ba3ce5c5h + DWORD 0ba3ce5c5h, 0ba3ce5c5h, 0ba3ce5c5h, 0ba3ce5c5h + DWORD 00294a67h, 00294a67h, 00294a67h, 00294a67h + DWORD 00017620h, 00017620h, 00017620h, 00017620h + DWORD 002ef4cdh, 002ef4cdh, 002ef4cdh, 002ef4cdh + DWORD 0035dec5h, 0035dec5h, 0035dec5h, 0035dec5h + DWORD 91f62a67h, 91f62a67h, 91f62a67h, 91f62a67h + DWORD 9ec57620h, 9ec57620h, 9ec57620h, 9ec57620h + DWORD 0ac4894cdh, 0ac4894cdh, 0ac4894cdh, 0ac4894cdh + DWORD 6d8e7ec5h, 6d8e7ec5h, 6d8e7ec5h, 6d8e7ec5h + DWORD 0ffe6a503h, 0ffe6a503h, 0ffe6a503h, 0ffe6a503h + DWORD 0ffc9302ch, 0ffc9302ch, 0ffc9302ch, 0ffc9302ch + DWORD 0ffd947d4h, 0ffd947d4h, 0ffd947d4h, 0ffd947d4h + DWORD 003bbeafh, 003bbeafh, 003bbeafh, 003bbeafh + DWORD 5f070503h, 5f070503h, 5f070503h, 5f070503h + DWORD 0bfceb02ch, 0bfceb02ch, 0bfceb02ch, 0bfceb02ch + DWORD 8ed3c7d4h, 8ed3c7d4h, 8ed3c7d4h, 8ed3c7d4h + DWORD 0dc919eafh, 0dc919eafh, 0dc919eafh, 0dc919eafh + DWORD 0ffc51585h, 0ffc51585h, 0ffc51585h, 0ffc51585h + DWORD 0ffd18e7ch, 0ffd18e7ch, 0ffd18e7ch, 0ffd18e7ch + DWORD 00368a96h, 00368a96h, 00368a96h, 00368a96h + DWORD 0ffd43e41h, 0ffd43e41h, 0ffd43e41h, 0ffd43e41h + DWORD 0f3f5b585h, 0f3f5b585h, 0f3f5b585h, 0f3f5b585h + DWORD 0e3a10e7ch, 0e3a10e7ch, 0e3a10e7ch, 0e3a10e7ch + DWORD 0de894a96h, 0de894a96h, 0de894a96h, 0de894a96h + DWORD 6b1c5e41h, 6b1c5e41h, 6b1c5e41h, 6b1c5e41h + DWORD 00360400h, 00360400h, 00360400h, 00360400h + DWORD 0fffb6a4dh, 0fffb6a4dh, 0fffb6a4dh, 0fffb6a4dh + DWORD 0023d69ch, 0023d69ch, 0023d69ch, 0023d69ch + DWORD 0fff7c55dh, 0fff7c55dh, 0fff7c55dh, 0fff7c55dh + DWORD 0c0b60400h, 0c0b60400h, 0c0b60400h, 0c0b60400h + DWORD 7ac50a4dh, 7ac50a4dh, 7ac50a4dh, 7ac50a4dh + DWORD 9cf7569ch, 9cf7569ch, 9cf7569ch, 9cf7569ch + DWORD 0be23655dh, 0be23655dh, 0be23655dh, 0be23655dh + DWORD 0ffe6123dh, 0ffe6123dh, 0ffe6123dh, 0ffe6123dh + DWORD 0ffe6ead6h, 0ffe6ead6h, 0ffe6ead6h, 0ffe6ead6h + DWORD 00357e1eh, 00357e1eh, 00357e1eh, 00357e1eh + DWORD 0ffc5af59h, 0ffc5af59h, 0ffc5af59h, 0ffc5af59h + DWORD 97adb23dh, 97adb23dh, 97adb23dh, 97adb23dh + DWORD 0ca41aad6h, 0ca41aad6h, 0ca41aad6h, 0ca41aad6h + DWORD 18f93e1eh, 18f93e1eh, 18f93e1eh, 18f93e1eh + DWORD 6d30cf59h, 6d30cf59h, 6d30cf59h, 6d30cf59h + DWORD 0035843fh, 0035843fh, 0035843fh, 0035843fh + DWORD 0ffdf5617h, 0ffdf5617h, 0ffdf5617h, 0ffdf5617h + DWORD 0ffe7945ch, 0ffe7945ch, 0ffe7945ch, 0ffe7945ch + DWORD 0038738ch, 0038738ch, 0038738ch, 0038738ch + DWORD 8d3d643fh, 8d3d643fh, 8d3d643fh, 8d3d643fh + DWORD 3b223617h, 3b223617h, 3b223617h, 3b223617h + DWORD 3473145ch, 3473145ch, 3473145ch, 3473145ch + DWORD 78a9f38ch, 78a9f38ch, 78a9f38ch, 78a9f38ch + DWORD 000c63a8h, 000c63a8h, 000c63a8h, 000c63a8h + DWORD 00081b9ah, 00081b9ah, 00081b9ah, 00081b9ah + DWORD 000e8f76h, 000e8f76h, 000e8f76h, 000e8f76h + DWORD 003b3853h, 003b3853h, 003b3853h, 003b3853h + DWORD 588163a8h, 588163a8h, 588163a8h, 588163a8h + DWORD 9e7b5b9ah, 9e7b5b9ah, 9e7b5b9ah, 9e7b5b9ah + DWORD 0eefd4f76h, 0eefd4f76h, 0eefd4f76h, 0eefd4f76h + DWORD 89c59853h, 89c59853h, 89c59853h, 89c59853h + DWORD 003b8534h, 003b8534h, 003b8534h, 003b8534h + DWORD 0ffd8fc30h, 0ffd8fc30h, 0ffd8fc30h, 0ffd8fc30h + DWORD 001f9d54h, 001f9d54h, 001f9d54h, 001f9d54h + DWORD 0ffd54f2dh, 0ffd54f2dh, 0ffd54f2dh, 0ffd54f2dh + DWORD 0a6e20534h, 0a6e20534h, 0a6e20534h, 0a6e20534h + DWORD 0c75efc30h, 0c75efc30h, 0c75efc30h, 0c75efc30h + DWORD 99ca1d54h, 99ca1d54h, 99ca1d54h, 99ca1d54h + DWORD 0c73aef2dh, 0c73aef2dh, 0c73aef2dh, 0c73aef2dh + DWORD 0ffc406e5h, 0ffc406e5h, 0ffe8ac81h, 0ffe8ac81h + DWORD 0ffc7e1cfh, 0ffc7e1cfh, 0ffd19819h, 0ffd19819h + DWORD 0ffe9d65dh, 0ffe9d65dh, 003509eeh, 003509eeh + DWORD 002135c7h, 002135c7h, 0ffe7cfbbh, 0ffe7cfbbh + DWORD 0a220a6e5h, 0a220a6e5h, 0d8f8cc81h, 0d8f8cc81h + DWORD 5081c1cfh, 5081c1cfh, 8a54b819h, 8a54b819h + DWORD 8035765dh, 8035765dh, 6272c9eeh, 6272c9eeh + DWORD 5f5a15c7h, 5f5a15c7h, 085f2fbbh, 085f2fbbh + DWORD 0ffeccf75h, 0ffeccf75h, 001d9772h, 001d9772h + DWORD 0ffc1b072h, 0ffc1b072h, 0fff0bcf6h, 0fff0bcf6h + DWORD 0ffcf5280h, 0ffcf5280h, 0ffcfd2aeh, 0ffcfd2aeh + DWORD 0ffc890e0h, 0ffc890e0h, 0001efcah, 0001efcah + DWORD 0b35b6f75h, 0b35b6f75h, 0c20bd772h, 0c20bd772h + DWORD 0c4cff072h, 0c4cff072h, 748f7cf6h, 748f7cf6h + DWORD 0aa1f5280h, 0aa1f5280h, 5b2592aeh, 5b2592aeh + DWORD 21e490e0h, 21e490e0h, 80fb2fcah, 80fb2fcah + DWORD 003410f2h, 003410f2h, 0fff0fe85h, 0fff0fe85h + DWORD 0020c638h, 0020c638h, 00296e9fh, 00296e9fh + DWORD 0ffd2b7a3h, 0ffd2b7a3h, 0ffc7a44bh, 0ffc7a44bh + DWORD 0fff9ba6dh, 0fff9ba6dh, 0ffda3409h, 0ffda3409h + DWORD 0d15250f2h, 0d15250f2h, 0f1419e85h, 0f1419e85h + DWORD 0dce7c638h, 0dce7c638h, 5a7d4e9fh, 5a7d4e9fh + DWORD 114717a3h, 114717a3h, 0fad1044bh, 0fad1044bh + DWORD 0b4c75a6dh, 0b4c75a6dh, 65db5409h, 65db5409h + DWORD 0fff5c282h, 0fff5c282h, 0ffed4113h, 0ffed4113h + DWORD 0ffffa63bh, 0ffffa63bh, 0ffec09f7h, 0ffec09f7h + DWORD 0fffa2bddh, 0fffa2bddh, 001495d4h, 001495d4h + DWORD 001c4563h, 001c4563h, 0ffea2c62h, 0ffea2c62h + DWORD 7f460282h, 7f460282h, 6a8fa113h, 6a8fa113h + DWORD 0c347063bh, 0c347063bh, 61aae9f7h, 61aae9f7h + DWORD 0caf5cbddh, 0caf5cbddh, 0f8cf15d4h, 0f8cf15d4h + DWORD 6348a563h, 6348a563h, 9c766c62h, 9c766c62h + DWORD 0ffccfbe9h, 0ffccfbe9h, 00040af0h, 00040af0h + DWORD 0007c417h, 0007c417h, 002f4588h, 002f4588h + DWORD 0000ad00h, 0000ad00h, 0ffef36beh, 0ffef36beh + DWORD 000dcd44h, 000dcd44h, 003c675ah, 003c675ah + DWORD 4eca1be9h, 4eca1be9h, 0c9620af0h, 0c9620af0h + DWORD 490aa417h, 490aa417h, 44e04588h, 44e04588h + DWORD 95a0ad00h, 95a0ad00h, 7fc6f6beh, 7fc6f6beh + DWORD 27b64d44h, 27b64d44h, 4827a75ah, 4827a75ah + DWORD 0ffc72bcah, 0ffc72bcah, 0ffffde7eh, 0ffffde7eh + DWORD 00193948h, 00193948h, 0ffce69c0h, 0ffce69c0h + DWORD 0024756ch, 0024756ch, 0fffcc7dfh, 0fffcc7dfh + DWORD 000b98a1h, 000b98a1h, 0ffebe808h, 0ffebe808h + DWORD 28406bcah, 28406bcah, 0b4cf9e7eh, 0b4cf9e7eh + DWORD 0a3423948h, 0a3423948h, 0ed0669c0h, 0ed0669c0h + DWORD 88d1f56ch, 88d1f56ch, 2578a7dfh, 2578a7dfh + DWORD 0a69fb8a1h, 0a69fb8a1h, 98ece808h, 98ece808h + DWORD 0002e46ch, 0002e46ch, 0ffc9c808h, 0ffc9c808h + DWORD 003036c2h, 003036c2h, 0ffe3bff6h, 0ffe3bff6h + DWORD 0ffdb3c93h, 0ffdb3c93h, 0fffd4ae0h, 0fffd4ae0h + DWORD 00141305h, 00141305h, 00147792h, 00147792h + DWORD 0d690646ch, 0d690646ch, 54cac808h, 54cac808h + DWORD 0ae0876c2h, 0ae0876c2h, 54e27ff6h, 54e27ff6h + DWORD 69ed9c93h, 69ed9c93h, 0b9594ae0h, 0b9594ae0h + DWORD 13f4b305h, 13f4b305h, 0e06b792h, 0e06b792h + DWORD 00139e25h, 00139e25h, 0ffe7d0e0h, 0ffe7d0e0h + DWORD 0fff39944h, 0fff39944h, 0ffea0802h, 0ffea0802h + DWORD 0ffd1eea2h, 0ffd1eea2h, 0ffc4c79ch, 0ffc4c79ch + DWORD 0ffc8a057h, 0ffc8a057h, 003a97d9h, 003a97d9h + DWORD 0f5583e25h, 0f5583e25h, 0a03d0e0h, 0a03d0e0h + DWORD 0e11c1944h, 0e11c1944h, 47ea4802h, 47ea4802h + DWORD 74a62ea2h, 74a62ea2h, 3ab8479ch, 3ab8479ch + DWORD 44538057h, 44538057h, 0cab5b7d9h, 0cab5b7d9h + DWORD 001fea93h, 0033ff5ah, 002358d4h, 003a41f8h + DWORD 0ffccff72h, 00223dfbh, 0ffdaab9fh, 0ffc9a422h + DWORD 000412f5h, 00252587h, 0ffed24f0h, 00359b5dh + DWORD 0ffca48a0h, 0ffc6a2fch, 0ffedbb56h, 0ffcf45deh + DWORD 0fff24a93h, 3b1f3f5ah, 513dd8d4h, 2c7941f8h + DWORD 0aebb3f72h, 36619dfbh, 01ce8b9fh, 0ab4de422h + DWORD 0dbe2b2f5h, 0fd560587h, 0ec8b24f0h, 79213b5dh + DWORD 78de48a0h, 462622fch, 64587b56h, 718b05deh + DWORD 000dbe5eh, 001c5e1ah, 000de0e6h, 000c7f5ah + DWORD 00078f83h, 0ffe7628ah, 0ffff5704h, 0fff806fch + DWORD 0fff60021h, 0ffd05af6h, 001f0084h, 0030ef86h + DWORD 0ffc9b97dh, 0fff7fcd6h, 0fff44592h, 0ffc921c2h + DWORD 00d97e5eh, 0e6df9e1ah, 0e12aa0e6h, 4af7bf5ah + DWORD 3c77ef83h, 0cf38a28ah, 78dfd704h, 72d786fch + DWORD 337a2021h, 682f1af6h, 0ae2f8084h, 7321af86h + DWORD 6c79597dh, 0ec92bcd6h, 07a68592h, 4b0161c2h + DWORD 00053919h, 0004610ch, 0ffdacd41h, 003eb01bh + DWORD 003472e7h, 0ffcd003bh, 001a7cc7h, 00031924h + DWORD 002b5ee5h, 00291199h, 0ffd87a3ah, 00134d71h + DWORD 003de11ch, 00130984h, 0025f051h, 00185a46h + DWORD 7ea85919h, 3625e10ch, 0bd02ed41h, 34c2101bh + DWORD 0b71152e7h, 6e54603bh, 08335cc7h, 61279924h + DWORD 8d87fee5h, 0b9dc3199h, 0da1fba3ah, 75416d71h + DWORD 9e61611ch, 0af438984h, 0d9b01051h, 00611a46h + DWORD 0ffc68518h, 001314beh, 00283891h, 0ffc9db90h + DWORD 0ffd25089h, 001c853fh, 001d0b4bh, 0ffeff6a6h + DWORD 0ffeba8beh, 0012e11bh, 0ffcd5e3eh, 0ffea2d2fh + DWORD 0fff91de4h, 001406c7h, 00327283h, 0ffe20d6eh + DWORD 0a4698518h, 0fbaad4beh, 02ba5891h, 0b33bdb90h + DWORD 29637089h, 0ed44653fh, 28066b4bh, 43c4b6a6h + DWORD 0e0368beh, 3ab6411bh, 84951e3eh, 6a100d2fh + DWORD 0c1b59de4h, 396ce6c7h, 1902d283h, 428fcd6eh + DWORD 0ffec7953h, 001d4099h, 0ffd92578h, 0ffeb05adh + DWORD 0016e405h, 000bdbe7h, 00221de8h, 0033f8cfh + DWORD 0fff7b934h, 0ffd4ca0ch, 0ffe67ff8h, 0ffe3d157h + DWORD 0ffd8911bh, 0ffc72c12h, 000910d8h, 0ffc65e1fh + DWORD 3196d953h, 0bfb06099h, 48882578h, 3e20a5adh + DWORD 0ee178405h, 2408bbe7h, 0efdf1de8h, 53cdd8cfh + DWORD 2d1e3934h, 0c3164a0ch, 0b3e57ff8h, 2a8eb157h + DWORD 0f07bf11bh, 24496c12h, 162410d8h, 380a3e1fh + DWORD 0ffe14658h, 00251d8bh, 002573b7h, 0fffd7c8fh + DWORD 001ddd98h, 00336898h, 0002d4bbh, 0ffed93a7h + DWORD 0ffcf6cbeh, 00027c1ch, 0018aa08h, 002dfd71h + DWORD 000c5ca5h, 0019379ah, 0ffc7a167h, 0ffe48c3dh + DWORD 5cac4658h, 0a567d8bh, 0af1c53b7h, 0a40f5c8fh + DWORD 4fd0dd98h, 81466898h, 0e91a34bbh, 7ae273a7h + DWORD 86672cbeh, 0b185fc1ch, 3159aa08h, 0cb5c1d71h + DWORD 0cd20fca5h, 0c20c779ah, 0dc748167h, 66ec2c3dh + DWORD 0ffd1a13ch, 0035c539h, 003b0115h, 00041dc0h + DWORD 0021c4f7h, 0fff11bf4h, 001a35e7h, 0007340eh + DWORD 0fff97d45h, 001a4cd0h, 0ffe47caeh, 001d2668h + DWORD 0ffe68e98h, 0ffef2633h, 0fffc05dah, 0ffc57fdbh + DWORD 85f9213ch, 005ce539h, 29dda115h, 0a3bc1dc0h + DWORD 9940a4f7h, 0f96f9bf4h, 0ef5715e7h, 1788f40eh + DWORD 0a1221d45h, 21b44cd0h, 0f07a3caeh, 10ea2668h + DWORD 0e5b98e98h, 97358633h, 0fbb745dah, 2e40dfdbh + DWORD 0ffd32764h, 0ffdde1afh, 0fff993ddh, 0ffdd1d09h + DWORD 0002cc93h, 0fff11805h, 00189c2ah, 0ffc9e5a9h + DWORD 0fff78a50h, 003bcf2ch, 0ffff434eh, 0ffeb36dfh + DWORD 003c15cah, 00155e68h, 0fff316b6h, 001e29ceh + DWORD 42bfa764h, 0a093c1afh, 0b7f533ddh, 42fe3d09h + DWORD 5c152c93h, 3471b805h, 0a69ddc2ah, 0bff05a9h + DWORD 09418a50h, 94214f2ch, 7969034eh, 734716dfh + DWORD 0c5f555cah, 17e25e68h, 0dfc9d6b6h, 1657e9ceh +ptr_L_mldsa_avx512_zetas_1p QWORD L_mldsa_avx512_zetas_1p +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_zeta1_1p DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h + DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h + DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h + DWORD 0ffc97e01h, 0ffc97e01h, 0ffc97e01h, 0ffc97e01h +ptr_L_mldsa_avx512_zeta1_1p QWORD L_mldsa_avx512_zeta1_1p +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_half_1p DWORD 00400000h, 00400000h, 00400000h, 00400000h + DWORD 00400000h, 00400000h, 00400000h, 00400000h + DWORD 00400000h, 00400000h, 00400000h, 00400000h + DWORD 00400000h, 00400000h, 00400000h, 00400000h +ptr_L_mldsa_avx512_half_1p QWORD L_mldsa_avx512_half_1p +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_avx512_zetas_inv_1p DWORD 0ffe1d632h, 000ce94ah, 0ffeaa198h, 0ffc3ea36h + DWORD 0014c921h, 0000bcb2h, 0ffc430d4h, 000875b0h + DWORD 00361a57h, 0ffe763d6h, 000ee7fbh, 0fffd336dh + DWORD 0022e2f7h, 00066c23h, 00221e51h, 002cd89ch + DWORD 0e9a81632h, 2036294ah, 0e81da198h, 3a0aaa36h + DWORD 8cb8e921h, 8696fcb2h, 6bdeb0d4h, 0f6be75b0h + DWORD 0f400fa57h, 596223d6h, 0cb8e47fbh, 0a3ead36dh + DWORD 0bd01c2f7h, 480acc23h, 5f6c3e51h, 0bd40589ch + DWORD 003a8025h, 0003fa26h, 0010d9cdh, 00197168h + DWORD 0ffe2d998h, 001b8352h, 0ffe5b330h, 000682bbh + DWORD 0fff8cbf2h, 0ffe5ca19h, 000ee40ch, 0ffde3b09h + DWORD 0fffbe240h, 0ffc4feebh, 0ffca3ac7h, 002e5ec4h + DWORD 0d1bf2025h, 0448ba26h, 68ca79cdh, 1a467168h + DWORD 0ef15d998h, 0f85c352h, 0de4bb330h, 5edde2bbh + DWORD 0e8770bf2h, 10a8ea19h, 0690640ch, 66bf5b09h + DWORD 5c43e240h, 0d6225eebh, 0ffa31ac7h, 7a06dec4h + DWORD 001b73c3h, 00385e99h, 0ffe6c866h, 0fff3a35bh + DWORD 0ffd2028fh, 0ffe755f8h, 0fffd83e4h, 00309342h + DWORD 00126c59h, 0fffd2b45h, 0ffcc9768h, 0ffe22268h + DWORD 00028371h, 0ffda8c49h, 0ffdae275h, 001eb9a8h + DWORD 9913d3c3h, 238b7e99h, 3df38866h, 32df035bh + DWORD 34a3e28fh, 0cea655f8h, 4e7a03e4h, 7998d342h + DWORD 851d8c59h, 16e5cb45h, 7eb99768h, 0b02f2268h + DWORD 5bf0a371h, 50e3ac49h, 0f5a98275h, 0a353b9a8h + DWORD 0039a1e1h, 0fff6ef28h, 0038d3eeh, 00276ee5h + DWORD 001c2ea9h, 00198008h, 002b35f4h, 000846cch + DWORD 0ffcc0731h, 0ffdde218h, 0fff42419h, 0ffe91bfbh + DWORD 0014fa53h, 0026da88h, 0ffe2bf67h, 001386adh + DWORD 0c7f5c1e1h, 0e9dbef28h, 0dbb693eeh, 0f840ee5h + DWORD 0d5714ea9h, 4c1a8008h, 3ce9b5f4h, 0d2e1c6cch + DWORD 0ac322731h, 1020e218h, 0dbf74419h, 11e87bfbh + DWORD 0c1df5a53h, 0b777da88h, 404f9f67h, 0ce6926adh + DWORD 001df292h, 0ffcd8d7dh, 0ffebf939h, 0006e21ch + DWORD 0015d2d1h, 0032a1c2h, 0ffed1ee5h, 00145742h + DWORD 0010095ah, 0ffe2f4b5h, 0ffe37ac1h, 002daf77h + DWORD 00362470h, 0ffd7c76fh, 0ffeceb42h, 00397ae8h + DWORD 0bd703292h, 0e6fd2d7dh, 0c6931939h, 3e4a621ch + DWORD 95eff2d1h, 7b6ae1c2h, 0c549bee5h, 0f1fc9742h + DWORD 0bc3b495ah, 0d7f994b5h, 12bb9ac1h, 0d69c8f77h + DWORD 4cc42470h, 0fd45a76fh, 04552b42h, 5b967ae8h + DWORD 0ffe7a5bah, 0ffda0fafh, 0ffecf67ch, 0ffc21ee4h + DWORD 0ffecb28fh, 002785c6h, 0ffd6ee67h, 0ffd4a11bh + DWORD 0fffce6dch, 0ffe58339h, 0032ffc5h, 0ffcb8d19h + DWORD 0ffc14fe5h, 002532bfh, 0fffb9ef4h, 0fffac6e7h + DWORD 0ff9ee5bah, 264fefafh, 50bc767ch, 619e9ee4h + DWORD 8abe928fh, 25e045c6h, 4623ce67h, 7278011bh + DWORD 9ed866dch, 0f7cca339h, 91ab9fc5h, 48eead19h + DWORD 0cb3defe5h, 42fd12bfh, 0c9da1ef4h, 8157a6e7h + DWORD 0036de3eh, 000bba6eh, 0008032ah, 00364683h + DWORD 0ffcf107ah, 0ffe0ff7ch, 002fa50ah, 0009ffdfh + DWORD 0007f904h, 0000a8fch, 00189d76h, 0fff8707dh + DWORD 0fff380a6h, 0fff21f1ah, 0ffe3a1e6h, 0fff241a2h + DWORD 0b4fe9e3eh, 0f8597a6eh, 136d432ah, 9386a683h + DWORD 8cde507ah, 51d07f7ch, 97d0e50ah, 0cc85dfdfh + DWORD 8d287904h, 872028fch, 30c75d76h, 0c388107dh + DWORD 0b50840a6h, 1ed55f1ah, 192061e6h, 0ff2681a2h + DWORD 0030ba22h, 001244aah, 00395d04h, 0035b760h + DWORD 0ffca64a3h, 0012db10h, 0ffdada79h, 0fffbed0bh + DWORD 00365bdeh, 00255461h, 0ffddc205h, 0033008eh + DWORD 0ffc5be08h, 0ffdca72ch, 0ffcc00a6h, 0ffe0156dh + DWORD 8e74fa22h, 9ba784aah, 0b9d9dd04h, 8721b760h + DWORD 86dec4a3h, 1374db10h, 02a9fa79h, 241d4d0bh + DWORD 54b21bdeh, 0fe317461h, 0c99e6205h, 5144c08eh + DWORD 0d386be08h, 0aec2272ch, 0c4e0c0a6h, 000db56dh + DWORD 0ffc56827h, 0ffc56827h, 00375fa9h, 00375fa9h + DWORD 003b3864h, 003b3864h, 002e115eh, 002e115eh + DWORD 0015f7feh, 0015f7feh, 000c66bch, 000c66bch + DWORD 00182f20h, 00182f20h, 0ffec61dbh, 0ffec61dbh + DWORD 354a4827h, 354a4827h, 0bbac7fa9h, 0bbac7fa9h + DWORD 0c547b864h, 0c547b864h, 8b59d15eh, 8b59d15eh + DWORD 0b815b7feh, 0b815b7feh, 1ee3e6bch, 1ee3e6bch + DWORD 0f5fc2f20h, 0f5fc2f20h, 0aa7c1dbh, 0aa7c1dbh + DWORD 0ffeb886eh, 0ffeb886eh, 0ffebecfbh, 0ffebecfbh + DWORD 0002b520h, 0002b520h, 0024c36dh, 0024c36dh + DWORD 001c400ah, 001c400ah, 0ffcfc93eh, 0ffcfc93eh + DWORD 003637f8h, 003637f8h, 0fffd1b94h, 0fffd1b94h + DWORD 0f1f9486eh, 0f1f9486eh, 0ec0b4cfbh, 0ec0b4cfbh + DWORD 46a6b520h, 46a6b520h, 9612636dh, 9612636dh + DWORD 0ab1d800ah, 0ab1d800ah, 51f7893eh, 51f7893eh + DWORD 0ab3537f8h, 0ab3537f8h, 296f9b94h, 296f9b94h + DWORD 001417f8h, 001417f8h, 0fff4675fh, 0fff4675fh + DWORD 00033821h, 00033821h, 0ffdb8a94h, 0ffdb8a94h + DWORD 00319640h, 00319640h, 0ffe6c6b8h, 0ffe6c6b8h + DWORD 00002182h, 00002182h, 0038d436h, 0038d436h + DWORD 671317f8h, 671317f8h, 5960475fh, 5960475fh + DWORD 0da875821h, 0da875821h, 772e0a94h, 772e0a94h + DWORD 12f99640h, 12f99640h, 5cbdc6b8h, 5cbdc6b8h + DWORD 4b306182h, 4b306182h, 0d7bf9436h, 0d7bf9436h + DWORD 0ffc398a6h, 0ffc398a6h, 0fff232bch, 0fff232bch + DWORD 0010c942h, 0010c942h, 0ffff5300h, 0ffff5300h + DWORD 0ffd0ba78h, 0ffd0ba78h, 0fff83be9h, 0fff83be9h + DWORD 0fffbf510h, 0fffbf510h, 00330417h, 00330417h + DWORD 0b7d858a6h, 0b7d858a6h, 0d849b2bch, 0d849b2bch + DWORD 80390942h, 80390942h, 6a5f5300h, 6a5f5300h + DWORD 0bb1fba78h, 0bb1fba78h, 0b6f55be9h, 0b6f55be9h + DWORD 369df510h, 369df510h, 0b135e417h, 0b135e417h + DWORD 0015d39eh, 0015d39eh, 0ffe3ba9dh, 0ffe3ba9dh + DWORD 0ffeb6a2ch, 0ffeb6a2ch, 0005d423h, 0005d423h + DWORD 0013f609h, 0013f609h, 000059c5h, 000059c5h + DWORD 0012beedh, 0012beedh, 000a3d7eh, 000a3d7eh + DWORD 6389939eh, 6389939eh, 9cb75a9dh, 9cb75a9dh + DWORD 0730ea2ch, 0730ea2ch, 350a3423h, 350a3423h + DWORD 9e551609h, 9e551609h, 3cb8f9c5h, 3cb8f9c5h + DWORD 95705eedh, 95705eedh, 80b9fd7eh, 80b9fd7eh + DWORD 0025cbf7h, 0025cbf7h, 00064593h, 00064593h + DWORD 00385bb5h, 00385bb5h, 002d485dh, 002d485dh + DWORD 0ffd69161h, 0ffd69161h, 0ffdf39c8h, 0ffdf39c8h + DWORD 000f017bh, 000f017bh, 0ffcbef0eh, 0ffcbef0eh + DWORD 9a24abf7h, 9a24abf7h, 4b38a593h, 4b38a593h + DWORD 052efbb5h, 052efbb5h, 0eeb8e85dh, 0eeb8e85dh + DWORD 0a582b161h, 0a582b161h, 231839c8h, 231839c8h + DWORD 0ebe617bh, 0ebe617bh, 2eadaf0eh, 2eadaf0eh + DWORD 0fffe1036h, 0fffe1036h, 00376f20h, 00376f20h + DWORD 00302d52h, 00302d52h, 0030ad80h, 0030ad80h + DWORD 000f430ah, 000f430ah, 003e4f8eh, 003e4f8eh + DWORD 0ffe2688eh, 0ffe2688eh, 0013308bh, 0013308bh + DWORD 7f04d036h, 7f04d036h, 0de1b6f20h, 0de1b6f20h + DWORD 0a4da6d52h, 0a4da6d52h, 55e0ad80h, 55e0ad80h + DWORD 8b70830ah, 8b70830ah, 3b300f8eh, 3b300f8eh + DWORD 3df4288eh, 3df4288eh, 4ca4908bh, 4ca4908bh + DWORD 00183045h, 00183045h, 0ffdeca39h, 0ffdeca39h + DWORD 0ffcaf612h, 0ffcaf612h, 001629a3h, 001629a3h + DWORD 002e67e7h, 002e67e7h, 00381e31h, 00381e31h + DWORD 0017537fh, 0017537fh, 003bf91bh, 003bf91bh + DWORD 0f7a0d045h, 0f7a0d045h, 0a0a5ea39h, 0a0a5ea39h + DWORD 9d8d3612h, 9d8d3612h, 7fca89a3h, 7fca89a3h + DWORD 75ab47e7h, 75ab47e7h, 0af7e3e31h, 0af7e3e31h + DWORD 2707337fh, 2707337fh, 5ddf591bh, 5ddf591bh + DWORD 002ab0d3h, 002ab0d3h, 002ab0d3h, 002ab0d3h + DWORD 0ffe062ach, 0ffe062ach, 0ffe062ach, 0ffe062ach + DWORD 002703d0h, 002703d0h, 002703d0h, 002703d0h + DWORD 0ffc47acch, 0ffc47acch, 0ffc47acch, 0ffc47acch + DWORD 38c510d3h, 38c510d3h, 38c510d3h, 38c510d3h + DWORD 6635e2ach, 6635e2ach, 6635e2ach, 6635e2ach + DWORD 38a103d0h, 38a103d0h, 38a103d0h, 38a103d0h + DWORD 591dfacch, 591dfacch, 591dfacch, 591dfacch + DWORD 0ffc4c7adh, 0ffc4c7adh, 0ffc4c7adh, 0ffc4c7adh + DWORD 0fff1708ah, 0fff1708ah, 0fff1708ah, 0fff1708ah + DWORD 0fff7e466h, 0fff7e466h, 0fff7e466h, 0fff7e466h + DWORD 0fff39c58h, 0fff39c58h, 0fff39c58h, 0fff39c58h + DWORD 763a67adh, 763a67adh, 763a67adh, 763a67adh + DWORD 1102b08ah, 1102b08ah, 1102b08ah, 1102b08ah + DWORD 6184a466h, 6184a466h, 6184a466h, 6184a466h + DWORD 0a77e9c58h, 0a77e9c58h, 0a77e9c58h, 0a77e9c58h + DWORD 0ffc78c74h, 0ffc78c74h, 0ffc78c74h, 0ffc78c74h + DWORD 00186ba4h, 00186ba4h, 00186ba4h, 00186ba4h + DWORD 0020a9e9h, 0020a9e9h, 0020a9e9h, 0020a9e9h + DWORD 0ffca7bc1h, 0ffca7bc1h, 0ffca7bc1h, 0ffca7bc1h + DWORD 87560c74h, 87560c74h, 87560c74h, 87560c74h + DWORD 0cb8ceba4h, 0cb8ceba4h, 0cb8ceba4h, 0cb8ceba4h + DWORD 0c4ddc9e9h, 0c4ddc9e9h, 0c4ddc9e9h, 0c4ddc9e9h + DWORD 72c29bc1h, 72c29bc1h, 72c29bc1h, 72c29bc1h + DWORD 003a50a7h, 003a50a7h, 003a50a7h, 003a50a7h + DWORD 0ffca81e2h, 0ffca81e2h, 0ffca81e2h, 0ffca81e2h + DWORD 0019152ah, 0019152ah, 0019152ah, 0019152ah + DWORD 0019edc3h, 0019edc3h, 0019edc3h, 0019edc3h + DWORD 92cf30a7h, 92cf30a7h, 92cf30a7h, 92cf30a7h + DWORD 0e706c1e2h, 0e706c1e2h, 0e706c1e2h, 0e706c1e2h + DWORD 35be552ah, 35be552ah, 35be552ah, 35be552ah + DWORD 68524dc3h, 68524dc3h, 68524dc3h, 68524dc3h + DWORD 00083aa3h, 00083aa3h, 00083aa3h, 00083aa3h + DWORD 0ffdc2964h, 0ffdc2964h, 0ffdc2964h, 0ffdc2964h + DWORD 000495b3h, 000495b3h, 000495b3h, 000495b3h + DWORD 0ffc9fc00h, 0ffc9fc00h, 0ffc9fc00h, 0ffc9fc00h + DWORD 41dc9aa3h, 41dc9aa3h, 41dc9aa3h, 41dc9aa3h + DWORD 6308a964h, 6308a964h, 6308a964h, 6308a964h + DWORD 853af5b3h, 853af5b3h, 853af5b3h, 853af5b3h + DWORD 3f49fc00h, 3f49fc00h, 3f49fc00h, 3f49fc00h + DWORD 002bc1bfh, 002bc1bfh, 002bc1bfh, 002bc1bfh + DWORD 0ffc9756ah, 0ffc9756ah, 0ffc9756ah, 0ffc9756ah + DWORD 002e7184h, 002e7184h, 002e7184h, 002e7184h + DWORD 003aea7bh, 003aea7bh, 003aea7bh, 003aea7bh + DWORD 94e3a1bfh, 94e3a1bfh, 94e3a1bfh, 94e3a1bfh + DWORD 2176b56ah, 2176b56ah, 2176b56ah, 2176b56ah + DWORD 1c5ef184h, 1c5ef184h, 1c5ef184h, 1c5ef184h + DWORD 0c0a4a7bh, 0c0a4a7bh, 0c0a4a7bh, 0c0a4a7bh + DWORD 0ffc44151h, 0ffc44151h, 0ffc44151h, 0ffc44151h + DWORD 0026b82ch, 0026b82ch, 0026b82ch, 0026b82ch + DWORD 0036cfd4h, 0036cfd4h, 0036cfd4h, 0036cfd4h + DWORD 00195afdh, 00195afdh, 00195afdh, 00195afdh + DWORD 236e6151h, 236e6151h, 236e6151h, 236e6151h + DWORD 712c382ch, 712c382ch, 712c382ch, 712c382ch + DWORD 40314fd4h, 40314fd4h, 40314fd4h, 40314fd4h + DWORD 0a0f8fafdh, 0a0f8fafdh, 0a0f8fafdh, 0a0f8fafdh + DWORD 0ffca213bh, 0ffca213bh, 0ffca213bh, 0ffca213bh + DWORD 0ffd10b33h, 0ffd10b33h, 0ffd10b33h, 0ffd10b33h + DWORD 0fffe89e0h, 0fffe89e0h, 0fffe89e0h, 0fffe89e0h + DWORD 0ffd6b599h, 0ffd6b599h, 0ffd6b599h, 0ffd6b599h + DWORD 9271813bh, 9271813bh, 9271813bh, 9271813bh + DWORD 53b76b33h, 53b76b33h, 53b76b33h, 53b76b33h + DWORD 613a89e0h, 613a89e0h, 613a89e0h, 613a89e0h + DWORD 6e09d599h, 6e09d599h, 6e09d599h, 6e09d599h + DWORD 0fffbba3bh, 0fffbba3bh, 0fffbba3bh, 0fffbba3bh + DWORD 0fffbba3bh, 0fffbba3bh, 0fffbba3bh, 0fffbba3bh + DWORD 0ffc2cdffh, 0ffc2cdffh, 0ffc2cdffh, 0ffc2cdffh + DWORD 0ffc2cdffh, 0ffc2cdffh, 0ffc2cdffh, 0ffc2cdffh + DWORD 45c31a3bh, 45c31a3bh, 45c31a3bh, 45c31a3bh + DWORD 45c31a3bh, 45c31a3bh, 45c31a3bh, 45c31a3bh + DWORD 5602adffh, 5602adffh, 5602adffh, 5602adffh + DWORD 5602adffh, 5602adffh, 5602adffh, 5602adffh + DWORD 00004bdeh, 00004bdeh, 00004bdeh, 00004bdeh + DWORD 00004bdeh, 00004bdeh, 00004bdeh, 00004bdeh + DWORD 0ffe52fcbh, 0ffe52fcbh, 0ffe52fcbh, 0ffe52fcbh + DWORD 0ffe52fcbh, 0ffe52fcbh, 0ffe52fcbh, 0ffe52fcbh + DWORD 927c0bdeh, 927c0bdeh, 927c0bdeh, 927c0bdeh + DWORD 927c0bdeh, 927c0bdeh, 927c0bdeh, 927c0bdeh + DWORD 0ec5e8fcbh, 0ec5e8fcbh, 0ec5e8fcbh, 0ec5e8fcbh + DWORD 0ec5e8fcbh, 0ec5e8fcbh, 0ec5e8fcbh, 0ec5e8fcbh + DWORD 00320368h, 00320368h, 00320368h, 00320368h + DWORD 00320368h, 00320368h, 00320368h, 00320368h + DWORD 00155b09h, 00155b09h, 00155b09h, 00155b09h + DWORD 00155b09h, 00155b09h, 00155b09h, 00155b09h + DWORD 2c9f0368h, 2c9f0368h, 2c9f0368h, 2c9f0368h + DWORD 2c9f0368h, 2c9f0368h, 2c9f0368h, 2c9f0368h + DWORD 4af67b09h, 4af67b09h, 4af67b09h, 4af67b09h + DWORD 4af67b09h, 4af67b09h, 4af67b09h, 4af67b09h + DWORD 003ae519h, 003ae519h, 003ae519h, 003ae519h + DWORD 003ae519h, 003ae519h, 003ae519h, 003ae519h + DWORD 0020522ah, 0020522ah, 0020522ah, 0020522ah + DWORD 0020522ah, 0020522ah, 0020522ah, 0020522ah + DWORD 345e0519h, 345e0519h, 345e0519h, 345e0519h + DWORD 345e0519h, 345e0519h, 345e0519h, 345e0519h + DWORD 9d65922ah, 9d65922ah, 9d65922ah, 9d65922ah + DWORD 9d65922ah, 9d65922ah, 9d65922ah, 9d65922ah + DWORD 00202c85h, 00202c85h, 00202c85h, 00202c85h + DWORD 00202c85h, 00202c85h, 00202c85h, 00202c85h + DWORD 0ffd80698h, 0ffd80698h, 0ffd80698h, 0ffd80698h + DWORD 0ffd80698h, 0ffd80698h, 0ffd80698h, 0ffd80698h + DWORD 0d730cc85h, 0d730cc85h, 0d730cc85h, 0d730cc85h + DWORD 0d730cc85h, 0d730cc85h, 0d730cc85h, 0d730cc85h + DWORD 14ab0698h, 14ab0698h, 14ab0698h, 14ab0698h + DWORD 14ab0698h, 14ab0698h, 14ab0698h, 14ab0698h + DWORD 00111560h, 00111560h, 00111560h, 00111560h + DWORD 00111560h, 00111560h, 00111560h, 00111560h + DWORD 00086270h, 00086270h, 00086270h, 00086270h + DWORD 00086270h, 00086270h, 00086270h, 00086270h + DWORD 0f2bd1560h, 0f2bd1560h, 0f2bd1560h, 0f2bd1560h + DWORD 0f2bd1560h, 0f2bd1560h, 0f2bd1560h, 0f2bd1560h + DWORD 94566270h, 94566270h, 94566270h, 94566270h + DWORD 94566270h, 94566270h, 94566270h, 94566270h + DWORD 0ffc94878h, 0ffc94878h, 0ffc94878h, 0ffc94878h + DWORD 0ffc94878h, 0ffc94878h, 0ffc94878h, 0ffc94878h + DWORD 00107a5ch, 00107a5ch, 00107a5ch, 00107a5ch + DWORD 00107a5ch, 00107a5ch, 00107a5ch, 00107a5ch + DWORD 0ccd84878h, 0ccd84878h, 0ccd84878h, 0ccd84878h + DWORD 0ccd84878h, 0ccd84878h, 0ccd84878h, 0ccd84878h + DWORD 515bfa5ch, 515bfa5ch, 515bfa5ch, 515bfa5ch + DWORD 515bfa5ch, 515bfa5ch, 515bfa5ch, 515bfa5ch + DWORD 0fff05f90h, 0fff05f90h, 0fff05f90h, 0fff05f90h + DWORD 0fff05f90h, 0fff05f90h, 0fff05f90h, 0fff05f90h + DWORD 0ffd669a8h, 0ffd669a8h, 0ffd669a8h, 0ffd669a8h + DWORD 0ffd669a8h, 0ffd669a8h, 0ffd669a8h, 0ffd669a8h + DWORD 83e25f90h, 83e25f90h, 83e25f90h, 83e25f90h + DWORD 83e25f90h, 83e25f90h, 83e25f90h, 83e25f90h + DWORD 990b69a8h, 990b69a8h, 990b69a8h, 990b69a8h + DWORD 990b69a8h, 990b69a8h, 990b69a8h, 990b69a8h + DWORD 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h + DWORD 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h + DWORD 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h + DWORD 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h, 0ffd71ad9h + DWORD 0dab23ad9h, 0dab23ad9h, 0dab23ad9h, 0dab23ad9h + DWORD 0dab23ad9h, 0dab23ad9h, 0dab23ad9h, 0dab23ad9h + DWORD 0dab23ad9h, 0dab23ad9h, 0dab23ad9h, 0dab23ad9h + DWORD 0dab23ad9h, 0dab23ad9h, 0dab23ad9h, 0dab23ad9h + DWORD 0ffd085b7h, 0ffd085b7h, 0ffd085b7h, 0ffd085b7h + DWORD 0ffd085b7h, 0ffd085b7h, 0ffd085b7h, 0ffd085b7h + DWORD 0ffd085b7h, 0ffd085b7h, 0ffd085b7h, 0ffd085b7h + DWORD 0ffd085b7h, 0ffd085b7h, 0ffd085b7h, 0ffd085b7h + DWORD 110765b7h, 110765b7h, 110765b7h, 110765b7h + DWORD 110765b7h, 110765b7h, 110765b7h, 110765b7h + DWORD 110765b7h, 110765b7h, 110765b7h, 110765b7h + DWORD 110765b7h, 110765b7h, 110765b7h, 110765b7h + DWORD 002c04f7h, 002c04f7h, 002c04f7h, 002c04f7h + DWORD 002c04f7h, 002c04f7h, 002c04f7h, 002c04f7h + DWORD 002c04f7h, 002c04f7h, 002c04f7h, 002c04f7h + DWORD 002c04f7h, 002c04f7h, 002c04f7h, 002c04f7h + DWORD 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h + DWORD 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h + DWORD 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h + DWORD 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h, 0e14ae4f7h + DWORD 0ffd0658bh, 0ffd0658bh, 0ffd0658bh, 0ffd0658bh + DWORD 0ffd0658bh, 0ffd0658bh, 0ffd0658bh, 0ffd0658bh + DWORD 0ffd0658bh, 0ffd0658bh, 0ffd0658bh, 0ffd0658bh + DWORD 0ffd0658bh, 0ffd0658bh, 0ffd0658bh, 0ffd0658bh + DWORD 7301c58bh, 7301c58bh, 7301c58bh, 7301c58bh + DWORD 7301c58bh, 7301c58bh, 7301c58bh, 7301c58bh + DWORD 7301c58bh, 7301c58bh, 7301c58bh, 7301c58bh + DWORD 7301c58bh, 7301c58bh, 7301c58bh, 7301c58bh + DWORD 001feb81h, 001feb81h, 001feb81h, 001feb81h + DWORD 001feb81h, 001feb81h, 001feb81h, 001feb81h + DWORD 001feb81h, 001feb81h, 001feb81h, 001feb81h + DWORD 001feb81h, 001feb81h, 001feb81h, 001feb81h + DWORD 41100b81h, 41100b81h, 41100b81h, 41100b81h + DWORD 41100b81h, 41100b81h, 41100b81h, 41100b81h + DWORD 41100b81h, 41100b81h, 41100b81h, 41100b81h + DWORD 41100b81h, 41100b81h, 41100b81h, 41100b81h + DWORD 00057b53h, 00057b53h, 00057b53h, 00057b53h + DWORD 00057b53h, 00057b53h, 00057b53h, 00057b53h + DWORD 00057b53h, 00057b53h, 00057b53h, 00057b53h + DWORD 00057b53h, 00057b53h, 00057b53h, 00057b53h + DWORD 51efdb53h, 51efdb53h, 51efdb53h, 51efdb53h + DWORD 51efdb53h, 51efdb53h, 51efdb53h, 51efdb53h + DWORD 51efdb53h, 51efdb53h, 51efdb53h, 51efdb53h + DWORD 51efdb53h, 51efdb53h, 51efdb53h, 51efdb53h + DWORD 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h + DWORD 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h + DWORD 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h + DWORD 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h, 0ffdc16d5h + DWORD 6c36b6d5h, 6c36b6d5h, 6c36b6d5h, 6c36b6d5h + DWORD 6c36b6d5h, 6c36b6d5h, 6c36b6d5h, 6c36b6d5h + DWORD 6c36b6d5h, 6c36b6d5h, 6c36b6d5h, 6c36b6d5h + DWORD 6c36b6d5h, 6c36b6d5h, 6c36b6d5h, 6c36b6d5h + DWORD 0ffe421d5h, 0ffe421d5h, 0ffe421d5h, 0ffe421d5h + DWORD 0ffe421d5h, 0ffe421d5h, 0ffe421d5h, 0ffe421d5h + DWORD 0ffe421d5h, 0ffe421d5h, 0ffe421d5h, 0ffe421d5h + DWORD 0ffe421d5h, 0ffe421d5h, 0ffe421d5h, 0ffe421d5h + DWORD 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h + DWORD 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h + DWORD 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h + DWORD 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h, 0ed9ec1d5h + DWORD 0fff8e1dch, 0fff8e1dch, 0fff8e1dch, 0fff8e1dch + DWORD 0fff8e1dch, 0fff8e1dch, 0fff8e1dch, 0fff8e1dch + DWORD 0fff8e1dch, 0fff8e1dch, 0fff8e1dch, 0fff8e1dch + DWORD 0fff8e1dch, 0fff8e1dch, 0fff8e1dch, 0fff8e1dch + DWORD 9e3461dch, 9e3461dch, 9e3461dch, 9e3461dch + DWORD 9e3461dch, 9e3461dch, 9e3461dch, 9e3461dch + DWORD 9e3461dch, 9e3461dch, 9e3461dch, 9e3461dch + DWORD 9e3461dch, 9e3461dch, 9e3461dch, 9e3461dch + DWORD 000d5ed8h, 000d5ed8h, 000d5ed8h, 000d5ed8h + DWORD 000d5ed8h, 000d5ed8h, 000d5ed8h, 000d5ed8h + DWORD 000d5ed8h, 000d5ed8h, 000d5ed8h, 000d5ed8h + DWORD 000d5ed8h, 000d5ed8h, 000d5ed8h, 000d5ed8h + DWORD 9fe85ed8h, 9fe85ed8h, 9fe85ed8h, 9fe85ed8h + DWORD 9fe85ed8h, 9fe85ed8h, 9fe85ed8h, 9fe85ed8h + DWORD 9fe85ed8h, 9fe85ed8h, 9fe85ed8h, 9fe85ed8h + DWORD 9fe85ed8h, 9fe85ed8h, 9fe85ed8h, 9fe85ed8h + DWORD 000bdee8h, 000bdee8h, 000bdee8h, 000bdee8h + DWORD 000bdee8h, 000bdee8h, 000bdee8h, 000bdee8h + DWORD 000bdee8h, 000bdee8h, 000bdee8h, 000bdee8h + DWORD 000bdee8h, 000bdee8h, 000bdee8h, 000bdee8h + DWORD 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h + DWORD 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h + DWORD 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h + DWORD 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h, 0a7e8dee8h + DWORD 0fffc61bch, 0fffc61bch, 0fffc61bch, 0fffc61bch + DWORD 0fffc61bch, 0fffc61bch, 0fffc61bch, 0fffc61bch + DWORD 0fffc61bch, 0fffc61bch, 0fffc61bch, 0fffc61bch + DWORD 0fffc61bch, 0fffc61bch, 0fffc61bch, 0fffc61bch + DWORD 9e33e1bch, 9e33e1bch, 9e33e1bch, 9e33e1bch + DWORD 9e33e1bch, 9e33e1bch, 9e33e1bch, 9e33e1bch + DWORD 9e33e1bch, 9e33e1bch, 9e33e1bch, 9e33e1bch + DWORD 9e33e1bch, 9e33e1bch, 9e33e1bch, 9e33e1bch + DWORD 0007eafdh, 0007eafdh, 0007eafdh, 0007eafdh + DWORD 0007eafdh, 0007eafdh, 0007eafdh, 0007eafdh + DWORD 0007eafdh, 0007eafdh, 0007eafdh, 0007eafdh + DWORD 0007eafdh, 0007eafdh, 0007eafdh, 0007eafdh + DWORD 72e78afdh, 72e78afdh, 72e78afdh, 72e78afdh + DWORD 72e78afdh, 72e78afdh, 72e78afdh, 72e78afdh + DWORD 72e78afdh, 72e78afdh, 72e78afdh, 72e78afdh + DWORD 72e78afdh, 72e78afdh, 72e78afdh, 72e78afdh + DWORD 0027cefeh, 0027cefeh, 0027cefeh, 0027cefeh + DWORD 0027cefeh, 0027cefeh, 0027cefeh, 0027cefeh + DWORD 0027cefeh, 0027cefeh, 0027cefeh, 0027cefeh + DWORD 0027cefeh, 0027cefeh, 0027cefeh, 0027cefeh + DWORD 73078efeh, 73078efeh, 73078efeh, 73078efeh + DWORD 73078efeh, 73078efeh, 73078efeh, 73078efeh + DWORD 73078efeh, 73078efeh, 73078efeh, 73078efeh + DWORD 73078efeh, 73078efeh, 73078efeh, 73078efeh + DWORD 0ffff9b09h, 0ffff9b09h, 0ffff9b09h, 0ffff9b09h + DWORD 0ffff9b09h, 0ffff9b09h, 0ffff9b09h, 0ffff9b09h + DWORD 0ffff9b09h, 0ffff9b09h, 0ffff9b09h, 0ffff9b09h + DWORD 0ffff9b09h, 0ffff9b09h, 0ffff9b09h, 0ffff9b09h + DWORD 92e0bb09h, 92e0bb09h, 92e0bb09h, 92e0bb09h + DWORD 92e0bb09h, 92e0bb09h, 92e0bb09h, 92e0bb09h + DWORD 92e0bb09h, 92e0bb09h, 92e0bb09h, 92e0bb09h + DWORD 92e0bb09h, 92e0bb09h, 92e0bb09h, 92e0bb09h + DWORD 0000a3fah, 0000a3fah, 0000a3fah, 0000a3fah + DWORD 0000a3fah, 0000a3fah, 0000a3fah, 0000a3fah + DWORD 0000a3fah, 0000a3fah, 0000a3fah, 0000a3fah + DWORD 0000a3fah, 0000a3fah, 0000a3fah, 0000a3fah + DWORD 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah + DWORD 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah + DWORD 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah + DWORD 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah, 0ff7fe3fah +ptr_L_mldsa_avx512_zetas_inv_1p QWORD L_mldsa_avx512_zetas_inv_1p +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_ntt_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + ; len = 128 + vmovdqu64 zmm21, [rdx] + vmovdqu64 zmm22, [rdx+64] + vpmulld zmm16, zmm8, zmm22 + vmovshdup zmm17, zmm8 + vpmuldq zmm8, zmm8, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm8, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm8, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm7, zmm16 + vpaddd zmm7, zmm7, zmm16 + ; len = 64 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpmulld zmm16, zmm4, zmm22 + vmovshdup zmm17, zmm4 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm4, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm11, zmm16 + vpaddd zmm11, zmm11, zmm16 + ; len = 32 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpmulld zmm16, zmm2, zmm22 + vmovshdup zmm17, zmm2 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm2, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm13, zmm16 + vpaddd zmm13, zmm13, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 2 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 1 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_ntt_1p_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_ntt_small_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + ; len = 128 + vmovdqu64 zmm21, ZMMWORD PTR L_mldsa_avx512_zeta1_1p + vmovdqu64 zmm22, ZMMWORD PTR L_mldsa_avx512_half_1p + vpmulld zmm16, zmm8, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm8, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm9, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm9, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm10, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm10, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm11, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm11, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vpmulld zmm16, zmm12, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm12, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm13, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm13, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vpmulld zmm16, zmm14, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm14, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vpmulld zmm16, zmm15, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm15, zmm7, zmm16 + vpaddd zmm7, zmm7, zmm16 + ; len = 64 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpmulld zmm16, zmm4, zmm22 + vmovshdup zmm17, zmm4 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm4, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm11, zmm16 + vpaddd zmm11, zmm11, zmm16 + ; len = 32 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpmulld zmm16, zmm2, zmm22 + vmovshdup zmm17, zmm2 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm2, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm13, zmm16 + vpaddd zmm13, zmm13, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 2 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 1 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_ntt_small_1p_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_ntt_full_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + vmovdqu64 zmm27, ZMMWORD PTR L_mldsa_avx512_permn0 + vmovdqu64 zmm28, ZMMWORD PTR L_mldsa_avx512_permn1 + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + ; len = 128 + vmovdqu64 zmm21, [rdx] + vmovdqu64 zmm22, [rdx+64] + vpmulld zmm16, zmm8, zmm22 + vmovshdup zmm17, zmm8 + vpmuldq zmm8, zmm8, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm8, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm8, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm7, zmm16 + vpaddd zmm7, zmm7, zmm16 + ; len = 64 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpmulld zmm16, zmm4, zmm22 + vmovshdup zmm17, zmm4 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm4, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm11, zmm16 + vpaddd zmm11, zmm11, zmm16 + ; len = 32 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpmulld zmm16, zmm2, zmm22 + vmovshdup zmm17, zmm2 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm2, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm13, zmm16 + vpaddd zmm13, zmm13, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 2 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 1 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + vpunpckldq zmm16, zmm0, zmm1 + vpunpckhdq zmm17, zmm0, zmm1 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm1, zmm28 + vpermi2q zmm1, zmm16, zmm17 + vmovdqa64 zmm0, zmm18 + vpunpckldq zmm16, zmm2, zmm3 + vpunpckhdq zmm17, zmm2, zmm3 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm3, zmm28 + vpermi2q zmm3, zmm16, zmm17 + vmovdqa64 zmm2, zmm18 + vpunpckldq zmm16, zmm4, zmm5 + vpunpckhdq zmm17, zmm4, zmm5 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm5, zmm28 + vpermi2q zmm5, zmm16, zmm17 + vmovdqa64 zmm4, zmm18 + vpunpckldq zmm16, zmm6, zmm7 + vpunpckhdq zmm17, zmm6, zmm7 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm7, zmm28 + vpermi2q zmm7, zmm16, zmm17 + vmovdqa64 zmm6, zmm18 + vpunpckldq zmm16, zmm8, zmm9 + vpunpckhdq zmm17, zmm8, zmm9 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm9, zmm28 + vpermi2q zmm9, zmm16, zmm17 + vmovdqa64 zmm8, zmm18 + vpunpckldq zmm16, zmm10, zmm11 + vpunpckhdq zmm17, zmm10, zmm11 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm11, zmm28 + vpermi2q zmm11, zmm16, zmm17 + vmovdqa64 zmm10, zmm18 + vpunpckldq zmm16, zmm12, zmm13 + vpunpckhdq zmm17, zmm12, zmm13 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm13, zmm28 + vpermi2q zmm13, zmm16, zmm17 + vmovdqa64 zmm12, zmm18 + vpunpckldq zmm16, zmm14, zmm15 + vpunpckhdq zmm17, zmm14, zmm15 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm15, zmm28 + vpermi2q zmm15, zmm16, zmm17 + vmovdqa64 zmm14, zmm18 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] @@ -34052,248 +53739,8551 @@ L_mldsa_use_hint_32_avx2_hints_done__15: vmovdqu xmm12, OWORD PTR [rsp+104] vmovdqu xmm13, OWORD PTR [rsp+120] vmovdqu xmm14, OWORD PTR [rsp+136] - add rsp, 152 - pop r15 - pop r14 - pop r13 - pop r12 + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret -wc_mldsa_use_hint_32_avx2 ENDP +wc_mldsa_ntt_full_1p_avx512 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_vec_check_low_avx2 PROC - sub rsp, 40 +wc_mldsa_ntt_small_full_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + vmovdqu64 zmm27, ZMMWORD PTR L_mldsa_avx512_permn0 + vmovdqu64 zmm28, ZMMWORD PTR L_mldsa_avx512_permn1 + ; ntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + ; len = 128 + vmovdqu64 zmm21, ZMMWORD PTR L_mldsa_avx512_zeta1_1p + vmovdqu64 zmm22, ZMMWORD PTR L_mldsa_avx512_half_1p + vpmulld zmm16, zmm8, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm8, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm9, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm9, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm10, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm10, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm11, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm11, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vpmulld zmm16, zmm12, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm12, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm13, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm13, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vpmulld zmm16, zmm14, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm14, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vpmulld zmm16, zmm15, zmm21 + vpaddd zmm17, zmm16, zmm22 + vpsrad zmm17, zmm17, 23 + vpmulld zmm17, zmm17, zmm23 + vpsubd zmm16, zmm16, zmm17 + vpsubd zmm15, zmm7, zmm16 + vpaddd zmm7, zmm7, zmm16 + ; len = 64 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpmulld zmm16, zmm4, zmm22 + vmovshdup zmm17, zmm4 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm4, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm3, zmm16 + vpaddd zmm3, zmm3, zmm16 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpmulld zmm16, zmm12, zmm22 + vmovshdup zmm17, zmm12 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm12, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm11, zmm16 + vpaddd zmm11, zmm11, zmm16 + ; len = 32 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpmulld zmm16, zmm2, zmm22 + vmovshdup zmm17, zmm2 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm2, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm1, zmm16 + vpaddd zmm1, zmm1, zmm16 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpmulld zmm16, zmm6, zmm22 + vmovshdup zmm17, zmm6 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm6, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm5, zmm16 + vpaddd zmm5, zmm5, zmm16 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpmulld zmm16, zmm10, zmm22 + vmovshdup zmm17, zmm10 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm10, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm9, zmm16 + vpaddd zmm9, zmm9, zmm16 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpmulld zmm16, zmm14, zmm22 + vmovshdup zmm17, zmm14 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm14, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm13, zmm16 + vpaddd zmm13, zmm13, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 2 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + ; len = 1 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vpmulld zmm16, zmm1, zmm22 + vmovshdup zmm17, zmm1 + vpmuldq zmm1, zmm1, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm1, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm1, zmm0, zmm16 + vpaddd zmm0, zmm0, zmm16 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vpmulld zmm16, zmm3, zmm22 + vmovshdup zmm17, zmm3 + vpmuldq zmm3, zmm3, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm3, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm3, zmm2, zmm16 + vpaddd zmm2, zmm2, zmm16 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vpmulld zmm16, zmm5, zmm22 + vmovshdup zmm17, zmm5 + vpmuldq zmm5, zmm5, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm5, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm5, zmm4, zmm16 + vpaddd zmm4, zmm4, zmm16 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vpmulld zmm16, zmm7, zmm22 + vmovshdup zmm17, zmm7 + vpmuldq zmm7, zmm7, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm7, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm7, zmm6, zmm16 + vpaddd zmm6, zmm6, zmm16 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vpmulld zmm16, zmm9, zmm22 + vmovshdup zmm17, zmm9 + vpmuldq zmm9, zmm9, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm9, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm9, zmm8, zmm16 + vpaddd zmm8, zmm8, zmm16 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vpmulld zmm16, zmm11, zmm22 + vmovshdup zmm17, zmm11 + vpmuldq zmm11, zmm11, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm11, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm11, zmm10, zmm16 + vpaddd zmm10, zmm10, zmm16 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vpmulld zmm16, zmm13, zmm22 + vmovshdup zmm17, zmm13 + vpmuldq zmm13, zmm13, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm13, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm13, zmm12, zmm16 + vpaddd zmm12, zmm12, zmm16 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + vpmulld zmm16, zmm15, zmm22 + vmovshdup zmm17, zmm15 + vpmuldq zmm15, zmm15, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm15, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm16, zmm16 + vpblendmd zmm16{k1}, zmm16, zmm18 + vpsubd zmm15, zmm14, zmm16 + vpaddd zmm14, zmm14, zmm16 + vpunpckldq zmm16, zmm0, zmm1 + vpunpckhdq zmm17, zmm0, zmm1 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm1, zmm28 + vpermi2q zmm1, zmm16, zmm17 + vmovdqa64 zmm0, zmm18 + vpunpckldq zmm16, zmm2, zmm3 + vpunpckhdq zmm17, zmm2, zmm3 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm3, zmm28 + vpermi2q zmm3, zmm16, zmm17 + vmovdqa64 zmm2, zmm18 + vpunpckldq zmm16, zmm4, zmm5 + vpunpckhdq zmm17, zmm4, zmm5 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm5, zmm28 + vpermi2q zmm5, zmm16, zmm17 + vmovdqa64 zmm4, zmm18 + vpunpckldq zmm16, zmm6, zmm7 + vpunpckhdq zmm17, zmm6, zmm7 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm7, zmm28 + vpermi2q zmm7, zmm16, zmm17 + vmovdqa64 zmm6, zmm18 + vpunpckldq zmm16, zmm8, zmm9 + vpunpckhdq zmm17, zmm8, zmm9 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm9, zmm28 + vpermi2q zmm9, zmm16, zmm17 + vmovdqa64 zmm8, zmm18 + vpunpckldq zmm16, zmm10, zmm11 + vpunpckhdq zmm17, zmm10, zmm11 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm11, zmm28 + vpermi2q zmm11, zmm16, zmm17 + vmovdqa64 zmm10, zmm18 + vpunpckldq zmm16, zmm12, zmm13 + vpunpckhdq zmm17, zmm12, zmm13 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm13, zmm28 + vpermi2q zmm13, zmm16, zmm17 + vmovdqa64 zmm12, zmm18 + vpunpckldq zmm16, zmm14, zmm15 + vpunpckhdq zmm17, zmm14, zmm15 + vmovdqa64 zmm18, zmm27 + vpermi2q zmm18, zmm16, zmm17 + vmovdqa64 zmm15, zmm28 + vpermi2q zmm15, zmm16, zmm17 + vmovdqa64 zmm14, zmm18 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_ntt_small_full_1p_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_invntt_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + ; invntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_inv_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + ; len = 1 + vmovdqu64 zmm21, [rdx] + vmovdqu64 zmm22, [rdx+64] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + ; len = 2 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 32 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsubd zmm16, zmm0, zmm2 + vpaddd zmm0, zmm0, zmm2 + vpmulld zmm2, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm2 + vpmuldq zmm2, zmm2, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm2, zmm16, zmm2 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm2, zmm2 + vpblendmd zmm2{k1}, zmm2, zmm18 + vpsubd zmm16, zmm1, zmm3 + vpaddd zmm1, zmm1, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsubd zmm16, zmm4, zmm6 + vpaddd zmm4, zmm4, zmm6 + vpmulld zmm6, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm6 + vpmuldq zmm6, zmm6, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm6, zmm16, zmm6 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm6, zmm6 + vpblendmd zmm6{k1}, zmm6, zmm18 + vpsubd zmm16, zmm5, zmm7 + vpaddd zmm5, zmm5, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsubd zmm16, zmm8, zmm10 + vpaddd zmm8, zmm8, zmm10 + vpmulld zmm10, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm10 + vpmuldq zmm10, zmm10, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm10, zmm16, zmm10 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm10, zmm10 + vpblendmd zmm10{k1}, zmm10, zmm18 + vpsubd zmm16, zmm9, zmm11 + vpaddd zmm9, zmm9, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsubd zmm16, zmm12, zmm14 + vpaddd zmm12, zmm12, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm13, zmm15 + vpaddd zmm13, zmm13, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 64 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsubd zmm16, zmm0, zmm4 + vpaddd zmm0, zmm0, zmm4 + vpmulld zmm4, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm4 + vpmuldq zmm4, zmm4, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm4, zmm16, zmm4 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm4, zmm4 + vpblendmd zmm4{k1}, zmm4, zmm18 + vpsubd zmm16, zmm1, zmm5 + vpaddd zmm1, zmm1, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpsubd zmm16, zmm2, zmm6 + vpaddd zmm2, zmm2, zmm6 + vpmulld zmm6, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm6 + vpmuldq zmm6, zmm6, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm6, zmm16, zmm6 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm6, zmm6 + vpblendmd zmm6{k1}, zmm6, zmm18 + vpsubd zmm16, zmm3, zmm7 + vpaddd zmm3, zmm3, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsubd zmm16, zmm8, zmm12 + vpaddd zmm8, zmm8, zmm12 + vpmulld zmm12, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm12 + vpmuldq zmm12, zmm12, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm12, zmm16, zmm12 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm12, zmm12 + vpblendmd zmm12{k1}, zmm12, zmm18 + vpsubd zmm16, zmm9, zmm13 + vpaddd zmm9, zmm9, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsubd zmm16, zmm10, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm11, zmm15 + vpaddd zmm11, zmm11, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 128 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsubd zmm16, zmm0, zmm8 + vpaddd zmm0, zmm0, zmm8 + vpmulld zmm8, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm8 + vpmuldq zmm8, zmm8, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm8, zmm16, zmm8 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm8, zmm8 + vpblendmd zmm8{k1}, zmm8, zmm18 + vpsubd zmm16, zmm1, zmm9 + vpaddd zmm1, zmm1, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpsubd zmm16, zmm2, zmm10 + vpaddd zmm2, zmm2, zmm10 + vpmulld zmm10, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm10 + vpmuldq zmm10, zmm10, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm10, zmm16, zmm10 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm10, zmm10 + vpblendmd zmm10{k1}, zmm10, zmm18 + vpsubd zmm16, zmm3, zmm11 + vpaddd zmm3, zmm3, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpsubd zmm16, zmm4, zmm12 + vpaddd zmm4, zmm4, zmm12 + vpmulld zmm12, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm12 + vpmuldq zmm12, zmm12, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm12, zmm16, zmm12 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm12, zmm12 + vpblendmd zmm12{k1}, zmm12, zmm18 + vpsubd zmm16, zmm5, zmm13 + vpaddd zmm5, zmm5, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsubd zmm16, zmm6, zmm14 + vpaddd zmm6, zmm6, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm7, zmm15 + vpaddd zmm7, zmm7, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vmovdqu64 zmm21, [rdx+6016] + vmovdqu64 zmm22, [rdx+6080] + vpmulld zmm16, zmm0, zmm22 + vpmulld zmm19, zmm1, zmm22 + vmovshdup zmm17, zmm0 + vmovshdup zmm20, zmm1 + vpmuldq zmm0, zmm0, zmm21 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm0, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm1, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm0{k1}, zmm16, zmm18 + vpblendmd zmm1{k1}, zmm19, zmm17 + vpmulld zmm16, zmm2, zmm22 + vpmulld zmm19, zmm3, zmm22 + vmovshdup zmm17, zmm2 + vmovshdup zmm20, zmm3 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm3, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm2{k1}, zmm16, zmm18 + vpblendmd zmm3{k1}, zmm19, zmm17 + vpmulld zmm16, zmm4, zmm22 + vpmulld zmm19, zmm5, zmm22 + vmovshdup zmm17, zmm4 + vmovshdup zmm20, zmm5 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm5, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm4{k1}, zmm16, zmm18 + vpblendmd zmm5{k1}, zmm19, zmm17 + vpmulld zmm16, zmm6, zmm22 + vpmulld zmm19, zmm7, zmm22 + vmovshdup zmm17, zmm6 + vmovshdup zmm20, zmm7 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm7, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm6{k1}, zmm16, zmm18 + vpblendmd zmm7{k1}, zmm19, zmm17 + vpmulld zmm16, zmm8, zmm22 + vpmulld zmm19, zmm9, zmm22 + vmovshdup zmm17, zmm8 + vmovshdup zmm20, zmm9 + vpmuldq zmm8, zmm8, zmm21 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm8, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm9, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm8{k1}, zmm16, zmm18 + vpblendmd zmm9{k1}, zmm19, zmm17 + vpmulld zmm16, zmm10, zmm22 + vpmulld zmm19, zmm11, zmm22 + vmovshdup zmm17, zmm10 + vmovshdup zmm20, zmm11 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm11, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm10{k1}, zmm16, zmm18 + vpblendmd zmm11{k1}, zmm19, zmm17 + vpmulld zmm16, zmm12, zmm22 + vpmulld zmm19, zmm13, zmm22 + vmovshdup zmm17, zmm12 + vmovshdup zmm20, zmm13 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm13, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm12{k1}, zmm16, zmm18 + vpblendmd zmm13{k1}, zmm19, zmm17 + vpmulld zmm16, zmm14, zmm22 + vpmulld zmm19, zmm15, zmm22 + vmovshdup zmm17, zmm14 + vmovshdup zmm20, zmm15 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm15, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm14{k1}, zmm16, zmm18 + vpblendmd zmm15{k1}, zmm19, zmm17 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_invntt_1p_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_invntt_full_1p_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 8380417 + vmovd xmm23, eax + vpbroadcastd zmm23, xmm23 + mov eax, 43690 + kmovw k1, eax + mov eax, 21845 + kmovw k2, eax + vmovdqu64 zmm25, ZMMWORD PTR L_mldsa_avx512_perm20 + vmovdqu64 zmm26, ZMMWORD PTR L_mldsa_avx512_perm31 + ; invntt + mov rdx, QWORD PTR [ptr_L_mldsa_avx512_zetas_inv_1p] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + ; len = 1 + vmovdqu64 zmm21, [rdx] + vmovdqu64 zmm22, [rdx+64] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vpsllq zmm16, zmm1, 32 + vpsrlq zmm17, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm16 + vpblendmd zmm1{k2}, zmm1, zmm17 + vmovdqu64 zmm21, [rdx+128] + vmovdqu64 zmm22, [rdx+192] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vpsllq zmm16, zmm3, 32 + vpsrlq zmm17, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm16 + vpblendmd zmm3{k2}, zmm3, zmm17 + vmovdqu64 zmm21, [rdx+256] + vmovdqu64 zmm22, [rdx+320] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpsllq zmm16, zmm5, 32 + vpsrlq zmm17, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm16 + vpblendmd zmm5{k2}, zmm5, zmm17 + vmovdqu64 zmm21, [rdx+384] + vmovdqu64 zmm22, [rdx+448] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vpsllq zmm16, zmm7, 32 + vpsrlq zmm17, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm16 + vpblendmd zmm7{k2}, zmm7, zmm17 + vmovdqu64 zmm21, [rdx+512] + vmovdqu64 zmm22, [rdx+576] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpsllq zmm16, zmm9, 32 + vpsrlq zmm17, zmm8, 32 + vpblendmd zmm8{k1}, zmm8, zmm16 + vpblendmd zmm9{k2}, zmm9, zmm17 + vmovdqu64 zmm21, [rdx+640] + vmovdqu64 zmm22, [rdx+704] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpsllq zmm16, zmm11, 32 + vpsrlq zmm17, zmm10, 32 + vpblendmd zmm10{k1}, zmm10, zmm16 + vpblendmd zmm11{k2}, zmm11, zmm17 + vmovdqu64 zmm21, [rdx+768] + vmovdqu64 zmm22, [rdx+832] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsllq zmm16, zmm13, 32 + vpsrlq zmm17, zmm12, 32 + vpblendmd zmm12{k1}, zmm12, zmm16 + vpblendmd zmm13{k2}, zmm13, zmm17 + vmovdqu64 zmm21, [rdx+896] + vmovdqu64 zmm22, [rdx+960] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vmovshdup zmm21, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vpsllq zmm16, zmm15, 32 + vpsrlq zmm17, zmm14, 32 + vpblendmd zmm14{k1}, zmm14, zmm16 + vpblendmd zmm15{k2}, zmm15, zmm17 + ; len = 2 + vmovdqu64 zmm21, [rdx+1024] + vmovdqu64 zmm22, [rdx+1088] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vpunpcklqdq zmm16, zmm0, zmm1 + vpunpckhqdq zmm1, zmm0, zmm1 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+1152] + vmovdqu64 zmm22, [rdx+1216] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vpunpcklqdq zmm16, zmm2, zmm3 + vpunpckhqdq zmm3, zmm2, zmm3 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+1280] + vmovdqu64 zmm22, [rdx+1344] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpunpcklqdq zmm16, zmm4, zmm5 + vpunpckhqdq zmm5, zmm4, zmm5 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+1408] + vmovdqu64 zmm22, [rdx+1472] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vpunpcklqdq zmm16, zmm6, zmm7 + vpunpckhqdq zmm7, zmm6, zmm7 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+1536] + vmovdqu64 zmm22, [rdx+1600] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpunpcklqdq zmm16, zmm8, zmm9 + vpunpckhqdq zmm9, zmm8, zmm9 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+1664] + vmovdqu64 zmm22, [rdx+1728] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpunpcklqdq zmm16, zmm10, zmm11 + vpunpckhqdq zmm11, zmm10, zmm11 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+1792] + vmovdqu64 zmm22, [rdx+1856] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpunpcklqdq zmm16, zmm12, zmm13 + vpunpckhqdq zmm13, zmm12, zmm13 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+1920] + vmovdqu64 zmm22, [rdx+1984] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vpunpcklqdq zmm16, zmm14, zmm15 + vpunpckhqdq zmm15, zmm14, zmm15 + vmovdqa64 zmm14, zmm16 + ; len = 4 + vmovdqu64 zmm21, [rdx+2048] + vmovdqu64 zmm22, [rdx+2112] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm0, zmm1 + vmovdqa64 zmm1, zmm24 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+2176] + vmovdqu64 zmm22, [rdx+2240] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm2, zmm3 + vmovdqa64 zmm3, zmm24 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+2304] + vmovdqu64 zmm22, [rdx+2368] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm4, zmm5 + vmovdqa64 zmm5, zmm24 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+2432] + vmovdqu64 zmm22, [rdx+2496] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm6, zmm7 + vmovdqa64 zmm7, zmm24 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+2560] + vmovdqu64 zmm22, [rdx+2624] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm8, zmm9 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm8, zmm9 + vmovdqa64 zmm9, zmm24 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+2688] + vmovdqu64 zmm22, [rdx+2752] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm10, zmm11 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm10, zmm11 + vmovdqa64 zmm11, zmm24 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+2816] + vmovdqu64 zmm22, [rdx+2880] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm12, zmm13 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm12, zmm13 + vmovdqa64 zmm13, zmm24 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+2944] + vmovdqu64 zmm22, [rdx+3008] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vmovdqa64 zmm16, zmm25 + vpermi2q zmm16, zmm14, zmm15 + vmovdqa64 zmm24, zmm26 + vpermi2q zmm24, zmm14, zmm15 + vmovdqa64 zmm15, zmm24 + vmovdqa64 zmm14, zmm16 + ; len = 8 + vmovdqu64 zmm21, [rdx+3072] + vmovdqu64 zmm22, [rdx+3136] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vshufi64x2 zmm16, zmm0, zmm1, 68 + vshufi64x2 zmm1, zmm0, zmm1, 238 + vmovdqa64 zmm0, zmm16 + vmovdqu64 zmm21, [rdx+3200] + vmovdqu64 zmm22, [rdx+3264] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vshufi64x2 zmm16, zmm2, zmm3, 68 + vshufi64x2 zmm3, zmm2, zmm3, 238 + vmovdqa64 zmm2, zmm16 + vmovdqu64 zmm21, [rdx+3328] + vmovdqu64 zmm22, [rdx+3392] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vshufi64x2 zmm16, zmm4, zmm5, 68 + vshufi64x2 zmm5, zmm4, zmm5, 238 + vmovdqa64 zmm4, zmm16 + vmovdqu64 zmm21, [rdx+3456] + vmovdqu64 zmm22, [rdx+3520] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vshufi64x2 zmm16, zmm6, zmm7, 68 + vshufi64x2 zmm7, zmm6, zmm7, 238 + vmovdqa64 zmm6, zmm16 + vmovdqu64 zmm21, [rdx+3584] + vmovdqu64 zmm22, [rdx+3648] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vshufi64x2 zmm16, zmm8, zmm9, 68 + vshufi64x2 zmm9, zmm8, zmm9, 238 + vmovdqa64 zmm8, zmm16 + vmovdqu64 zmm21, [rdx+3712] + vmovdqu64 zmm22, [rdx+3776] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vshufi64x2 zmm16, zmm10, zmm11, 68 + vshufi64x2 zmm11, zmm10, zmm11, 238 + vmovdqa64 zmm10, zmm16 + vmovdqu64 zmm21, [rdx+3840] + vmovdqu64 zmm22, [rdx+3904] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vshufi64x2 zmm16, zmm12, zmm13, 68 + vshufi64x2 zmm13, zmm12, zmm13, 238 + vmovdqa64 zmm12, zmm16 + vmovdqu64 zmm21, [rdx+3968] + vmovdqu64 zmm22, [rdx+4032] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vshufi64x2 zmm16, zmm14, zmm15, 68 + vshufi64x2 zmm15, zmm14, zmm15, 238 + vmovdqa64 zmm14, zmm16 + ; len = 16 + vmovdqu64 zmm21, [rdx+4096] + vmovdqu64 zmm22, [rdx+4160] + vpsubd zmm16, zmm0, zmm1 + vpaddd zmm0, zmm0, zmm1 + vpmulld zmm1, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm1 + vpmuldq zmm1, zmm1, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm1, zmm16, zmm1 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm1, zmm1 + vpblendmd zmm1{k1}, zmm1, zmm18 + vmovdqu64 zmm21, [rdx+4224] + vmovdqu64 zmm22, [rdx+4288] + vpsubd zmm16, zmm2, zmm3 + vpaddd zmm2, zmm2, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqu64 zmm21, [rdx+4352] + vmovdqu64 zmm22, [rdx+4416] + vpsubd zmm16, zmm4, zmm5 + vpaddd zmm4, zmm4, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vmovdqu64 zmm21, [rdx+4480] + vmovdqu64 zmm22, [rdx+4544] + vpsubd zmm16, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+4608] + vmovdqu64 zmm22, [rdx+4672] + vpsubd zmm16, zmm8, zmm9 + vpaddd zmm8, zmm8, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vmovdqu64 zmm21, [rdx+4736] + vmovdqu64 zmm22, [rdx+4800] + vpsubd zmm16, zmm10, zmm11 + vpaddd zmm10, zmm10, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqu64 zmm21, [rdx+4864] + vmovdqu64 zmm22, [rdx+4928] + vpsubd zmm16, zmm12, zmm13 + vpaddd zmm12, zmm12, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vmovdqu64 zmm21, [rdx+4992] + vmovdqu64 zmm22, [rdx+5056] + vpsubd zmm16, zmm14, zmm15 + vpaddd zmm14, zmm14, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 32 + vmovdqu64 zmm21, [rdx+5120] + vmovdqu64 zmm22, [rdx+5184] + vpsubd zmm16, zmm0, zmm2 + vpaddd zmm0, zmm0, zmm2 + vpmulld zmm2, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm2 + vpmuldq zmm2, zmm2, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm2, zmm16, zmm2 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm2, zmm2 + vpblendmd zmm2{k1}, zmm2, zmm18 + vpsubd zmm16, zmm1, zmm3 + vpaddd zmm1, zmm1, zmm3 + vpmulld zmm3, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm3 + vpmuldq zmm3, zmm3, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm3, zmm16, zmm3 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm3, zmm3 + vpblendmd zmm3{k1}, zmm3, zmm18 + vmovdqu64 zmm21, [rdx+5248] + vmovdqu64 zmm22, [rdx+5312] + vpsubd zmm16, zmm4, zmm6 + vpaddd zmm4, zmm4, zmm6 + vpmulld zmm6, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm6 + vpmuldq zmm6, zmm6, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm6, zmm16, zmm6 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm6, zmm6 + vpblendmd zmm6{k1}, zmm6, zmm18 + vpsubd zmm16, zmm5, zmm7 + vpaddd zmm5, zmm5, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+5376] + vmovdqu64 zmm22, [rdx+5440] + vpsubd zmm16, zmm8, zmm10 + vpaddd zmm8, zmm8, zmm10 + vpmulld zmm10, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm10 + vpmuldq zmm10, zmm10, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm10, zmm16, zmm10 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm10, zmm10 + vpblendmd zmm10{k1}, zmm10, zmm18 + vpsubd zmm16, zmm9, zmm11 + vpaddd zmm9, zmm9, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vmovdqu64 zmm21, [rdx+5504] + vmovdqu64 zmm22, [rdx+5568] + vpsubd zmm16, zmm12, zmm14 + vpaddd zmm12, zmm12, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm13, zmm15 + vpaddd zmm13, zmm13, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 64 + vmovdqu64 zmm21, [rdx+5632] + vmovdqu64 zmm22, [rdx+5696] + vpsubd zmm16, zmm0, zmm4 + vpaddd zmm0, zmm0, zmm4 + vpmulld zmm4, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm4 + vpmuldq zmm4, zmm4, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm4, zmm16, zmm4 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm4, zmm4 + vpblendmd zmm4{k1}, zmm4, zmm18 + vpsubd zmm16, zmm1, zmm5 + vpaddd zmm1, zmm1, zmm5 + vpmulld zmm5, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm5 + vpmuldq zmm5, zmm5, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm5, zmm16, zmm5 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm5, zmm5 + vpblendmd zmm5{k1}, zmm5, zmm18 + vpsubd zmm16, zmm2, zmm6 + vpaddd zmm2, zmm2, zmm6 + vpmulld zmm6, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm6 + vpmuldq zmm6, zmm6, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm6, zmm16, zmm6 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm6, zmm6 + vpblendmd zmm6{k1}, zmm6, zmm18 + vpsubd zmm16, zmm3, zmm7 + vpaddd zmm3, zmm3, zmm7 + vpmulld zmm7, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm7 + vpmuldq zmm7, zmm7, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm7, zmm16, zmm7 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm7, zmm7 + vpblendmd zmm7{k1}, zmm7, zmm18 + vmovdqu64 zmm21, [rdx+5760] + vmovdqu64 zmm22, [rdx+5824] + vpsubd zmm16, zmm8, zmm12 + vpaddd zmm8, zmm8, zmm12 + vpmulld zmm12, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm12 + vpmuldq zmm12, zmm12, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm12, zmm16, zmm12 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm12, zmm12 + vpblendmd zmm12{k1}, zmm12, zmm18 + vpsubd zmm16, zmm9, zmm13 + vpaddd zmm9, zmm9, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsubd zmm16, zmm10, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm11, zmm15 + vpaddd zmm11, zmm11, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + ; len = 128 + vmovdqu64 zmm21, [rdx+5888] + vmovdqu64 zmm22, [rdx+5952] + vpsubd zmm16, zmm0, zmm8 + vpaddd zmm0, zmm0, zmm8 + vpmulld zmm8, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm8 + vpmuldq zmm8, zmm8, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm8, zmm16, zmm8 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm8, zmm8 + vpblendmd zmm8{k1}, zmm8, zmm18 + vpsubd zmm16, zmm1, zmm9 + vpaddd zmm1, zmm1, zmm9 + vpmulld zmm9, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm9 + vpmuldq zmm9, zmm9, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm9, zmm16, zmm9 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm9, zmm9 + vpblendmd zmm9{k1}, zmm9, zmm18 + vpsubd zmm16, zmm2, zmm10 + vpaddd zmm2, zmm2, zmm10 + vpmulld zmm10, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm10 + vpmuldq zmm10, zmm10, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm10, zmm16, zmm10 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm10, zmm10 + vpblendmd zmm10{k1}, zmm10, zmm18 + vpsubd zmm16, zmm3, zmm11 + vpaddd zmm3, zmm3, zmm11 + vpmulld zmm11, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm11 + vpmuldq zmm11, zmm11, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm11, zmm16, zmm11 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm11, zmm11 + vpblendmd zmm11{k1}, zmm11, zmm18 + vpsubd zmm16, zmm4, zmm12 + vpaddd zmm4, zmm4, zmm12 + vpmulld zmm12, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm12 + vpmuldq zmm12, zmm12, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm12, zmm16, zmm12 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm12, zmm12 + vpblendmd zmm12{k1}, zmm12, zmm18 + vpsubd zmm16, zmm5, zmm13 + vpaddd zmm5, zmm5, zmm13 + vpmulld zmm13, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm13 + vpmuldq zmm13, zmm13, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm13, zmm16, zmm13 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm13, zmm13 + vpblendmd zmm13{k1}, zmm13, zmm18 + vpsubd zmm16, zmm6, zmm14 + vpaddd zmm6, zmm6, zmm14 + vpmulld zmm14, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm14 + vpmuldq zmm14, zmm14, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm14, zmm16, zmm14 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm14, zmm14 + vpblendmd zmm14{k1}, zmm14, zmm18 + vpsubd zmm16, zmm7, zmm15 + vpaddd zmm7, zmm7, zmm15 + vpmulld zmm15, zmm16, zmm22 + vmovshdup zmm17, zmm16 + vpmuldq zmm16, zmm16, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vmovshdup zmm18, zmm15 + vpmuldq zmm15, zmm15, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm15, zmm16, zmm15 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm15, zmm15 + vpblendmd zmm15{k1}, zmm15, zmm18 + vmovdqu64 zmm21, [rdx+6016] + vmovdqu64 zmm22, [rdx+6080] + vpmulld zmm16, zmm0, zmm22 + vpmulld zmm19, zmm1, zmm22 + vmovshdup zmm17, zmm0 + vmovshdup zmm20, zmm1 + vpmuldq zmm0, zmm0, zmm21 + vpmuldq zmm1, zmm1, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm0, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm1, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm0{k1}, zmm16, zmm18 + vpblendmd zmm1{k1}, zmm19, zmm17 + vpmulld zmm16, zmm2, zmm22 + vpmulld zmm19, zmm3, zmm22 + vmovshdup zmm17, zmm2 + vmovshdup zmm20, zmm3 + vpmuldq zmm2, zmm2, zmm21 + vpmuldq zmm3, zmm3, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm2, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm3, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm2{k1}, zmm16, zmm18 + vpblendmd zmm3{k1}, zmm19, zmm17 + vpmulld zmm16, zmm4, zmm22 + vpmulld zmm19, zmm5, zmm22 + vmovshdup zmm17, zmm4 + vmovshdup zmm20, zmm5 + vpmuldq zmm4, zmm4, zmm21 + vpmuldq zmm5, zmm5, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm4, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm5, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm4{k1}, zmm16, zmm18 + vpblendmd zmm5{k1}, zmm19, zmm17 + vpmulld zmm16, zmm6, zmm22 + vpmulld zmm19, zmm7, zmm22 + vmovshdup zmm17, zmm6 + vmovshdup zmm20, zmm7 + vpmuldq zmm6, zmm6, zmm21 + vpmuldq zmm7, zmm7, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm6, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm7, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm6{k1}, zmm16, zmm18 + vpblendmd zmm7{k1}, zmm19, zmm17 + vpmulld zmm16, zmm8, zmm22 + vpmulld zmm19, zmm9, zmm22 + vmovshdup zmm17, zmm8 + vmovshdup zmm20, zmm9 + vpmuldq zmm8, zmm8, zmm21 + vpmuldq zmm9, zmm9, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm8, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm9, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm8{k1}, zmm16, zmm18 + vpblendmd zmm9{k1}, zmm19, zmm17 + vpmulld zmm16, zmm10, zmm22 + vpmulld zmm19, zmm11, zmm22 + vmovshdup zmm17, zmm10 + vmovshdup zmm20, zmm11 + vpmuldq zmm10, zmm10, zmm21 + vpmuldq zmm11, zmm11, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm10, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm11, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm10{k1}, zmm16, zmm18 + vpblendmd zmm11{k1}, zmm19, zmm17 + vpmulld zmm16, zmm12, zmm22 + vpmulld zmm19, zmm13, zmm22 + vmovshdup zmm17, zmm12 + vmovshdup zmm20, zmm13 + vpmuldq zmm12, zmm12, zmm21 + vpmuldq zmm13, zmm13, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm12, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm13, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm12{k1}, zmm16, zmm18 + vpblendmd zmm13{k1}, zmm19, zmm17 + vpmulld zmm16, zmm14, zmm22 + vpmulld zmm19, zmm15, zmm22 + vmovshdup zmm17, zmm14 + vmovshdup zmm20, zmm15 + vpmuldq zmm14, zmm14, zmm21 + vpmuldq zmm15, zmm15, zmm21 + vpmuldq zmm17, zmm17, zmm21 + vpmuldq zmm20, zmm20, zmm21 + vmovshdup zmm18, zmm16 + vpmuldq zmm16, zmm16, zmm23 + vpmuldq zmm18, zmm18, zmm23 + vpsubq zmm16, zmm14, zmm16 + vpsubq zmm18, zmm17, zmm18 + vmovshdup zmm17, zmm19 + vpmuldq zmm19, zmm19, zmm23 + vpmuldq zmm17, zmm17, zmm23 + vpsubq zmm19, zmm15, zmm19 + vpsubq zmm17, zmm20, zmm17 + vmovshdup zmm16, zmm16 + vmovshdup zmm19, zmm19 + vpblendmd zmm14{k1}, zmm16, zmm18 + vpblendmd zmm15{k1}, zmm19, zmm17 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_invntt_full_1p_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_poly_red_avx512 PROC + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + mov rdx, 8380417 + vmovd xmm10, edx + vpbroadcastd zmm10, xmm10 + mov rdx, 4194304 + vmovd xmm11, edx + vpbroadcastd zmm11, xmm11 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpaddd zmm8, zmm0, zmm11 + vpaddd zmm9, zmm1, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm0, zmm0, zmm8 + vpsubd zmm1, zmm1, zmm9 + vpaddd zmm8, zmm2, zmm11 + vpaddd zmm9, zmm3, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm2, zmm2, zmm8 + vpsubd zmm3, zmm3, zmm9 + vpaddd zmm8, zmm4, zmm11 + vpaddd zmm9, zmm5, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm4, zmm4, zmm8 + vpsubd zmm5, zmm5, zmm9 + vpaddd zmm8, zmm6, zmm11 + vpaddd zmm9, zmm7, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm6, zmm6, zmm8 + vpsubd zmm7, zmm7, zmm9 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpaddd zmm8, zmm0, zmm11 + vpaddd zmm9, zmm1, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm0, zmm0, zmm8 + vpsubd zmm1, zmm1, zmm9 + vpaddd zmm8, zmm2, zmm11 + vpaddd zmm9, zmm3, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm2, zmm2, zmm8 + vpsubd zmm3, zmm3, zmm9 + vpaddd zmm8, zmm4, zmm11 + vpaddd zmm9, zmm5, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm4, zmm4, zmm8 + vpsubd zmm5, zmm5, zmm9 + vpaddd zmm8, zmm6, zmm11 + vpaddd zmm9, zmm7, zmm11 + vpsrad zmm8, zmm8, 23 + vpsrad zmm9, zmm9, 23 + vpmulld zmm8, zmm8, zmm10 + vpmulld zmm9, zmm9, zmm10 + vpsubd zmm6, zmm6, zmm8 + vpsubd zmm7, zmm7, zmm9 + vmovdqu64 [rcx+512], zmm0 + vmovdqu64 [rcx+576], zmm1 + vmovdqu64 [rcx+640], zmm2 + vmovdqu64 [rcx+704], zmm3 + vmovdqu64 [rcx+768], zmm4 + vmovdqu64 [rcx+832], zmm5 + vmovdqu64 [rcx+896], zmm6 + vmovdqu64 [rcx+960], zmm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 + ret +wc_mldsa_poly_red_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_mul_avx512 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + mov rax, 8380417 + vmovd xmm8, eax + vpbroadcastd zmm8, xmm8 + mov rax, 58728449 + vmovd xmm9, eax + vpbroadcastd zmm9, xmm9 + ; 0..31 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm2, [rdx+64] + vmovdqu64 zmm4, [r8] + vmovdqu64 zmm6, [r8+64] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm2 + ; 32..63 + vmovdqu64 zmm0, [rdx+128] + vmovdqu64 zmm2, [rdx+192] + vmovdqu64 zmm4, [r8+128] + vmovdqu64 zmm6, [r8+192] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+128], zmm0 + vmovdqu64 [rcx+192], zmm2 + ; 64..95 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm2, [rdx+320] + vmovdqu64 zmm4, [r8+256] + vmovdqu64 zmm6, [r8+320] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+256], zmm0 + vmovdqu64 [rcx+320], zmm2 + ; 96..127 + vmovdqu64 zmm0, [rdx+384] + vmovdqu64 zmm2, [rdx+448] + vmovdqu64 zmm4, [r8+384] + vmovdqu64 zmm6, [r8+448] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+384], zmm0 + vmovdqu64 [rcx+448], zmm2 + ; 128..159 + vmovdqu64 zmm0, [rdx+512] + vmovdqu64 zmm2, [rdx+576] + vmovdqu64 zmm4, [r8+512] + vmovdqu64 zmm6, [r8+576] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+512], zmm0 + vmovdqu64 [rcx+576], zmm2 + ; 160..191 + vmovdqu64 zmm0, [rdx+640] + vmovdqu64 zmm2, [rdx+704] + vmovdqu64 zmm4, [r8+640] + vmovdqu64 zmm6, [r8+704] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+640], zmm0 + vmovdqu64 [rcx+704], zmm2 + ; 192..223 + vmovdqu64 zmm0, [rdx+768] + vmovdqu64 zmm2, [rdx+832] + vmovdqu64 zmm4, [r8+768] + vmovdqu64 zmm6, [r8+832] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+768], zmm0 + vmovdqu64 [rcx+832], zmm2 + ; 224..255 + vmovdqu64 zmm0, [rdx+896] + vmovdqu64 zmm2, [rdx+960] + vmovdqu64 zmm4, [r8+896] + vmovdqu64 zmm6, [r8+960] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm7, zmm6, 245 + vpmuldq zmm0, zmm0, zmm4 + vpmuldq zmm1, zmm1, zmm5 + vpmuldq zmm2, zmm2, zmm6 + vpmuldq zmm3, zmm3, zmm7 + ; Mont Reduce + vpmulld zmm4, zmm0, zmm9 + vpmulld zmm5, zmm1, zmm9 + vpmulld zmm6, zmm2, zmm9 + vpmulld zmm7, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm8 + vpmuldq zmm5, zmm5, zmm8 + vpmuldq zmm6, zmm6, zmm8 + vpmuldq zmm7, zmm7, zmm8 + vpsubd zmm0, zmm0, zmm4 + vpsubd zmm1, zmm1, zmm5 + vpsubd zmm2, zmm2, zmm6 + vpsubd zmm3, zmm3, zmm7 + vpsrlq zmm0, zmm0, 32 + vpsrlq zmm2, zmm2, 32 + vpord zmm0, zmm0, zmm1 + vpord zmm2, zmm2, zmm3 + vmovdqu64 [rcx+896], zmm0 + vmovdqu64 [rcx+960], zmm2 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +wc_mldsa_mul_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_mul_vec_4_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + mov rax, 8380417 + vmovd xmm12, eax + vpbroadcastd zmm12, xmm12 + mov rax, 58728449 + vmovd xmm13, eax + vpbroadcastd zmm13, xmm13 + ; 0..15 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm2, [rdx+1024] + vmovdqu64 zmm6, [r8] + vmovdqu64 zmm8, [r8+1024] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2048] + vmovdqu64 zmm4, [rdx+3072] + vmovdqu64 zmm8, [r8+2048] + vmovdqu64 zmm10, [r8+3072] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx], zmm0 + ; 16..31 + vmovdqu64 zmm0, [rdx+64] + vmovdqu64 zmm2, [rdx+1088] + vmovdqu64 zmm6, [r8+64] + vmovdqu64 zmm8, [r8+1088] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2112] + vmovdqu64 zmm4, [rdx+3136] + vmovdqu64 zmm8, [r8+2112] + vmovdqu64 zmm10, [r8+3136] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+64], zmm0 + ; 32..47 + vmovdqu64 zmm0, [rdx+128] + vmovdqu64 zmm2, [rdx+1152] + vmovdqu64 zmm6, [r8+128] + vmovdqu64 zmm8, [r8+1152] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2176] + vmovdqu64 zmm4, [rdx+3200] + vmovdqu64 zmm8, [r8+2176] + vmovdqu64 zmm10, [r8+3200] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+128], zmm0 + ; 48..63 + vmovdqu64 zmm0, [rdx+192] + vmovdqu64 zmm2, [rdx+1216] + vmovdqu64 zmm6, [r8+192] + vmovdqu64 zmm8, [r8+1216] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2240] + vmovdqu64 zmm4, [rdx+3264] + vmovdqu64 zmm8, [r8+2240] + vmovdqu64 zmm10, [r8+3264] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+192], zmm0 + ; 64..79 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm2, [rdx+1280] + vmovdqu64 zmm6, [r8+256] + vmovdqu64 zmm8, [r8+1280] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2304] + vmovdqu64 zmm4, [rdx+3328] + vmovdqu64 zmm8, [r8+2304] + vmovdqu64 zmm10, [r8+3328] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+256], zmm0 + ; 80..95 + vmovdqu64 zmm0, [rdx+320] + vmovdqu64 zmm2, [rdx+1344] + vmovdqu64 zmm6, [r8+320] + vmovdqu64 zmm8, [r8+1344] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2368] + vmovdqu64 zmm4, [rdx+3392] + vmovdqu64 zmm8, [r8+2368] + vmovdqu64 zmm10, [r8+3392] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+320], zmm0 + ; 96..111 + vmovdqu64 zmm0, [rdx+384] + vmovdqu64 zmm2, [rdx+1408] + vmovdqu64 zmm6, [r8+384] + vmovdqu64 zmm8, [r8+1408] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2432] + vmovdqu64 zmm4, [rdx+3456] + vmovdqu64 zmm8, [r8+2432] + vmovdqu64 zmm10, [r8+3456] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+384], zmm0 + ; 112..127 + vmovdqu64 zmm0, [rdx+448] + vmovdqu64 zmm2, [rdx+1472] + vmovdqu64 zmm6, [r8+448] + vmovdqu64 zmm8, [r8+1472] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2496] + vmovdqu64 zmm4, [rdx+3520] + vmovdqu64 zmm8, [r8+2496] + vmovdqu64 zmm10, [r8+3520] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+448], zmm0 + ; 128..143 + vmovdqu64 zmm0, [rdx+512] + vmovdqu64 zmm2, [rdx+1536] + vmovdqu64 zmm6, [r8+512] + vmovdqu64 zmm8, [r8+1536] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2560] + vmovdqu64 zmm4, [rdx+3584] + vmovdqu64 zmm8, [r8+2560] + vmovdqu64 zmm10, [r8+3584] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+512], zmm0 + ; 144..159 + vmovdqu64 zmm0, [rdx+576] + vmovdqu64 zmm2, [rdx+1600] + vmovdqu64 zmm6, [r8+576] + vmovdqu64 zmm8, [r8+1600] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2624] + vmovdqu64 zmm4, [rdx+3648] + vmovdqu64 zmm8, [r8+2624] + vmovdqu64 zmm10, [r8+3648] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+576], zmm0 + ; 160..175 + vmovdqu64 zmm0, [rdx+640] + vmovdqu64 zmm2, [rdx+1664] + vmovdqu64 zmm6, [r8+640] + vmovdqu64 zmm8, [r8+1664] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2688] + vmovdqu64 zmm4, [rdx+3712] + vmovdqu64 zmm8, [r8+2688] + vmovdqu64 zmm10, [r8+3712] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+640], zmm0 + ; 176..191 + vmovdqu64 zmm0, [rdx+704] + vmovdqu64 zmm2, [rdx+1728] + vmovdqu64 zmm6, [r8+704] + vmovdqu64 zmm8, [r8+1728] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2752] + vmovdqu64 zmm4, [rdx+3776] + vmovdqu64 zmm8, [r8+2752] + vmovdqu64 zmm10, [r8+3776] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+704], zmm0 + ; 192..207 + vmovdqu64 zmm0, [rdx+768] + vmovdqu64 zmm2, [rdx+1792] + vmovdqu64 zmm6, [r8+768] + vmovdqu64 zmm8, [r8+1792] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2816] + vmovdqu64 zmm4, [rdx+3840] + vmovdqu64 zmm8, [r8+2816] + vmovdqu64 zmm10, [r8+3840] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+768], zmm0 + ; 208..223 + vmovdqu64 zmm0, [rdx+832] + vmovdqu64 zmm2, [rdx+1856] + vmovdqu64 zmm6, [r8+832] + vmovdqu64 zmm8, [r8+1856] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2880] + vmovdqu64 zmm4, [rdx+3904] + vmovdqu64 zmm8, [r8+2880] + vmovdqu64 zmm10, [r8+3904] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+832], zmm0 + ; 224..239 + vmovdqu64 zmm0, [rdx+896] + vmovdqu64 zmm2, [rdx+1920] + vmovdqu64 zmm6, [r8+896] + vmovdqu64 zmm8, [r8+1920] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2944] + vmovdqu64 zmm4, [rdx+3968] + vmovdqu64 zmm8, [r8+2944] + vmovdqu64 zmm10, [r8+3968] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+896], zmm0 + ; 240..255 + vmovdqu64 zmm0, [rdx+960] + vmovdqu64 zmm2, [rdx+1984] + vmovdqu64 zmm6, [r8+960] + vmovdqu64 zmm8, [r8+1984] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+3008] + vmovdqu64 zmm4, [rdx+4032] + vmovdqu64 zmm8, [r8+3008] + vmovdqu64 zmm10, [r8+4032] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+960], zmm0 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +wc_mldsa_mul_vec_4_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_mul_vec_5_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + mov rax, 8380417 + vmovd xmm12, eax + vpbroadcastd zmm12, xmm12 + mov rax, 58728449 + vmovd xmm13, eax + vpbroadcastd zmm13, xmm13 + ; 0..15 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm2, [rdx+1024] + vmovdqu64 zmm6, [r8] + vmovdqu64 zmm8, [r8+1024] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2048] + vmovdqu64 zmm4, [rdx+3072] + vmovdqu64 zmm8, [r8+2048] + vmovdqu64 zmm10, [r8+3072] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4096] + vmovdqu64 zmm8, [r8+4096] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx], zmm0 + ; 16..31 + vmovdqu64 zmm0, [rdx+64] + vmovdqu64 zmm2, [rdx+1088] + vmovdqu64 zmm6, [r8+64] + vmovdqu64 zmm8, [r8+1088] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2112] + vmovdqu64 zmm4, [rdx+3136] + vmovdqu64 zmm8, [r8+2112] + vmovdqu64 zmm10, [r8+3136] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4160] + vmovdqu64 zmm8, [r8+4160] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+64], zmm0 + ; 32..47 + vmovdqu64 zmm0, [rdx+128] + vmovdqu64 zmm2, [rdx+1152] + vmovdqu64 zmm6, [r8+128] + vmovdqu64 zmm8, [r8+1152] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2176] + vmovdqu64 zmm4, [rdx+3200] + vmovdqu64 zmm8, [r8+2176] + vmovdqu64 zmm10, [r8+3200] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4224] + vmovdqu64 zmm8, [r8+4224] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+128], zmm0 + ; 48..63 + vmovdqu64 zmm0, [rdx+192] + vmovdqu64 zmm2, [rdx+1216] + vmovdqu64 zmm6, [r8+192] + vmovdqu64 zmm8, [r8+1216] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2240] + vmovdqu64 zmm4, [rdx+3264] + vmovdqu64 zmm8, [r8+2240] + vmovdqu64 zmm10, [r8+3264] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4288] + vmovdqu64 zmm8, [r8+4288] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+192], zmm0 + ; 64..79 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm2, [rdx+1280] + vmovdqu64 zmm6, [r8+256] + vmovdqu64 zmm8, [r8+1280] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2304] + vmovdqu64 zmm4, [rdx+3328] + vmovdqu64 zmm8, [r8+2304] + vmovdqu64 zmm10, [r8+3328] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4352] + vmovdqu64 zmm8, [r8+4352] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+256], zmm0 + ; 80..95 + vmovdqu64 zmm0, [rdx+320] + vmovdqu64 zmm2, [rdx+1344] + vmovdqu64 zmm6, [r8+320] + vmovdqu64 zmm8, [r8+1344] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2368] + vmovdqu64 zmm4, [rdx+3392] + vmovdqu64 zmm8, [r8+2368] + vmovdqu64 zmm10, [r8+3392] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4416] + vmovdqu64 zmm8, [r8+4416] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+320], zmm0 + ; 96..111 + vmovdqu64 zmm0, [rdx+384] + vmovdqu64 zmm2, [rdx+1408] + vmovdqu64 zmm6, [r8+384] + vmovdqu64 zmm8, [r8+1408] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2432] + vmovdqu64 zmm4, [rdx+3456] + vmovdqu64 zmm8, [r8+2432] + vmovdqu64 zmm10, [r8+3456] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4480] + vmovdqu64 zmm8, [r8+4480] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+384], zmm0 + ; 112..127 + vmovdqu64 zmm0, [rdx+448] + vmovdqu64 zmm2, [rdx+1472] + vmovdqu64 zmm6, [r8+448] + vmovdqu64 zmm8, [r8+1472] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2496] + vmovdqu64 zmm4, [rdx+3520] + vmovdqu64 zmm8, [r8+2496] + vmovdqu64 zmm10, [r8+3520] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4544] + vmovdqu64 zmm8, [r8+4544] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+448], zmm0 + ; 128..143 + vmovdqu64 zmm0, [rdx+512] + vmovdqu64 zmm2, [rdx+1536] + vmovdqu64 zmm6, [r8+512] + vmovdqu64 zmm8, [r8+1536] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2560] + vmovdqu64 zmm4, [rdx+3584] + vmovdqu64 zmm8, [r8+2560] + vmovdqu64 zmm10, [r8+3584] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4608] + vmovdqu64 zmm8, [r8+4608] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+512], zmm0 + ; 144..159 + vmovdqu64 zmm0, [rdx+576] + vmovdqu64 zmm2, [rdx+1600] + vmovdqu64 zmm6, [r8+576] + vmovdqu64 zmm8, [r8+1600] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2624] + vmovdqu64 zmm4, [rdx+3648] + vmovdqu64 zmm8, [r8+2624] + vmovdqu64 zmm10, [r8+3648] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4672] + vmovdqu64 zmm8, [r8+4672] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+576], zmm0 + ; 160..175 + vmovdqu64 zmm0, [rdx+640] + vmovdqu64 zmm2, [rdx+1664] + vmovdqu64 zmm6, [r8+640] + vmovdqu64 zmm8, [r8+1664] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2688] + vmovdqu64 zmm4, [rdx+3712] + vmovdqu64 zmm8, [r8+2688] + vmovdqu64 zmm10, [r8+3712] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4736] + vmovdqu64 zmm8, [r8+4736] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+640], zmm0 + ; 176..191 + vmovdqu64 zmm0, [rdx+704] + vmovdqu64 zmm2, [rdx+1728] + vmovdqu64 zmm6, [r8+704] + vmovdqu64 zmm8, [r8+1728] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2752] + vmovdqu64 zmm4, [rdx+3776] + vmovdqu64 zmm8, [r8+2752] + vmovdqu64 zmm10, [r8+3776] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4800] + vmovdqu64 zmm8, [r8+4800] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+704], zmm0 + ; 192..207 + vmovdqu64 zmm0, [rdx+768] + vmovdqu64 zmm2, [rdx+1792] + vmovdqu64 zmm6, [r8+768] + vmovdqu64 zmm8, [r8+1792] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2816] + vmovdqu64 zmm4, [rdx+3840] + vmovdqu64 zmm8, [r8+2816] + vmovdqu64 zmm10, [r8+3840] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4864] + vmovdqu64 zmm8, [r8+4864] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+768], zmm0 + ; 208..223 + vmovdqu64 zmm0, [rdx+832] + vmovdqu64 zmm2, [rdx+1856] + vmovdqu64 zmm6, [r8+832] + vmovdqu64 zmm8, [r8+1856] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2880] + vmovdqu64 zmm4, [rdx+3904] + vmovdqu64 zmm8, [r8+2880] + vmovdqu64 zmm10, [r8+3904] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4928] + vmovdqu64 zmm8, [r8+4928] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+832], zmm0 + ; 224..239 + vmovdqu64 zmm0, [rdx+896] + vmovdqu64 zmm2, [rdx+1920] + vmovdqu64 zmm6, [r8+896] + vmovdqu64 zmm8, [r8+1920] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2944] + vmovdqu64 zmm4, [rdx+3968] + vmovdqu64 zmm8, [r8+2944] + vmovdqu64 zmm10, [r8+3968] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4992] + vmovdqu64 zmm8, [r8+4992] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+896], zmm0 + ; 240..255 + vmovdqu64 zmm0, [rdx+960] + vmovdqu64 zmm2, [rdx+1984] + vmovdqu64 zmm6, [r8+960] + vmovdqu64 zmm8, [r8+1984] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+3008] + vmovdqu64 zmm4, [rdx+4032] + vmovdqu64 zmm8, [r8+3008] + vmovdqu64 zmm10, [r8+4032] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+5056] + vmovdqu64 zmm8, [r8+5056] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+960], zmm0 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +wc_mldsa_mul_vec_5_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_mul_vec_7_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + mov rax, 8380417 + vmovd xmm12, eax + vpbroadcastd zmm12, xmm12 + mov rax, 58728449 + vmovd xmm13, eax + vpbroadcastd zmm13, xmm13 + ; 0..15 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm2, [rdx+1024] + vmovdqu64 zmm6, [r8] + vmovdqu64 zmm8, [r8+1024] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2048] + vmovdqu64 zmm4, [rdx+3072] + vmovdqu64 zmm8, [r8+2048] + vmovdqu64 zmm10, [r8+3072] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4096] + vmovdqu64 zmm4, [rdx+5120] + vmovdqu64 zmm8, [r8+4096] + vmovdqu64 zmm10, [r8+5120] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6144] + vmovdqu64 zmm8, [r8+6144] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx], zmm0 + ; 16..31 + vmovdqu64 zmm0, [rdx+64] + vmovdqu64 zmm2, [rdx+1088] + vmovdqu64 zmm6, [r8+64] + vmovdqu64 zmm8, [r8+1088] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2112] + vmovdqu64 zmm4, [rdx+3136] + vmovdqu64 zmm8, [r8+2112] + vmovdqu64 zmm10, [r8+3136] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4160] + vmovdqu64 zmm4, [rdx+5184] + vmovdqu64 zmm8, [r8+4160] + vmovdqu64 zmm10, [r8+5184] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6208] + vmovdqu64 zmm8, [r8+6208] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+64], zmm0 + ; 32..47 + vmovdqu64 zmm0, [rdx+128] + vmovdqu64 zmm2, [rdx+1152] + vmovdqu64 zmm6, [r8+128] + vmovdqu64 zmm8, [r8+1152] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2176] + vmovdqu64 zmm4, [rdx+3200] + vmovdqu64 zmm8, [r8+2176] + vmovdqu64 zmm10, [r8+3200] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4224] + vmovdqu64 zmm4, [rdx+5248] + vmovdqu64 zmm8, [r8+4224] + vmovdqu64 zmm10, [r8+5248] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6272] + vmovdqu64 zmm8, [r8+6272] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+128], zmm0 + ; 48..63 + vmovdqu64 zmm0, [rdx+192] + vmovdqu64 zmm2, [rdx+1216] + vmovdqu64 zmm6, [r8+192] + vmovdqu64 zmm8, [r8+1216] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2240] + vmovdqu64 zmm4, [rdx+3264] + vmovdqu64 zmm8, [r8+2240] + vmovdqu64 zmm10, [r8+3264] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4288] + vmovdqu64 zmm4, [rdx+5312] + vmovdqu64 zmm8, [r8+4288] + vmovdqu64 zmm10, [r8+5312] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6336] + vmovdqu64 zmm8, [r8+6336] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+192], zmm0 + ; 64..79 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm2, [rdx+1280] + vmovdqu64 zmm6, [r8+256] + vmovdqu64 zmm8, [r8+1280] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2304] + vmovdqu64 zmm4, [rdx+3328] + vmovdqu64 zmm8, [r8+2304] + vmovdqu64 zmm10, [r8+3328] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4352] + vmovdqu64 zmm4, [rdx+5376] + vmovdqu64 zmm8, [r8+4352] + vmovdqu64 zmm10, [r8+5376] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6400] + vmovdqu64 zmm8, [r8+6400] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+256], zmm0 + ; 80..95 + vmovdqu64 zmm0, [rdx+320] + vmovdqu64 zmm2, [rdx+1344] + vmovdqu64 zmm6, [r8+320] + vmovdqu64 zmm8, [r8+1344] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2368] + vmovdqu64 zmm4, [rdx+3392] + vmovdqu64 zmm8, [r8+2368] + vmovdqu64 zmm10, [r8+3392] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4416] + vmovdqu64 zmm4, [rdx+5440] + vmovdqu64 zmm8, [r8+4416] + vmovdqu64 zmm10, [r8+5440] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6464] + vmovdqu64 zmm8, [r8+6464] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+320], zmm0 + ; 96..111 + vmovdqu64 zmm0, [rdx+384] + vmovdqu64 zmm2, [rdx+1408] + vmovdqu64 zmm6, [r8+384] + vmovdqu64 zmm8, [r8+1408] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2432] + vmovdqu64 zmm4, [rdx+3456] + vmovdqu64 zmm8, [r8+2432] + vmovdqu64 zmm10, [r8+3456] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4480] + vmovdqu64 zmm4, [rdx+5504] + vmovdqu64 zmm8, [r8+4480] + vmovdqu64 zmm10, [r8+5504] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6528] + vmovdqu64 zmm8, [r8+6528] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+384], zmm0 + ; 112..127 + vmovdqu64 zmm0, [rdx+448] + vmovdqu64 zmm2, [rdx+1472] + vmovdqu64 zmm6, [r8+448] + vmovdqu64 zmm8, [r8+1472] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2496] + vmovdqu64 zmm4, [rdx+3520] + vmovdqu64 zmm8, [r8+2496] + vmovdqu64 zmm10, [r8+3520] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4544] + vmovdqu64 zmm4, [rdx+5568] + vmovdqu64 zmm8, [r8+4544] + vmovdqu64 zmm10, [r8+5568] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6592] + vmovdqu64 zmm8, [r8+6592] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+448], zmm0 + ; 128..143 + vmovdqu64 zmm0, [rdx+512] + vmovdqu64 zmm2, [rdx+1536] + vmovdqu64 zmm6, [r8+512] + vmovdqu64 zmm8, [r8+1536] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2560] + vmovdqu64 zmm4, [rdx+3584] + vmovdqu64 zmm8, [r8+2560] + vmovdqu64 zmm10, [r8+3584] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4608] + vmovdqu64 zmm4, [rdx+5632] + vmovdqu64 zmm8, [r8+4608] + vmovdqu64 zmm10, [r8+5632] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6656] + vmovdqu64 zmm8, [r8+6656] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+512], zmm0 + ; 144..159 + vmovdqu64 zmm0, [rdx+576] + vmovdqu64 zmm2, [rdx+1600] + vmovdqu64 zmm6, [r8+576] + vmovdqu64 zmm8, [r8+1600] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2624] + vmovdqu64 zmm4, [rdx+3648] + vmovdqu64 zmm8, [r8+2624] + vmovdqu64 zmm10, [r8+3648] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4672] + vmovdqu64 zmm4, [rdx+5696] + vmovdqu64 zmm8, [r8+4672] + vmovdqu64 zmm10, [r8+5696] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6720] + vmovdqu64 zmm8, [r8+6720] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+576], zmm0 + ; 160..175 + vmovdqu64 zmm0, [rdx+640] + vmovdqu64 zmm2, [rdx+1664] + vmovdqu64 zmm6, [r8+640] + vmovdqu64 zmm8, [r8+1664] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2688] + vmovdqu64 zmm4, [rdx+3712] + vmovdqu64 zmm8, [r8+2688] + vmovdqu64 zmm10, [r8+3712] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4736] + vmovdqu64 zmm4, [rdx+5760] + vmovdqu64 zmm8, [r8+4736] + vmovdqu64 zmm10, [r8+5760] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6784] + vmovdqu64 zmm8, [r8+6784] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+640], zmm0 + ; 176..191 + vmovdqu64 zmm0, [rdx+704] + vmovdqu64 zmm2, [rdx+1728] + vmovdqu64 zmm6, [r8+704] + vmovdqu64 zmm8, [r8+1728] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2752] + vmovdqu64 zmm4, [rdx+3776] + vmovdqu64 zmm8, [r8+2752] + vmovdqu64 zmm10, [r8+3776] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4800] + vmovdqu64 zmm4, [rdx+5824] + vmovdqu64 zmm8, [r8+4800] + vmovdqu64 zmm10, [r8+5824] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6848] + vmovdqu64 zmm8, [r8+6848] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+704], zmm0 + ; 192..207 + vmovdqu64 zmm0, [rdx+768] + vmovdqu64 zmm2, [rdx+1792] + vmovdqu64 zmm6, [r8+768] + vmovdqu64 zmm8, [r8+1792] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2816] + vmovdqu64 zmm4, [rdx+3840] + vmovdqu64 zmm8, [r8+2816] + vmovdqu64 zmm10, [r8+3840] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4864] + vmovdqu64 zmm4, [rdx+5888] + vmovdqu64 zmm8, [r8+4864] + vmovdqu64 zmm10, [r8+5888] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6912] + vmovdqu64 zmm8, [r8+6912] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+768], zmm0 + ; 208..223 + vmovdqu64 zmm0, [rdx+832] + vmovdqu64 zmm2, [rdx+1856] + vmovdqu64 zmm6, [r8+832] + vmovdqu64 zmm8, [r8+1856] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2880] + vmovdqu64 zmm4, [rdx+3904] + vmovdqu64 zmm8, [r8+2880] + vmovdqu64 zmm10, [r8+3904] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4928] + vmovdqu64 zmm4, [rdx+5952] + vmovdqu64 zmm8, [r8+4928] + vmovdqu64 zmm10, [r8+5952] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+6976] + vmovdqu64 zmm8, [r8+6976] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+832], zmm0 + ; 224..239 + vmovdqu64 zmm0, [rdx+896] + vmovdqu64 zmm2, [rdx+1920] + vmovdqu64 zmm6, [r8+896] + vmovdqu64 zmm8, [r8+1920] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+2944] + vmovdqu64 zmm4, [rdx+3968] + vmovdqu64 zmm8, [r8+2944] + vmovdqu64 zmm10, [r8+3968] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+4992] + vmovdqu64 zmm4, [rdx+6016] + vmovdqu64 zmm8, [r8+4992] + vmovdqu64 zmm10, [r8+6016] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+7040] + vmovdqu64 zmm8, [r8+7040] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+896], zmm0 + ; 240..255 + vmovdqu64 zmm0, [rdx+960] + vmovdqu64 zmm2, [rdx+1984] + vmovdqu64 zmm6, [r8+960] + vmovdqu64 zmm8, [r8+1984] + vpshufd zmm1, zmm0, 245 + vpshufd zmm3, zmm2, 245 + vpshufd zmm7, zmm6, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm0, zmm0, zmm6 + vpmuldq zmm1, zmm1, zmm7 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vmovdqu64 zmm2, [rdx+3008] + vmovdqu64 zmm4, [rdx+4032] + vmovdqu64 zmm8, [r8+3008] + vmovdqu64 zmm10, [r8+4032] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+5056] + vmovdqu64 zmm4, [rdx+6080] + vmovdqu64 zmm8, [r8+5056] + vmovdqu64 zmm10, [r8+6080] + vpshufd zmm3, zmm2, 245 + vpshufd zmm5, zmm4, 245 + vpshufd zmm9, zmm8, 245 + vpshufd zmm11, zmm10, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpmuldq zmm4, zmm4, zmm10 + vpmuldq zmm5, zmm5, zmm11 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + vpaddq zmm0, zmm0, zmm4 + vpaddq zmm1, zmm1, zmm5 + vmovdqu64 zmm2, [rdx+7104] + vmovdqu64 zmm8, [r8+7104] + vpshufd zmm3, zmm2, 245 + vpshufd zmm9, zmm8, 245 + vpmuldq zmm2, zmm2, zmm8 + vpmuldq zmm3, zmm3, zmm9 + vpaddq zmm0, zmm0, zmm2 + vpaddq zmm1, zmm1, zmm3 + ; Mont Reduce + vpmulld zmm6, zmm0, zmm13 + vpmulld zmm7, zmm1, zmm13 + vpmuldq zmm6, zmm6, zmm12 + vpmuldq zmm7, zmm7, zmm12 + vpsubd zmm0, zmm0, zmm6 + vpsubd zmm1, zmm1, zmm7 + vpsrlq zmm0, zmm0, 32 + vpord zmm0, zmm0, zmm1 + vmovdqu64 [rcx+960], zmm0 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +wc_mldsa_mul_vec_7_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decompose_q88_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 95232 + vmovd xmm12, eax + vpbroadcastd zmm12, xmm12 + mov rax, 190464 + vmovd xmm13, eax + vpbroadcastd zmm13, xmm13 + mov rax, 4190164 + vmovd xmm14, eax + vpbroadcastd zmm14, xmm14 + mov rax, 44 + vmovd xmm15, eax + vpbroadcastd zmm15, xmm15 + mov rax, 1 + vmovd xmm16, eax + vpbroadcastd zmm16, xmm16 + ; 1/4 vectors + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx], zmm4 + vmovdqu64 [rdx+64], zmm5 + vmovdqu64 [rdx+128], zmm6 + vmovdqu64 [rdx+192], zmm7 + vmovdqu64 [r8], zmm8 + vmovdqu64 [r8+64], zmm9 + vmovdqu64 [r8+128], zmm10 + vmovdqu64 [r8+192], zmm11 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, [rcx+384] + vmovdqu64 zmm3, [rcx+448] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+256], zmm4 + vmovdqu64 [rdx+320], zmm5 + vmovdqu64 [rdx+384], zmm6 + vmovdqu64 [rdx+448], zmm7 + vmovdqu64 [r8+256], zmm8 + vmovdqu64 [r8+320], zmm9 + vmovdqu64 [r8+384], zmm10 + vmovdqu64 [r8+448], zmm11 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+512], zmm4 + vmovdqu64 [rdx+576], zmm5 + vmovdqu64 [rdx+640], zmm6 + vmovdqu64 [rdx+704], zmm7 + vmovdqu64 [r8+512], zmm8 + vmovdqu64 [r8+576], zmm9 + vmovdqu64 [r8+640], zmm10 + vmovdqu64 [r8+704], zmm11 + vmovdqu64 zmm0, [rcx+768] + vmovdqu64 zmm1, [rcx+832] + vmovdqu64 zmm2, [rcx+896] + vmovdqu64 zmm3, [rcx+960] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+768], zmm4 + vmovdqu64 [rdx+832], zmm5 + vmovdqu64 [rdx+896], zmm6 + vmovdqu64 [rdx+960], zmm7 + vmovdqu64 [r8+768], zmm8 + vmovdqu64 [r8+832], zmm9 + vmovdqu64 [r8+896], zmm10 + vmovdqu64 [r8+960], zmm11 + ; 2/4 vectors + vmovdqu64 zmm0, [rcx+1024] + vmovdqu64 zmm1, [rcx+1088] + vmovdqu64 zmm2, [rcx+1152] + vmovdqu64 zmm3, [rcx+1216] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+1024], zmm4 + vmovdqu64 [rdx+1088], zmm5 + vmovdqu64 [rdx+1152], zmm6 + vmovdqu64 [rdx+1216], zmm7 + vmovdqu64 [r8+1024], zmm8 + vmovdqu64 [r8+1088], zmm9 + vmovdqu64 [r8+1152], zmm10 + vmovdqu64 [r8+1216], zmm11 + vmovdqu64 zmm0, [rcx+1280] + vmovdqu64 zmm1, [rcx+1344] + vmovdqu64 zmm2, [rcx+1408] + vmovdqu64 zmm3, [rcx+1472] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+1280], zmm4 + vmovdqu64 [rdx+1344], zmm5 + vmovdqu64 [rdx+1408], zmm6 + vmovdqu64 [rdx+1472], zmm7 + vmovdqu64 [r8+1280], zmm8 + vmovdqu64 [r8+1344], zmm9 + vmovdqu64 [r8+1408], zmm10 + vmovdqu64 [r8+1472], zmm11 + vmovdqu64 zmm0, [rcx+1536] + vmovdqu64 zmm1, [rcx+1600] + vmovdqu64 zmm2, [rcx+1664] + vmovdqu64 zmm3, [rcx+1728] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+1536], zmm4 + vmovdqu64 [rdx+1600], zmm5 + vmovdqu64 [rdx+1664], zmm6 + vmovdqu64 [rdx+1728], zmm7 + vmovdqu64 [r8+1536], zmm8 + vmovdqu64 [r8+1600], zmm9 + vmovdqu64 [r8+1664], zmm10 + vmovdqu64 [r8+1728], zmm11 + vmovdqu64 zmm0, [rcx+1792] + vmovdqu64 zmm1, [rcx+1856] + vmovdqu64 zmm2, [rcx+1920] + vmovdqu64 zmm3, [rcx+1984] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+1792], zmm4 + vmovdqu64 [rdx+1856], zmm5 + vmovdqu64 [rdx+1920], zmm6 + vmovdqu64 [rdx+1984], zmm7 + vmovdqu64 [r8+1792], zmm8 + vmovdqu64 [r8+1856], zmm9 + vmovdqu64 [r8+1920], zmm10 + vmovdqu64 [r8+1984], zmm11 + ; 3/4 vectors + vmovdqu64 zmm0, [rcx+2048] + vmovdqu64 zmm1, [rcx+2112] + vmovdqu64 zmm2, [rcx+2176] + vmovdqu64 zmm3, [rcx+2240] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+2048], zmm4 + vmovdqu64 [rdx+2112], zmm5 + vmovdqu64 [rdx+2176], zmm6 + vmovdqu64 [rdx+2240], zmm7 + vmovdqu64 [r8+2048], zmm8 + vmovdqu64 [r8+2112], zmm9 + vmovdqu64 [r8+2176], zmm10 + vmovdqu64 [r8+2240], zmm11 + vmovdqu64 zmm0, [rcx+2304] + vmovdqu64 zmm1, [rcx+2368] + vmovdqu64 zmm2, [rcx+2432] + vmovdqu64 zmm3, [rcx+2496] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+2304], zmm4 + vmovdqu64 [rdx+2368], zmm5 + vmovdqu64 [rdx+2432], zmm6 + vmovdqu64 [rdx+2496], zmm7 + vmovdqu64 [r8+2304], zmm8 + vmovdqu64 [r8+2368], zmm9 + vmovdqu64 [r8+2432], zmm10 + vmovdqu64 [r8+2496], zmm11 + vmovdqu64 zmm0, [rcx+2560] + vmovdqu64 zmm1, [rcx+2624] + vmovdqu64 zmm2, [rcx+2688] + vmovdqu64 zmm3, [rcx+2752] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+2560], zmm4 + vmovdqu64 [rdx+2624], zmm5 + vmovdqu64 [rdx+2688], zmm6 + vmovdqu64 [rdx+2752], zmm7 + vmovdqu64 [r8+2560], zmm8 + vmovdqu64 [r8+2624], zmm9 + vmovdqu64 [r8+2688], zmm10 + vmovdqu64 [r8+2752], zmm11 + vmovdqu64 zmm0, [rcx+2816] + vmovdqu64 zmm1, [rcx+2880] + vmovdqu64 zmm2, [rcx+2944] + vmovdqu64 zmm3, [rcx+3008] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+2816], zmm4 + vmovdqu64 [rdx+2880], zmm5 + vmovdqu64 [rdx+2944], zmm6 + vmovdqu64 [rdx+3008], zmm7 + vmovdqu64 [r8+2816], zmm8 + vmovdqu64 [r8+2880], zmm9 + vmovdqu64 [r8+2944], zmm10 + vmovdqu64 [r8+3008], zmm11 + ; 4/4 vectors + vmovdqu64 zmm0, [rcx+3072] + vmovdqu64 zmm1, [rcx+3136] + vmovdqu64 zmm2, [rcx+3200] + vmovdqu64 zmm3, [rcx+3264] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+3072], zmm4 + vmovdqu64 [rdx+3136], zmm5 + vmovdqu64 [rdx+3200], zmm6 + vmovdqu64 [rdx+3264], zmm7 + vmovdqu64 [r8+3072], zmm8 + vmovdqu64 [r8+3136], zmm9 + vmovdqu64 [r8+3200], zmm10 + vmovdqu64 [r8+3264], zmm11 + vmovdqu64 zmm0, [rcx+3328] + vmovdqu64 zmm1, [rcx+3392] + vmovdqu64 zmm2, [rcx+3456] + vmovdqu64 zmm3, [rcx+3520] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+3328], zmm4 + vmovdqu64 [rdx+3392], zmm5 + vmovdqu64 [rdx+3456], zmm6 + vmovdqu64 [rdx+3520], zmm7 + vmovdqu64 [r8+3328], zmm8 + vmovdqu64 [r8+3392], zmm9 + vmovdqu64 [r8+3456], zmm10 + vmovdqu64 [r8+3520], zmm11 + vmovdqu64 zmm0, [rcx+3584] + vmovdqu64 zmm1, [rcx+3648] + vmovdqu64 zmm2, [rcx+3712] + vmovdqu64 zmm3, [rcx+3776] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+3584], zmm4 + vmovdqu64 [rdx+3648], zmm5 + vmovdqu64 [rdx+3712], zmm6 + vmovdqu64 [rdx+3776], zmm7 + vmovdqu64 [r8+3584], zmm8 + vmovdqu64 [r8+3648], zmm9 + vmovdqu64 [r8+3712], zmm10 + vmovdqu64 [r8+3776], zmm11 + vmovdqu64 zmm0, [rcx+3840] + vmovdqu64 zmm1, [rcx+3904] + vmovdqu64 zmm2, [rcx+3968] + vmovdqu64 zmm3, [rcx+4032] + vpmulld zmm8, zmm0, zmm15 + vpmulld zmm9, zmm1, zmm15 + vpmulld zmm10, zmm2, zmm15 + vpmulld zmm11, zmm3, zmm15 + vpaddd zmm8, zmm8, zmm14 + vpaddd zmm9, zmm9, zmm14 + vpaddd zmm10, zmm10, zmm14 + vpaddd zmm11, zmm11, zmm14 + vpsrld zmm8, zmm8, 23 + vpsrld zmm9, zmm9, 23 + vpsrld zmm10, zmm10, 23 + vpsrld zmm11, zmm11, 23 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpcmpeqd k1, zmm8, zmm15 + vpsubd zmm4{k1}, zmm4, zmm16 + vpcmpeqd k1, zmm9, zmm15 + vpsubd zmm5{k1}, zmm5, zmm16 + vpcmpeqd k1, zmm10, zmm15 + vpsubd zmm6{k1}, zmm6, zmm16 + vpcmpeqd k1, zmm11, zmm15 + vpsubd zmm7{k1}, zmm7, zmm16 + vpcmpgtd k2, zmm15, zmm8 + vmovdqa32 zmm8{k2}{z}, zmm8 + vpcmpgtd k2, zmm15, zmm9 + vmovdqa32 zmm9{k2}{z}, zmm9 + vpcmpgtd k2, zmm15, zmm10 + vmovdqa32 zmm10{k2}{z}, zmm10 + vpcmpgtd k2, zmm15, zmm11 + vmovdqa32 zmm11{k2}{z}, zmm11 + vmovdqu64 [rdx+3840], zmm4 + vmovdqu64 [rdx+3904], zmm5 + vmovdqu64 [rdx+3968], zmm6 + vmovdqu64 [rdx+4032], zmm7 + vmovdqu64 [r8+3840], zmm8 + vmovdqu64 [r8+3904], zmm9 + vmovdqu64 [r8+3968], zmm10 + vmovdqu64 [r8+4032], zmm11 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_decompose_q88_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_decompose_q32_avx512 PROC + sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, 261888 + vmovd xmm12, eax + vpbroadcastd zmm12, xmm12 + mov rax, 523776 + vmovd xmm13, eax + vpbroadcastd zmm13, xmm13 + mov rax, 261887 + vmovd xmm14, eax + vpbroadcastd zmm14, xmm14 + mov rax, 15 + vmovd xmm15, eax + vpbroadcastd zmm15, xmm15 +L_mldsa_decompose_q32_avx512_start_256: + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vpaddd zmm8, zmm0, zmm14 + vpaddd zmm9, zmm1, zmm14 + vpaddd zmm10, zmm2, zmm14 + vpaddd zmm11, zmm3, zmm14 + vpsrld zmm8, zmm8, 19 + vpsrld zmm9, zmm9, 19 + vpsrld zmm10, zmm10, 19 + vpsrld zmm11, zmm11, 19 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsrld zmm0, zmm8, 4 + vpsrld zmm1, zmm9, 4 + vpsrld zmm2, zmm10, 4 + vpsrld zmm3, zmm11, 4 + vpsubd zmm4, zmm4, zmm0 + vpsubd zmm5, zmm5, zmm1 + vpsubd zmm6, zmm6, zmm2 + vpsubd zmm7, zmm7, zmm3 + vpandd zmm8, zmm8, zmm15 + vpandd zmm9, zmm9, zmm15 + vpandd zmm10, zmm10, zmm15 + vpandd zmm11, zmm11, zmm15 + vmovdqu64 [r8], zmm4 + vmovdqu64 [r8+64], zmm5 + vmovdqu64 [r8+128], zmm6 + vmovdqu64 [r8+192], zmm7 + vmovdqu64 [r9], zmm8 + vmovdqu64 [r9+64], zmm9 + vmovdqu64 [r9+128], zmm10 + vmovdqu64 [r9+192], zmm11 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, [rcx+384] + vmovdqu64 zmm3, [rcx+448] + vpaddd zmm8, zmm0, zmm14 + vpaddd zmm9, zmm1, zmm14 + vpaddd zmm10, zmm2, zmm14 + vpaddd zmm11, zmm3, zmm14 + vpsrld zmm8, zmm8, 19 + vpsrld zmm9, zmm9, 19 + vpsrld zmm10, zmm10, 19 + vpsrld zmm11, zmm11, 19 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsrld zmm0, zmm8, 4 + vpsrld zmm1, zmm9, 4 + vpsrld zmm2, zmm10, 4 + vpsrld zmm3, zmm11, 4 + vpsubd zmm4, zmm4, zmm0 + vpsubd zmm5, zmm5, zmm1 + vpsubd zmm6, zmm6, zmm2 + vpsubd zmm7, zmm7, zmm3 + vpandd zmm8, zmm8, zmm15 + vpandd zmm9, zmm9, zmm15 + vpandd zmm10, zmm10, zmm15 + vpandd zmm11, zmm11, zmm15 + vmovdqu64 [r8+256], zmm4 + vmovdqu64 [r8+320], zmm5 + vmovdqu64 [r8+384], zmm6 + vmovdqu64 [r8+448], zmm7 + vmovdqu64 [r9+256], zmm8 + vmovdqu64 [r9+320], zmm9 + vmovdqu64 [r9+384], zmm10 + vmovdqu64 [r9+448], zmm11 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vpaddd zmm8, zmm0, zmm14 + vpaddd zmm9, zmm1, zmm14 + vpaddd zmm10, zmm2, zmm14 + vpaddd zmm11, zmm3, zmm14 + vpsrld zmm8, zmm8, 19 + vpsrld zmm9, zmm9, 19 + vpsrld zmm10, zmm10, 19 + vpsrld zmm11, zmm11, 19 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsrld zmm0, zmm8, 4 + vpsrld zmm1, zmm9, 4 + vpsrld zmm2, zmm10, 4 + vpsrld zmm3, zmm11, 4 + vpsubd zmm4, zmm4, zmm0 + vpsubd zmm5, zmm5, zmm1 + vpsubd zmm6, zmm6, zmm2 + vpsubd zmm7, zmm7, zmm3 + vpandd zmm8, zmm8, zmm15 + vpandd zmm9, zmm9, zmm15 + vpandd zmm10, zmm10, zmm15 + vpandd zmm11, zmm11, zmm15 + vmovdqu64 [r8+512], zmm4 + vmovdqu64 [r8+576], zmm5 + vmovdqu64 [r8+640], zmm6 + vmovdqu64 [r8+704], zmm7 + vmovdqu64 [r9+512], zmm8 + vmovdqu64 [r9+576], zmm9 + vmovdqu64 [r9+640], zmm10 + vmovdqu64 [r9+704], zmm11 + vmovdqu64 zmm0, [rcx+768] + vmovdqu64 zmm1, [rcx+832] + vmovdqu64 zmm2, [rcx+896] + vmovdqu64 zmm3, [rcx+960] + vpaddd zmm8, zmm0, zmm14 + vpaddd zmm9, zmm1, zmm14 + vpaddd zmm10, zmm2, zmm14 + vpaddd zmm11, zmm3, zmm14 + vpsrld zmm8, zmm8, 19 + vpsrld zmm9, zmm9, 19 + vpsrld zmm10, zmm10, 19 + vpsrld zmm11, zmm11, 19 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsubd zmm4, zmm12, zmm4 + vpsubd zmm5, zmm12, zmm5 + vpsubd zmm6, zmm12, zmm6 + vpsubd zmm7, zmm12, zmm7 + vpsrld zmm4, zmm4, 31 + vpsrld zmm5, zmm5, 31 + vpsrld zmm6, zmm6, 31 + vpsrld zmm7, zmm7, 31 + vpaddd zmm8, zmm8, zmm4 + vpaddd zmm9, zmm9, zmm5 + vpaddd zmm10, zmm10, zmm6 + vpaddd zmm11, zmm11, zmm7 + vpmulld zmm4, zmm8, zmm13 + vpmulld zmm5, zmm9, zmm13 + vpmulld zmm6, zmm10, zmm13 + vpmulld zmm7, zmm11, zmm13 + vpsubd zmm4, zmm0, zmm4 + vpsubd zmm5, zmm1, zmm5 + vpsubd zmm6, zmm2, zmm6 + vpsubd zmm7, zmm3, zmm7 + vpsrld zmm0, zmm8, 4 + vpsrld zmm1, zmm9, 4 + vpsrld zmm2, zmm10, 4 + vpsrld zmm3, zmm11, 4 + vpsubd zmm4, zmm4, zmm0 + vpsubd zmm5, zmm5, zmm1 + vpsubd zmm6, zmm6, zmm2 + vpsubd zmm7, zmm7, zmm3 + vpandd zmm8, zmm8, zmm15 + vpandd zmm9, zmm9, zmm15 + vpandd zmm10, zmm10, zmm15 + vpandd zmm11, zmm11, zmm15 + vmovdqu64 [r8+768], zmm4 + vmovdqu64 [r8+832], zmm5 + vmovdqu64 [r8+896], zmm6 + vmovdqu64 [r8+960], zmm7 + vmovdqu64 [r9+768], zmm8 + vmovdqu64 [r9+832], zmm9 + vmovdqu64 [r9+896], zmm10 + vmovdqu64 [r9+960], zmm11 + add rcx, 1024 + add r8, 1024 + add r9, 1024 + sub rdx, 1 + jne L_mldsa_decompose_q32_avx512_start_256 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +wc_mldsa_decompose_q32_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_vec_check_low_avx512 PROC sub r8d, 1 movd xmm2, r8d neg r8d movd xmm3, r8d - vpbroadcastd ymm2, xmm2 - vpbroadcastd ymm3, xmm3 -L_mldsa_vec_check_low_vx2_start_256: - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+64] - vmovdqu ymm1, YMMWORD PTR [rcx+96] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+128] - vmovdqu ymm1, YMMWORD PTR [rcx+160] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+192] - vmovdqu ymm1, YMMWORD PTR [rcx+224] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+320] - vmovdqu ymm1, YMMWORD PTR [rcx+352] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+384] - vmovdqu ymm1, YMMWORD PTR [rcx+416] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+448] - vmovdqu ymm1, YMMWORD PTR [rcx+480] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 - mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + vpbroadcastd zmm2, xmm2 + vpbroadcastd zmm3, xmm3 +L_mldsa_vec_check_low_avx512_start_256: + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+576] - vmovdqu ymm1, YMMWORD PTR [rcx+608] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+128] + vmovdqu64 zmm1, [rcx+192] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+640] - vmovdqu ymm1, YMMWORD PTR [rcx+672] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+704] - vmovdqu ymm1, YMMWORD PTR [rcx+736] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+384] + vmovdqu64 zmm1, [rcx+448] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+832] - vmovdqu ymm1, YMMWORD PTR [rcx+864] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+640] + vmovdqu64 zmm1, [rcx+704] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+896] - vmovdqu ymm1, YMMWORD PTR [rcx+928] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+768] + vmovdqu64 zmm1, [rcx+832] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done - vmovdqu ymm0, YMMWORD PTR [rcx+960] - vmovdqu ymm1, YMMWORD PTR [rcx+992] - vpcmpgtd ymm4, ymm0, ymm2 - vpcmpgtd ymm5, ymm1, ymm2 - vpcmpgtd ymm6, ymm3, ymm0 - vpcmpgtd ymm7, ymm3, ymm1 - vpor ymm4, ymm4, ymm5 - vpor ymm6, ymm6, ymm7 - vpor ymm4, ymm4, ymm6 - vpmovmskb rax, ymm4 - cmp rax, 0 + jne L_mldsa_vec_check_low_avx512_done + vmovdqu64 zmm0, [rcx+896] + vmovdqu64 zmm1, [rcx+960] + vpcmpgtd k1, zmm0, zmm2 + vpcmpgtd k3, zmm1, zmm2 + vpcmpgtd k2, zmm3, zmm0 + vpcmpgtd k4, zmm3, zmm1 + korw k1, k1, k3 + korw k2, k2, k4 + korw k1, k1, k2 + kortestw k1, k1 mov rax, 0 - jne L_mldsa_vec_check_low_vx2_done + jne L_mldsa_vec_check_low_avx512_done add rcx, 1024 sub rdx, 1 - jne L_mldsa_vec_check_low_vx2_start_256 + jne L_mldsa_vec_check_low_avx512_start_256 mov rax, 1 -L_mldsa_vec_check_low_vx2_done: +L_mldsa_vec_check_low_avx512_done: + vzeroupper + ret +wc_mldsa_vec_check_low_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_poly_add_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rdx] + vmovdqu64 zmm9, [rdx+64] + vmovdqu64 zmm10, [rdx+128] + vmovdqu64 zmm11, [rdx+192] + vmovdqu64 zmm12, [rdx+256] + vmovdqu64 zmm13, [rdx+320] + vmovdqu64 zmm14, [rdx+384] + vmovdqu64 zmm15, [rdx+448] + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm1, zmm1, zmm9 + vpaddd zmm2, zmm2, zmm10 + vpaddd zmm3, zmm3, zmm11 + vpaddd zmm4, zmm4, zmm12 + vpaddd zmm5, zmm5, zmm13 + vpaddd zmm6, zmm6, zmm14 + vpaddd zmm7, zmm7, zmm15 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vmovdqu64 zmm8, [rdx+512] + vmovdqu64 zmm9, [rdx+576] + vmovdqu64 zmm10, [rdx+640] + vmovdqu64 zmm11, [rdx+704] + vmovdqu64 zmm12, [rdx+768] + vmovdqu64 zmm13, [rdx+832] + vmovdqu64 zmm14, [rdx+896] + vmovdqu64 zmm15, [rdx+960] + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm1, zmm1, zmm9 + vpaddd zmm2, zmm2, zmm10 + vpaddd zmm3, zmm3, zmm11 + vpaddd zmm4, zmm4, zmm12 + vpaddd zmm5, zmm5, zmm13 + vpaddd zmm6, zmm6, zmm14 + vpaddd zmm7, zmm7, zmm15 + vmovdqu64 [rcx+512], zmm0 + vmovdqu64 [rcx+576], zmm1 + vmovdqu64 [rcx+640], zmm2 + vmovdqu64 [rcx+704], zmm3 + vmovdqu64 [rcx+768], zmm4 + vmovdqu64 [rcx+832], zmm5 + vmovdqu64 [rcx+896], zmm6 + vmovdqu64 [rcx+960], zmm7 vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] - add rsp, 40 + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret -wc_mldsa_vec_check_low_avx2 ENDP +wc_mldsa_poly_add_avx512 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_poly_add_avx2 PROC +wc_mldsa_poly_sub_avx512 PROC sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 @@ -34305,134 +62295,71 @@ wc_mldsa_poly_add_avx2 PROC vmovdqu OWORD PTR [rsp+120], xmm13 vmovdqu OWORD PTR [rsp+136], xmm14 vmovdqu OWORD PTR [rsp+152], xmm15 - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vmovdqu ymm2, YMMWORD PTR [rcx+64] - vmovdqu ymm3, YMMWORD PTR [rcx+96] - vmovdqu ymm4, YMMWORD PTR [rcx+128] - vmovdqu ymm5, YMMWORD PTR [rcx+160] - vmovdqu ymm6, YMMWORD PTR [rcx+192] - vmovdqu ymm7, YMMWORD PTR [rcx+224] - vmovdqu ymm8, YMMWORD PTR [rdx] - vmovdqu ymm9, YMMWORD PTR [rdx+32] - vmovdqu ymm10, YMMWORD PTR [rdx+64] - vmovdqu ymm11, YMMWORD PTR [rdx+96] - vmovdqu ymm12, YMMWORD PTR [rdx+128] - vmovdqu ymm13, YMMWORD PTR [rdx+160] - vmovdqu ymm14, YMMWORD PTR [rdx+192] - vmovdqu ymm15, YMMWORD PTR [rdx+224] - vpaddd ymm0, ymm0, ymm8 - vpaddd ymm1, ymm1, ymm9 - vpaddd ymm2, ymm2, ymm10 - vpaddd ymm3, ymm3, ymm11 - vpaddd ymm4, ymm4, ymm12 - vpaddd ymm5, ymm5, ymm13 - vpaddd ymm6, ymm6, ymm14 - vpaddd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+32], ymm1 - vmovdqu YMMWORD PTR [rcx+64], ymm2 - vmovdqu YMMWORD PTR [rcx+96], ymm3 - vmovdqu YMMWORD PTR [rcx+128], ymm4 - vmovdqu YMMWORD PTR [rcx+160], ymm5 - vmovdqu YMMWORD PTR [rcx+192], ymm6 - vmovdqu YMMWORD PTR [rcx+224], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+352] - vmovdqu ymm4, YMMWORD PTR [rcx+384] - vmovdqu ymm5, YMMWORD PTR [rcx+416] - vmovdqu ymm6, YMMWORD PTR [rcx+448] - vmovdqu ymm7, YMMWORD PTR [rcx+480] - vmovdqu ymm8, YMMWORD PTR [rdx+256] - vmovdqu ymm9, YMMWORD PTR [rdx+288] - vmovdqu ymm10, YMMWORD PTR [rdx+320] - vmovdqu ymm11, YMMWORD PTR [rdx+352] - vmovdqu ymm12, YMMWORD PTR [rdx+384] - vmovdqu ymm13, YMMWORD PTR [rdx+416] - vmovdqu ymm14, YMMWORD PTR [rdx+448] - vmovdqu ymm15, YMMWORD PTR [rdx+480] - vpaddd ymm0, ymm0, ymm8 - vpaddd ymm1, ymm1, ymm9 - vpaddd ymm2, ymm2, ymm10 - vpaddd ymm3, ymm3, ymm11 - vpaddd ymm4, ymm4, ymm12 - vpaddd ymm5, ymm5, ymm13 - vpaddd ymm6, ymm6, ymm14 - vpaddd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+256], ymm0 - vmovdqu YMMWORD PTR [rcx+288], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+352], ymm3 - vmovdqu YMMWORD PTR [rcx+384], ymm4 - vmovdqu YMMWORD PTR [rcx+416], ymm5 - vmovdqu YMMWORD PTR [rcx+448], ymm6 - vmovdqu YMMWORD PTR [rcx+480], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vmovdqu ymm2, YMMWORD PTR [rcx+576] - vmovdqu ymm3, YMMWORD PTR [rcx+608] - vmovdqu ymm4, YMMWORD PTR [rcx+640] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+704] - vmovdqu ymm7, YMMWORD PTR [rcx+736] - vmovdqu ymm8, YMMWORD PTR [rdx+512] - vmovdqu ymm9, YMMWORD PTR [rdx+544] - vmovdqu ymm10, YMMWORD PTR [rdx+576] - vmovdqu ymm11, YMMWORD PTR [rdx+608] - vmovdqu ymm12, YMMWORD PTR [rdx+640] - vmovdqu ymm13, YMMWORD PTR [rdx+672] - vmovdqu ymm14, YMMWORD PTR [rdx+704] - vmovdqu ymm15, YMMWORD PTR [rdx+736] - vpaddd ymm0, ymm0, ymm8 - vpaddd ymm1, ymm1, ymm9 - vpaddd ymm2, ymm2, ymm10 - vpaddd ymm3, ymm3, ymm11 - vpaddd ymm4, ymm4, ymm12 - vpaddd ymm5, ymm5, ymm13 - vpaddd ymm6, ymm6, ymm14 - vpaddd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+512], ymm0 - vmovdqu YMMWORD PTR [rcx+544], ymm1 - vmovdqu YMMWORD PTR [rcx+576], ymm2 - vmovdqu YMMWORD PTR [rcx+608], ymm3 - vmovdqu YMMWORD PTR [rcx+640], ymm4 - vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+704], ymm6 - vmovdqu YMMWORD PTR [rcx+736], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vmovdqu ymm2, YMMWORD PTR [rcx+832] - vmovdqu ymm3, YMMWORD PTR [rcx+864] - vmovdqu ymm4, YMMWORD PTR [rcx+896] - vmovdqu ymm5, YMMWORD PTR [rcx+928] - vmovdqu ymm6, YMMWORD PTR [rcx+960] - vmovdqu ymm7, YMMWORD PTR [rcx+992] - vmovdqu ymm8, YMMWORD PTR [rdx+768] - vmovdqu ymm9, YMMWORD PTR [rdx+800] - vmovdqu ymm10, YMMWORD PTR [rdx+832] - vmovdqu ymm11, YMMWORD PTR [rdx+864] - vmovdqu ymm12, YMMWORD PTR [rdx+896] - vmovdqu ymm13, YMMWORD PTR [rdx+928] - vmovdqu ymm14, YMMWORD PTR [rdx+960] - vmovdqu ymm15, YMMWORD PTR [rdx+992] - vpaddd ymm0, ymm0, ymm8 - vpaddd ymm1, ymm1, ymm9 - vpaddd ymm2, ymm2, ymm10 - vpaddd ymm3, ymm3, ymm11 - vpaddd ymm4, ymm4, ymm12 - vpaddd ymm5, ymm5, ymm13 - vpaddd ymm6, ymm6, ymm14 - vpaddd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+768], ymm0 - vmovdqu YMMWORD PTR [rcx+800], ymm1 - vmovdqu YMMWORD PTR [rcx+832], ymm2 - vmovdqu YMMWORD PTR [rcx+864], ymm3 - vmovdqu YMMWORD PTR [rcx+896], ymm4 - vmovdqu YMMWORD PTR [rcx+928], ymm5 - vmovdqu YMMWORD PTR [rcx+960], ymm6 - vmovdqu YMMWORD PTR [rcx+992], ymm7 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rdx] + vmovdqu64 zmm9, [rdx+64] + vmovdqu64 zmm10, [rdx+128] + vmovdqu64 zmm11, [rdx+192] + vmovdqu64 zmm12, [rdx+256] + vmovdqu64 zmm13, [rdx+320] + vmovdqu64 zmm14, [rdx+384] + vmovdqu64 zmm15, [rdx+448] + vpsubd zmm0, zmm0, zmm8 + vpsubd zmm1, zmm1, zmm9 + vpsubd zmm2, zmm2, zmm10 + vpsubd zmm3, zmm3, zmm11 + vpsubd zmm4, zmm4, zmm12 + vpsubd zmm5, zmm5, zmm13 + vpsubd zmm6, zmm6, zmm14 + vpsubd zmm7, zmm7, zmm15 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vmovdqu64 zmm8, [rdx+512] + vmovdqu64 zmm9, [rdx+576] + vmovdqu64 zmm10, [rdx+640] + vmovdqu64 zmm11, [rdx+704] + vmovdqu64 zmm12, [rdx+768] + vmovdqu64 zmm13, [rdx+832] + vmovdqu64 zmm14, [rdx+896] + vmovdqu64 zmm15, [rdx+960] + vpsubd zmm0, zmm0, zmm8 + vpsubd zmm1, zmm1, zmm9 + vpsubd zmm2, zmm2, zmm10 + vpsubd zmm3, zmm3, zmm11 + vpsubd zmm4, zmm4, zmm12 + vpsubd zmm5, zmm5, zmm13 + vpsubd zmm6, zmm6, zmm14 + vpsubd zmm7, zmm7, zmm15 + vmovdqu64 [rcx+512], zmm0 + vmovdqu64 [rcx+576], zmm1 + vmovdqu64 [rcx+640], zmm2 + vmovdqu64 [rcx+704], zmm3 + vmovdqu64 [rcx+768], zmm4 + vmovdqu64 [rcx+832], zmm5 + vmovdqu64 [rcx+896], zmm6 + vmovdqu64 [rcx+960], zmm7 + vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] vmovdqu xmm8, OWORD PTR [rsp+40] @@ -34445,10 +62372,10 @@ wc_mldsa_poly_add_avx2 PROC vmovdqu xmm15, OWORD PTR [rsp+152] add rsp, 168 ret -wc_mldsa_poly_add_avx2 ENDP +wc_mldsa_poly_sub_avx512 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_poly_sub_avx2 PROC +wc_mldsa_poly_make_pos_avx512 PROC sub rsp, 168 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 @@ -34460,134 +62387,90 @@ wc_mldsa_poly_sub_avx2 PROC vmovdqu OWORD PTR [rsp+120], xmm13 vmovdqu OWORD PTR [rsp+136], xmm14 vmovdqu OWORD PTR [rsp+152], xmm15 - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vmovdqu ymm2, YMMWORD PTR [rcx+64] - vmovdqu ymm3, YMMWORD PTR [rcx+96] - vmovdqu ymm4, YMMWORD PTR [rcx+128] - vmovdqu ymm5, YMMWORD PTR [rcx+160] - vmovdqu ymm6, YMMWORD PTR [rcx+192] - vmovdqu ymm7, YMMWORD PTR [rcx+224] - vmovdqu ymm8, YMMWORD PTR [rdx] - vmovdqu ymm9, YMMWORD PTR [rdx+32] - vmovdqu ymm10, YMMWORD PTR [rdx+64] - vmovdqu ymm11, YMMWORD PTR [rdx+96] - vmovdqu ymm12, YMMWORD PTR [rdx+128] - vmovdqu ymm13, YMMWORD PTR [rdx+160] - vmovdqu ymm14, YMMWORD PTR [rdx+192] - vmovdqu ymm15, YMMWORD PTR [rdx+224] - vpsubd ymm0, ymm0, ymm8 - vpsubd ymm1, ymm1, ymm9 - vpsubd ymm2, ymm2, ymm10 - vpsubd ymm3, ymm3, ymm11 - vpsubd ymm4, ymm4, ymm12 - vpsubd ymm5, ymm5, ymm13 - vpsubd ymm6, ymm6, ymm14 - vpsubd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+32], ymm1 - vmovdqu YMMWORD PTR [rcx+64], ymm2 - vmovdqu YMMWORD PTR [rcx+96], ymm3 - vmovdqu YMMWORD PTR [rcx+128], ymm4 - vmovdqu YMMWORD PTR [rcx+160], ymm5 - vmovdqu YMMWORD PTR [rcx+192], ymm6 - vmovdqu YMMWORD PTR [rcx+224], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+352] - vmovdqu ymm4, YMMWORD PTR [rcx+384] - vmovdqu ymm5, YMMWORD PTR [rcx+416] - vmovdqu ymm6, YMMWORD PTR [rcx+448] - vmovdqu ymm7, YMMWORD PTR [rcx+480] - vmovdqu ymm8, YMMWORD PTR [rdx+256] - vmovdqu ymm9, YMMWORD PTR [rdx+288] - vmovdqu ymm10, YMMWORD PTR [rdx+320] - vmovdqu ymm11, YMMWORD PTR [rdx+352] - vmovdqu ymm12, YMMWORD PTR [rdx+384] - vmovdqu ymm13, YMMWORD PTR [rdx+416] - vmovdqu ymm14, YMMWORD PTR [rdx+448] - vmovdqu ymm15, YMMWORD PTR [rdx+480] - vpsubd ymm0, ymm0, ymm8 - vpsubd ymm1, ymm1, ymm9 - vpsubd ymm2, ymm2, ymm10 - vpsubd ymm3, ymm3, ymm11 - vpsubd ymm4, ymm4, ymm12 - vpsubd ymm5, ymm5, ymm13 - vpsubd ymm6, ymm6, ymm14 - vpsubd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+256], ymm0 - vmovdqu YMMWORD PTR [rcx+288], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+352], ymm3 - vmovdqu YMMWORD PTR [rcx+384], ymm4 - vmovdqu YMMWORD PTR [rcx+416], ymm5 - vmovdqu YMMWORD PTR [rcx+448], ymm6 - vmovdqu YMMWORD PTR [rcx+480], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vmovdqu ymm2, YMMWORD PTR [rcx+576] - vmovdqu ymm3, YMMWORD PTR [rcx+608] - vmovdqu ymm4, YMMWORD PTR [rcx+640] - vmovdqu ymm5, YMMWORD PTR [rcx+672] - vmovdqu ymm6, YMMWORD PTR [rcx+704] - vmovdqu ymm7, YMMWORD PTR [rcx+736] - vmovdqu ymm8, YMMWORD PTR [rdx+512] - vmovdqu ymm9, YMMWORD PTR [rdx+544] - vmovdqu ymm10, YMMWORD PTR [rdx+576] - vmovdqu ymm11, YMMWORD PTR [rdx+608] - vmovdqu ymm12, YMMWORD PTR [rdx+640] - vmovdqu ymm13, YMMWORD PTR [rdx+672] - vmovdqu ymm14, YMMWORD PTR [rdx+704] - vmovdqu ymm15, YMMWORD PTR [rdx+736] - vpsubd ymm0, ymm0, ymm8 - vpsubd ymm1, ymm1, ymm9 - vpsubd ymm2, ymm2, ymm10 - vpsubd ymm3, ymm3, ymm11 - vpsubd ymm4, ymm4, ymm12 - vpsubd ymm5, ymm5, ymm13 - vpsubd ymm6, ymm6, ymm14 - vpsubd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+512], ymm0 - vmovdqu YMMWORD PTR [rcx+544], ymm1 - vmovdqu YMMWORD PTR [rcx+576], ymm2 - vmovdqu YMMWORD PTR [rcx+608], ymm3 - vmovdqu YMMWORD PTR [rcx+640], ymm4 - vmovdqu YMMWORD PTR [rcx+672], ymm5 - vmovdqu YMMWORD PTR [rcx+704], ymm6 - vmovdqu YMMWORD PTR [rcx+736], ymm7 - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vmovdqu ymm2, YMMWORD PTR [rcx+832] - vmovdqu ymm3, YMMWORD PTR [rcx+864] - vmovdqu ymm4, YMMWORD PTR [rcx+896] - vmovdqu ymm5, YMMWORD PTR [rcx+928] - vmovdqu ymm6, YMMWORD PTR [rcx+960] - vmovdqu ymm7, YMMWORD PTR [rcx+992] - vmovdqu ymm8, YMMWORD PTR [rdx+768] - vmovdqu ymm9, YMMWORD PTR [rdx+800] - vmovdqu ymm10, YMMWORD PTR [rdx+832] - vmovdqu ymm11, YMMWORD PTR [rdx+864] - vmovdqu ymm12, YMMWORD PTR [rdx+896] - vmovdqu ymm13, YMMWORD PTR [rdx+928] - vmovdqu ymm14, YMMWORD PTR [rdx+960] - vmovdqu ymm15, YMMWORD PTR [rdx+992] - vpsubd ymm0, ymm0, ymm8 - vpsubd ymm1, ymm1, ymm9 - vpsubd ymm2, ymm2, ymm10 - vpsubd ymm3, ymm3, ymm11 - vpsubd ymm4, ymm4, ymm12 - vpsubd ymm5, ymm5, ymm13 - vpsubd ymm6, ymm6, ymm14 - vpsubd ymm7, ymm7, ymm15 - vmovdqu YMMWORD PTR [rcx+768], ymm0 - vmovdqu YMMWORD PTR [rcx+800], ymm1 - vmovdqu YMMWORD PTR [rcx+832], ymm2 - vmovdqu YMMWORD PTR [rcx+864], ymm3 - vmovdqu YMMWORD PTR [rcx+896], ymm4 - vmovdqu YMMWORD PTR [rcx+928], ymm5 - vmovdqu YMMWORD PTR [rcx+960], ymm6 - vmovdqu YMMWORD PTR [rcx+992], ymm7 + mov rdx, 8380417 + vmovd xmm16, edx + vpbroadcastd zmm16, xmm16 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpsrad zmm8, zmm0, 31 + vpsrad zmm9, zmm1, 31 + vpsrad zmm10, zmm2, 31 + vpsrad zmm11, zmm3, 31 + vpsrad zmm12, zmm4, 31 + vpsrad zmm13, zmm5, 31 + vpsrad zmm14, zmm6, 31 + vpsrad zmm15, zmm7, 31 + vpandd zmm8, zmm8, zmm16 + vpandd zmm9, zmm9, zmm16 + vpandd zmm10, zmm10, zmm16 + vpandd zmm11, zmm11, zmm16 + vpandd zmm12, zmm12, zmm16 + vpandd zmm13, zmm13, zmm16 + vpandd zmm14, zmm14, zmm16 + vpandd zmm15, zmm15, zmm16 + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm1, zmm1, zmm9 + vpaddd zmm2, zmm2, zmm10 + vpaddd zmm3, zmm3, zmm11 + vpaddd zmm4, zmm4, zmm12 + vpaddd zmm5, zmm5, zmm13 + vpaddd zmm6, zmm6, zmm14 + vpaddd zmm7, zmm7, zmm15 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpsrad zmm8, zmm0, 31 + vpsrad zmm9, zmm1, 31 + vpsrad zmm10, zmm2, 31 + vpsrad zmm11, zmm3, 31 + vpsrad zmm12, zmm4, 31 + vpsrad zmm13, zmm5, 31 + vpsrad zmm14, zmm6, 31 + vpsrad zmm15, zmm7, 31 + vpandd zmm8, zmm8, zmm16 + vpandd zmm9, zmm9, zmm16 + vpandd zmm10, zmm10, zmm16 + vpandd zmm11, zmm11, zmm16 + vpandd zmm12, zmm12, zmm16 + vpandd zmm13, zmm13, zmm16 + vpandd zmm14, zmm14, zmm16 + vpandd zmm15, zmm15, zmm16 + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm1, zmm1, zmm9 + vpaddd zmm2, zmm2, zmm10 + vpaddd zmm3, zmm3, zmm11 + vpaddd zmm4, zmm4, zmm12 + vpaddd zmm5, zmm5, zmm13 + vpaddd zmm6, zmm6, zmm14 + vpaddd zmm7, zmm7, zmm15 + vmovdqu64 [rcx+512], zmm0 + vmovdqu64 [rcx+576], zmm1 + vmovdqu64 [rcx+640], zmm2 + vmovdqu64 [rcx+704], zmm3 + vmovdqu64 [rcx+768], zmm4 + vmovdqu64 [rcx+832], zmm5 + vmovdqu64 [rcx+896], zmm6 + vmovdqu64 [rcx+960], zmm7 + vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] vmovdqu xmm8, OWORD PTR [rsp+40] @@ -34600,184 +62483,525 @@ wc_mldsa_poly_sub_avx2 PROC vmovdqu xmm15, OWORD PTR [rsp+152] add rsp, 168 ret -wc_mldsa_poly_sub_avx2 ENDP +wc_mldsa_poly_make_pos_avx512 ENDP _TEXT ENDS +ENDIF +ENDIF +IFDEF WOLFSSL_HAVE_MLDSA +IFNDEF NO_AVX512_SUPPORT +IFNDEF NO_AVX512_VBMI_SUPPORT +IFNDEF HAVE_INTEL_AVX512_VBMI +HAVE_INTEL_AVX512_VBMI = 1 +ENDIF +ENDIF +ENDIF +IFDEF HAVE_INTEL_AVX512_VBMI +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_avx512_vbmi_vs DWORD 00000000h, 00000006h, 0000000ch, 00000012h + DWORD 00000000h, 00000006h, 0000000ch, 00000012h + DWORD 00000000h, 00000006h, 0000000ch, 00000012h + DWORD 00000000h, 00000006h, 0000000ch, 00000012h +ptr_L_mldsa_encode_w1_88_avx512_vbmi_vs QWORD L_mldsa_encode_w1_88_avx512_vbmi_vs +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_avx512_vbmi_idx_a BYTE 00h, 05h, 0ah, 10h, 15h, 1ah, 20h, 25h + BYTE 2ah, 30h, 35h, 3ah, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h +ptr_L_mldsa_encode_w1_88_avx512_vbmi_idx_a QWORD L_mldsa_encode_w1_88_avx512_vbmi_idx_a +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_w1_88_avx512_vbmi_idx_b BYTE 04h, 09h, 0eh, 14h, 19h, 1eh, 24h, 29h + BYTE 2eh, 34h, 39h, 3eh, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h +ptr_L_mldsa_encode_w1_88_avx512_vbmi_idx_b QWORD L_mldsa_encode_w1_88_avx512_vbmi_idx_b +_DATA ENDS _TEXT SEGMENT READONLY PARA -wc_mldsa_poly_make_pos_avx2 PROC - sub rsp, 72 +wc_mldsa_encode_w1_88_avx512_vbmi PROC + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_encode_w1_88_avx512_vbmi_vs + vmovdqu64 zmm2, ZMMWORD PTR L_mldsa_encode_w1_88_avx512_vbmi_idx_a + vmovdqu64 zmm3, ZMMWORD PTR L_mldsa_encode_w1_88_avx512_vbmi_idx_b + mov eax, 7 + kmovw k1, eax + vmovdqu64 zmm0, [rcx] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+64] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+12]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+128] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+24]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+192] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+36]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+256] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+48]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+320] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+60]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+384] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+72]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+448] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+84]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+512] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+96]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+576] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+108]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+640] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+120]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+704] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+132]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+768] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+144]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+832] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+156]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+896] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+168]{k1}, zmm0 + vmovdqu64 zmm0, [rcx+960] + vpsllvd zmm0, zmm0, zmm4 + vpermb zmm1, zmm3, zmm0 + vpermb zmm0, zmm2, zmm0 + vpord zmm0, zmm0, zmm1 + vmovdqu32 [rdx+180]{k1}, zmm0 + vzeroupper + ret +wc_mldsa_encode_w1_88_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_half_m1 DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_half_m1 QWORD L_mldsa_encode_t0_t1_avx512_vbmi_half_m1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_half DWORD 00001000h, 00001000h, 00001000h, 00001000h + DWORD 00001000h, 00001000h, 00001000h, 00001000h + DWORD 00001000h, 00001000h, 00001000h, 00001000h + DWORD 00001000h, 00001000h, 00001000h, 00001000h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_half QWORD L_mldsa_encode_t0_t1_avx512_vbmi_half +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0 BYTE 00h, 01h, 05h, 06h, 09h, 0dh, 0eh, 11h + BYTE 12h, 15h, 19h, 1ah, 1dh, 20h, 21h, 25h + BYTE 26h, 29h, 2dh, 2eh, 31h, 32h, 35h, 39h + BYTE 3ah, 3dh, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0 QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1 BYTE 03h, 04h, 03h, 08h, 0ch, 03h, 10h, 03h + BYTE 14h, 18h, 03h, 1ch, 03h, 03h, 24h, 03h + BYTE 28h, 2ch, 03h, 30h, 03h, 34h, 38h, 03h + BYTE 3ch, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1 QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs DWORD 00000000h, 00000005h, 00000002h, 00000007h + DWORD 00000004h, 00000001h, 00000006h, 00000003h + DWORD 00000000h, 00000005h, 00000002h, 00000007h + DWORD 00000004h, 00000001h, 00000006h, 00000003h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0 BYTE 00h, 01h, 05h, 09h, 0dh, 10h, 11h, 15h + BYTE 19h, 1dh, 20h, 21h, 25h, 29h, 2dh, 30h + BYTE 31h, 35h, 39h, 3dh, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0 QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1 BYTE 03h, 04h, 08h, 0ch, 03h, 03h, 14h, 18h + BYTE 1ch, 03h, 03h, 24h, 28h, 2ch, 03h, 03h + BYTE 34h, 38h, 3ch, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h + BYTE 03h, 03h, 03h, 03h, 03h, 03h, 03h, 03h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1 QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs DWORD 00000000h, 00000002h, 00000004h, 00000006h + DWORD 00000000h, 00000002h, 00000004h, 00000006h + DWORD 00000000h, 00000002h, 00000004h, 00000006h + DWORD 00000000h, 00000002h, 00000004h, 00000006h +ptr_L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs QWORD L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs +_DATA ENDS +_TEXT SEGMENT READONLY PARA +wc_mldsa_encode_t0_t1_avx512_vbmi PROC + sub rsp, 104 vmovdqu OWORD PTR [rsp+8], xmm6 vmovdqu OWORD PTR [rsp+24], xmm7 vmovdqu OWORD PTR [rsp+40], xmm8 vmovdqu OWORD PTR [rsp+56], xmm9 - vpxor ymm8, ymm8, ymm8 - vmovdqu ymm9, YMMWORD PTR mldsa_q - vmovdqu ymm0, YMMWORD PTR [rcx] - vmovdqu ymm1, YMMWORD PTR [rcx+32] - vmovdqu ymm2, YMMWORD PTR [rcx+64] - vmovdqu ymm3, YMMWORD PTR [rcx+96] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx], ymm0 - vmovdqu YMMWORD PTR [rcx+32], ymm1 - vmovdqu YMMWORD PTR [rcx+64], ymm2 - vmovdqu YMMWORD PTR [rcx+96], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+128] - vmovdqu ymm1, YMMWORD PTR [rcx+160] - vmovdqu ymm2, YMMWORD PTR [rcx+192] - vmovdqu ymm3, YMMWORD PTR [rcx+224] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+128], ymm0 - vmovdqu YMMWORD PTR [rcx+160], ymm1 - vmovdqu YMMWORD PTR [rcx+192], ymm2 - vmovdqu YMMWORD PTR [rcx+224], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+256] - vmovdqu ymm1, YMMWORD PTR [rcx+288] - vmovdqu ymm2, YMMWORD PTR [rcx+320] - vmovdqu ymm3, YMMWORD PTR [rcx+352] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+256], ymm0 - vmovdqu YMMWORD PTR [rcx+288], ymm1 - vmovdqu YMMWORD PTR [rcx+320], ymm2 - vmovdqu YMMWORD PTR [rcx+352], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+384] - vmovdqu ymm1, YMMWORD PTR [rcx+416] - vmovdqu ymm2, YMMWORD PTR [rcx+448] - vmovdqu ymm3, YMMWORD PTR [rcx+480] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+384], ymm0 - vmovdqu YMMWORD PTR [rcx+416], ymm1 - vmovdqu YMMWORD PTR [rcx+448], ymm2 - vmovdqu YMMWORD PTR [rcx+480], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+512] - vmovdqu ymm1, YMMWORD PTR [rcx+544] - vmovdqu ymm2, YMMWORD PTR [rcx+576] - vmovdqu ymm3, YMMWORD PTR [rcx+608] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+512], ymm0 - vmovdqu YMMWORD PTR [rcx+544], ymm1 - vmovdqu YMMWORD PTR [rcx+576], ymm2 - vmovdqu YMMWORD PTR [rcx+608], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+640] - vmovdqu ymm1, YMMWORD PTR [rcx+672] - vmovdqu ymm2, YMMWORD PTR [rcx+704] - vmovdqu ymm3, YMMWORD PTR [rcx+736] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+640], ymm0 - vmovdqu YMMWORD PTR [rcx+672], ymm1 - vmovdqu YMMWORD PTR [rcx+704], ymm2 - vmovdqu YMMWORD PTR [rcx+736], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+768] - vmovdqu ymm1, YMMWORD PTR [rcx+800] - vmovdqu ymm2, YMMWORD PTR [rcx+832] - vmovdqu ymm3, YMMWORD PTR [rcx+864] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+768], ymm0 - vmovdqu YMMWORD PTR [rcx+800], ymm1 - vmovdqu YMMWORD PTR [rcx+832], ymm2 - vmovdqu YMMWORD PTR [rcx+864], ymm3 - vmovdqu ymm0, YMMWORD PTR [rcx+896] - vmovdqu ymm1, YMMWORD PTR [rcx+928] - vmovdqu ymm2, YMMWORD PTR [rcx+960] - vmovdqu ymm3, YMMWORD PTR [rcx+992] - vpcmpgtd ymm4, ymm8, ymm0 - vpcmpgtd ymm5, ymm8, ymm1 - vpcmpgtd ymm6, ymm8, ymm2 - vpcmpgtd ymm7, ymm8, ymm3 - vpand ymm4, ymm4, ymm9 - vpand ymm5, ymm5, ymm9 - vpand ymm6, ymm6, ymm9 - vpand ymm7, ymm7, ymm9 - vpaddd ymm0, ymm0, ymm4 - vpaddd ymm1, ymm1, ymm5 - vpaddd ymm2, ymm2, ymm6 - vpaddd ymm3, ymm3, ymm7 - vmovdqu YMMWORD PTR [rcx+896], ymm0 - vmovdqu YMMWORD PTR [rcx+928], ymm1 - vmovdqu YMMWORD PTR [rcx+960], ymm2 - vmovdqu YMMWORD PTR [rcx+992], ymm3 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu64 zmm4, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_half_m1 + vmovdqu64 zmm5, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_half + vmovdqu64 zmm6, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t0_vs + vmovdqu64 zmm7, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t1_vs + vmovdqu64 zmm8, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx0 + vmovdqu64 zmm9, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t0_idx1 + vmovdqu64 zmm10, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx0 + vmovdqu64 zmm11, ZMMWORD PTR L_mldsa_encode_t0_t1_avx512_vbmi_t1_idx1 + mov eax, 67108863 + kmovd k1, eax + mov eax, 1048575 + kmovd k2, eax + vmovdqu64 zmm0, [rcx] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+64] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+26]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+20]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+128] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+52]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+40]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+192] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+78]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+60]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+256] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+104]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+80]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+320] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+130]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+100]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+384] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+156]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+120]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+448] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+182]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+140]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+512] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+208]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+160]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+576] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+234]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+180]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+640] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+260]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+200]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+704] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+286]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+220]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+768] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+312]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+240]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+832] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+338]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+260]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+896] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+364]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+280]{k2}, zmm0 + vmovdqu64 zmm0, [rcx+960] + vpaddd zmm2, zmm0, zmm4 + vpsrld zmm2, zmm2, 13 + vpslld zmm1, zmm2, 13 + vpsubd zmm1, zmm0, zmm1 + vpsubd zmm1, zmm5, zmm1 + vpsllvd zmm1, zmm1, zmm6 + vpermb zmm0, zmm8, zmm1 + vpermb zmm3, zmm9, zmm1 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [rdx+390]{k1}, zmm0 + vpsllvd zmm2, zmm2, zmm7 + vpermb zmm0, zmm10, zmm2 + vpermb zmm3, zmm11, zmm2 + vpord zmm0, zmm0, zmm3 + vmovdqu8 [r8+300]{k2}, zmm0 + vzeroupper vmovdqu xmm6, OWORD PTR [rsp+8] vmovdqu xmm7, OWORD PTR [rsp+24] vmovdqu xmm8, OWORD PTR [rsp+40] vmovdqu xmm9, OWORD PTR [rsp+56] - add rsp, 72 + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 ret -wc_mldsa_poly_make_pos_avx2 ENDP +wc_mldsa_encode_t0_t1_avx512_vbmi ENDP _TEXT ENDS ENDIF ENDIF diff --git a/wolfcrypt/src/wc_mlkem_poly.c b/wolfcrypt/src/wc_mlkem_poly.c index 9737f54f1a..5652841477 100644 --- a/wolfcrypt/src/wc_mlkem_poly.c +++ b/wolfcrypt/src/wc_mlkem_poly.c @@ -1870,7 +1870,7 @@ void mlkem_keygen(sword16* s, sword16* t, sword16* e, const sword16* a, int k) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { /* Alg 13: Steps 16-18 */ mlkem_keygen_avx512(s, t, e, a, k); RESTORE_VECTOR_REGISTERS(); @@ -2083,7 +2083,7 @@ void mlkem_encapsulate(const sword16* pub, sword16* u, sword16* v, { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_encapsulate_avx512(pub, u, v, a, y, e1, e2, m, k); RESTORE_VECTOR_REGISTERS(); } @@ -2286,7 +2286,7 @@ void mlkem_decapsulate(const sword16* s, sword16* w, sword16* u, { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decapsulate_avx512(s, w, u, v, k); RESTORE_VECTOR_REGISTERS(); } @@ -2324,7 +2324,7 @@ void mlkem_decapsulate(const sword16* s, sword16* w, sword16* u, static WC_INLINE unsigned int mlkem_rej_uniform_n_ins(sword16* p, unsigned int len, const byte* r, unsigned int rLen) { - if (IS_INTEL_AVX512(cpuid_flags)) { + if (USE_INTEL_AVX512(cpuid_flags)) { #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI2 #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI if (IS_INTEL_AVX512_VBMI(cpuid_flags) && @@ -2348,7 +2348,7 @@ static WC_INLINE unsigned int mlkem_rej_uniform_n_ins(sword16* p, static WC_INLINE unsigned int mlkem_rej_uniform_ins(sword16* p, unsigned int len, const byte* r, unsigned int rLen) { - if (IS_INTEL_AVX512(cpuid_flags)) { + if (USE_INTEL_AVX512(cpuid_flags)) { #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI2 #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI if (IS_INTEL_AVX512_VBMI(cpuid_flags) && @@ -2380,7 +2380,7 @@ static WC_INLINE unsigned int mlkem_rej_uniform_ins(sword16* p, static WC_INLINE void mlkem_redistribute_##N##_rand_ins(const word64* s, \ byte* r0, byte* r1, byte* r2, byte* r3) \ { \ - if (IS_INTEL_AVX512(cpuid_flags)) { \ + if (USE_INTEL_AVX512(cpuid_flags)) { \ mlkem_redistribute_##N##_rand_avx512(s, r0, r1, r2, r3); \ return; \ } \ @@ -2401,7 +2401,7 @@ MLKEM_REDIST_INS(21) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 static WC_INLINE void mlkem_cbd_eta2_ins(sword16* p, const byte* r) { - if (IS_INTEL_AVX512(cpuid_flags)) { + if (USE_INTEL_AVX512(cpuid_flags)) { mlkem_cbd_eta2_avx512(p, r); return; } @@ -2409,7 +2409,7 @@ static WC_INLINE void mlkem_cbd_eta2_ins(sword16* p, const byte* r) } static WC_INLINE void mlkem_cbd_eta3_ins(sword16* p, const byte* r) { - if (IS_INTEL_AVX512(cpuid_flags)) { + if (USE_INTEL_AVX512(cpuid_flags)) { mlkem_cbd_eta3_avx512(p, r); return; } @@ -4015,7 +4015,7 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k2_avx512(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); } @@ -4041,7 +4041,7 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k3_avx512(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); } @@ -4067,7 +4067,7 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k4_avx512(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); } @@ -5435,7 +5435,7 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k2_avx512(prf, vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); } @@ -5466,7 +5466,7 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k3_avx512(vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); } @@ -5493,7 +5493,7 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k4_avx512(prf, vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); } @@ -5602,7 +5602,7 @@ int mlkem_cmp(const byte* a, const byte* b, int sz) #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { fail = mlkem_cmp_avx512(a, b, sz); RESTORE_VECTOR_REGISTERS(); } @@ -5900,7 +5900,7 @@ void mlkem_vec_compress_10(byte* r, sword16* v, unsigned int k) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_10_avx512_vbmi(r, v, (int)k); @@ -5909,7 +5909,7 @@ void mlkem_vec_compress_10(byte* r, sword16* v, unsigned int k) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_10_avx512(r, v, (int)k); RESTORE_VECTOR_REGISTERS(); } @@ -6014,7 +6014,7 @@ void mlkem_vec_compress_11(byte* r, sword16* v) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_11_avx512(r, v, 4); RESTORE_VECTOR_REGISTERS(); } @@ -6127,7 +6127,7 @@ void mlkem_vec_decompress_10(sword16* v, const byte* b, unsigned int k) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_10_avx512_vbmi(v, b, (int)k); @@ -6136,7 +6136,7 @@ void mlkem_vec_decompress_10(sword16* v, const byte* b, unsigned int k) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_10_avx512(v, b, (int)k); RESTORE_VECTOR_REGISTERS(); } @@ -6231,7 +6231,7 @@ void mlkem_vec_decompress_11(sword16* v, const byte* b) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_11_avx512_vbmi(v, b, 4); @@ -6240,7 +6240,7 @@ void mlkem_vec_decompress_11(sword16* v, const byte* b) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_11_avx512(v, b, 4); RESTORE_VECTOR_REGISTERS(); } @@ -6416,7 +6416,7 @@ void mlkem_compress_4(byte* b, sword16* p) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_4_avx512_vbmi(b, p); @@ -6425,7 +6425,7 @@ void mlkem_compress_4(byte* b, sword16* p) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_4_avx512(b, p); RESTORE_VECTOR_REGISTERS(); } @@ -6510,7 +6510,7 @@ void mlkem_compress_5(byte* b, sword16* p) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_5_avx512_vbmi(b, p); @@ -6519,7 +6519,7 @@ void mlkem_compress_5(byte* b, sword16* p) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_5_avx512(b, p); RESTORE_VECTOR_REGISTERS(); } @@ -6596,7 +6596,7 @@ void mlkem_decompress_4(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_4_avx512(p, b); RESTORE_VECTOR_REGISTERS(); } @@ -6682,7 +6682,7 @@ void mlkem_decompress_5(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_5_avx512(p, b); RESTORE_VECTOR_REGISTERS(); } @@ -6766,7 +6766,7 @@ void mlkem_from_msg(sword16* p, const byte* msg) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_from_msg_avx512(p, msg); RESTORE_VECTOR_REGISTERS(); } @@ -6874,7 +6874,7 @@ void mlkem_to_msg(byte* msg, sword16* p) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { /* Convert the polynomial into an array of bytes (message). */ mlkem_to_msg_avx512(msg, p); RESTORE_VECTOR_REGISTERS(); @@ -6969,7 +6969,7 @@ void mlkem_from_bytes(sword16* p, const byte* b, int k) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; @@ -6985,7 +6985,7 @@ void mlkem_from_bytes(sword16* p, const byte* b, int k) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; for (i = 0; i < k; i++) { @@ -7064,7 +7064,7 @@ void mlkem_to_bytes(byte* b, sword16* p, int k) { #ifdef USE_INTEL_SPEEDUP #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI - if (IS_INTEL_AVX512(cpuid_flags) && + if (USE_INTEL_AVX512(cpuid_flags) && IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; @@ -7080,7 +7080,7 @@ void mlkem_to_bytes(byte* b, sword16* p, int k) else #endif #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 - if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (USE_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; for (i = 0; i < k; i++) { diff --git a/wolfssl/wolfcrypt/cpuid.h b/wolfssl/wolfcrypt/cpuid.h index 65e48f2556..64758cce7b 100644 --- a/wolfssl/wolfcrypt/cpuid.h +++ b/wolfssl/wolfcrypt/cpuid.h @@ -83,6 +83,9 @@ typedef word32 cpuid_flags_t; #define CPUID_AVX512_IFMA 0x10000 /* AVX-512 IFMA (vpmadd52luq/huq) */ #define CPUID_AVX512_VL 0x20000 /* AVX-512 at 128 and 256 bits */ #define CPUID_AVX512_DQ 0x40000 /* AVX-512 DQ (vpmullq etc.) */ + /* AVX-512 Byte and Word: byte/word instructions at 512-bit width + * (vpshufb, vpaddw, vpmulhw, vpackusdw, ... on zmm). */ + #define CPUID_AVX512_BW 0x80000 #define IS_INTEL_AVX1(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX1) #define IS_INTEL_AVX2(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX2) @@ -106,6 +109,15 @@ typedef word32 cpuid_flags_t; (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512_VL) #define IS_INTEL_AVX512_DQ(f) \ (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512_DQ) + #define IS_INTEL_AVX512_BW(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512_BW) + /* Safe to dispatch to wolfSSL's AVX512 assembly: every algorithm using it + * (ML-DSA, ML-KEM, FrodoKEM) works on 8- or 16-bit lanes at 512-bit width + * - vpshufb, vpaddw, vpsubw, vpmulhw, vpmullw, vpackusdw, vpmaddwd, ... - + * which are AVX512BW, not AVX512F. IS_INTEL_AVX512() is the F bit alone + * and is not sufficient on its own. */ + #define USE_INTEL_AVX512(f) \ + (IS_INTEL_AVX512(f) && IS_INTEL_AVX512_BW(f)) #define IS_CPU_INTEL(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_INTEL) #define IS_CPU_AMD(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AMD) diff --git a/wolfssl/wolfcrypt/sha3.h b/wolfssl/wolfcrypt/sha3.h index 68d79e6188..896557a3a4 100644 --- a/wolfssl/wolfcrypt/sha3.h +++ b/wolfssl/wolfcrypt/sha3.h @@ -390,6 +390,24 @@ WOLFSSL_LOCAL void BlockSha3(word64 *s); WOLFSSL_LOCAL void sha3_blocksx4_avx2(word64* s); #endif #elif defined(USE_INTEL_SPEEDUP) + /* Choose between the single-instance AVX2 and BMI2 Keccak-f[1600] block + * functions. Measured (Ethereum "Optimizing Keccak"; OpenSSL + * keccak1600-x86_64.pl): AVX2 is ~13-17% faster than BMI2 on Intel + * Haswell..Skylake, tied on Ice Lake, but ~2x SLOWER on AMD Zen, so AVX2 + * is Intel-only. (Single-stream AVX-512 is vpermt2q-bound and slower + * than BMI2 everywhere measured, so it is not built.) + * Every caller of sha3_block_avx2()/sha3_block_n_avx2() must select with + * this and not with IS_INTEL_AVX2() alone. + * Overrides: WOLFSSL_SHA3_AVX2 forces AVX2 on any vendor with it; + * WOLFSSL_SHA3_NO_AVX2 never uses AVX2. */ +#if defined(WOLFSSL_SHA3_NO_AVX2) + #define SHA3_USE_AVX2(f) 0 +#elif defined(WOLFSSL_SHA3_AVX2) + #define SHA3_USE_AVX2(f) IS_INTEL_AVX2(f) +#else + #define SHA3_USE_AVX2(f) (IS_INTEL_AVX2(f) && IS_CPU_INTEL(f)) +#endif + WOLFSSL_LOCAL void sha3_block_n_bmi2(word64* s, const byte* data, word32 n, word64 c); WOLFSSL_LOCAL void sha3_block_bmi2(word64* s); @@ -405,6 +423,8 @@ WOLFSSL_LOCAL void BlockSha3(word64 *s); WOLFSSL_LOCAL void sha3_blocksx8_avx512(word64* s); WOLFSSL_LOCAL void sha3_128_blocksx8_seed_avx512(word64* s, byte* seed); WOLFSSL_LOCAL void sha3_256_blocksx8_seed_avx512(word64* s, byte* seed); + /* 64-byte seed variant - absorbs state words 0..7, nonce in word 8. */ + WOLFSSL_LOCAL void sha3_256_blocksx8_seed_64_avx512(word64* s, byte* seed); #endif WOLFSSL_LOCAL void sha3_128_blocksx4_seed_avx2(word64* s, byte* seed); diff --git a/wolfssl/wolfcrypt/wc_mldsa.h b/wolfssl/wolfcrypt/wc_mldsa.h index 775f12f375..aa54101cd9 100644 --- a/wolfssl/wolfcrypt/wc_mldsa.h +++ b/wolfssl/wolfcrypt/wc_mldsa.h @@ -859,9 +859,27 @@ WOLFSSL_API int wc_MlDsaKey_PrivateKeyToDer(wc_MlDsaKey* key, byte* output, #endif /* WOLFSSL_MLDSA_NO_ASN1 */ #ifdef USE_INTEL_SPEEDUP +/* AVX512 assembly for ML-DSA is built (and dispatched at runtime on capable + * CPUs) whenever the Intel speedups are enabled and AVX512 is not opted out. + * Matches the HAVE_INTEL_AVX512 guard around the generated assembly. */ +#ifndef NO_AVX512_SUPPORT + #define WOLFSSL_MLDSA_HAVE_INTEL_AVX512 + /* AVX512VBMI (vpermb) functions are built (matching the auto-enabled + * HAVE_INTEL_AVX512_VBMI guard around the generated assembly) and + * dispatched at runtime when CPUID reports VBMI. Opt out with + * NO_AVX512_VBMI_SUPPORT if the toolchain's assembler cannot emit VBMI. + * Nested here because the VBMI routines are AVX512 code: opting out of + * AVX512 must drop them too. */ + #ifndef NO_AVX512_VBMI_SUPPORT + #define WOLFSSL_MLDSA_HAVE_INTEL_AVX512_VBMI + #endif +#endif + WOLFSSL_LOCAL void wc_mldsa_poly_red_avx2(sword32* a); WOLFSSL_LOCAL void wc_mldsa_ntt_avx2(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_ntt_small_avx2(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_ntt_small_full_avx2(sword32* r); WOLFSSL_LOCAL void wc_mldsa_ntt_full_avx2(sword32* r); WOLFSSL_LOCAL void wc_mldsa_invntt_avx2(sword32* r); WOLFSSL_LOCAL void wc_mldsa_invntt_full_avx2(sword32* r); @@ -874,17 +892,18 @@ WOLFSSL_LOCAL void wc_mldsa_mul_vec_5_avx2(sword32* r, const sword32* a, const sword32* b); WOLFSSL_LOCAL void wc_mldsa_mul_vec_7_avx2(sword32* r, const sword32* a, const sword32* b); -WOLFSSL_LOCAL void wc_mldsa_matrix_mul_4x4_avx2(sword32* r, const sword32* m, - const sword32* v); -WOLFSSL_LOCAL void wc_mldsa_matrix_mul_6x5_avx2(sword32* r, const sword32* m, - const sword32* v); -WOLFSSL_LOCAL void wc_mldsa_matrix_mul_8x7_avx2(sword32* r, const sword32* m, - const sword32* v); WOLFSSL_LOCAL void wc_mldsa_redistribute_21_rand_avx2(word64* s, byte* r0, byte* r1, byte* r2, byte* r3); +/* First pass over a freshly squeezed buffer. Requires len = MLDSA_N and + * rLen = GEN_MATRIX_SIZE: the AVX2 wide path assumes that much input and + * reads past a shorter buffer. Returns the count sampled, which may be + * short of len - the caller squeezes another block and calls + * wc_mldsa_rej_uniform_avx2() below to top up. */ WOLFSSL_LOCAL int wc_mldsa_rej_uniform_n_avx2(sword32* a, word32 len, const byte* r, word32 rLen); +/* Refill pass, called with rLen = SHA3_128_BYTES (one block) and len set + * to the coefficients still needed. Honours rLen exactly. */ WOLFSSL_LOCAL int wc_mldsa_rej_uniform_avx2(sword32* a, word32 len, const byte* r, word32 rLen); @@ -929,6 +948,104 @@ WOLFSSL_LOCAL int wc_mldsa_vec_check_low_avx2(const sword32* a, byte l, WOLFSSL_LOCAL void wc_mldsa_poly_add_avx2(sword32* r, const sword32* a); WOLFSSL_LOCAL void wc_mldsa_poly_sub_avx2(sword32* r, const sword32* a); WOLFSSL_LOCAL void wc_mldsa_poly_make_pos_avx2(sword32* a); + +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512 +/* The AVX512 transforms do two polynomials per call and order the + * coefficients exactly as the AVX2 transforms do, so the two are + * interchangeable and an odd polynomial can be left to the AVX2 code. */ +WOLFSSL_LOCAL int wc_mldsa_make_hint_88_avx512(const sword32* s, + const sword32* w1, unsigned int omega, byte* h, byte* idx); +WOLFSSL_LOCAL int wc_mldsa_make_hint_32_avx512(const sword32* s, + const sword32* w1, unsigned int omega, byte* h, byte* idx); +WOLFSSL_LOCAL void wc_mldsa_use_hint_88_avx512(sword32* w1, const byte* h); +WOLFSSL_LOCAL void wc_mldsa_use_hint_32_avx512(sword32* w1, byte k, + const byte* h); + +/* As the AVX2 pair above, but one implementation serves both call + * shapes and honours rLen in either. */ +WOLFSSL_LOCAL int wc_mldsa_rej_uniform_n_avx512(sword32* a, word32 len, + const byte* r, word32 rLen); +WOLFSSL_LOCAL int wc_mldsa_rej_uniform_avx512(sword32* a, word32 len, + const byte* r, word32 rLen); + +WOLFSSL_LOCAL void wc_mldsa_redistribute_21_rand_x8_avx512(const word64* s, + byte* out, word32 stride); +WOLFSSL_LOCAL void wc_mldsa_redistribute_17_rand_x8_avx512(const word64* s, + byte* out, word32 stride); +WOLFSSL_LOCAL void wc_mldsa_extract_coeffs_eta2_avx512(const byte* z, + unsigned int zLen, sword32* s, unsigned int* cnt); +WOLFSSL_LOCAL void wc_mldsa_extract_coeffs_eta4_avx512(const byte* z, + unsigned int zLen, sword32* s, unsigned int* cnt); + +/* x2 codecs: one call encodes/decodes two polynomials, each 256-bit half of + * every vector holding one of them. Output is identical to the AVX2 routines + * run on each polynomial, so the two forms are interchangeable. */ +WOLFSSL_LOCAL void wc_mldsa_decode_gamma1_17_x2_avx512(const byte* sA, + const byte* sB, sword32* zA, sword32* zB); +WOLFSSL_LOCAL void wc_mldsa_decode_gamma1_19_x2_avx512(const byte* sA, + const byte* sB, sword32* zA, sword32* zB); +WOLFSSL_LOCAL void wc_mldsa_decode_t0_x2_avx512(const byte* t0A, + const byte* t0B, sword32* tA, sword32* tB); +WOLFSSL_LOCAL void wc_mldsa_decode_t1_x2_avx512(const byte* t1A, + const byte* t1B, sword32* tA, sword32* tB); +WOLFSSL_LOCAL void wc_mldsa_decode_eta_2_x2_avx512(const byte* pA, + const byte* pB, sword32* sA, sword32* sB); +WOLFSSL_LOCAL void wc_mldsa_decode_eta_4_x2_avx512(const byte* pA, + const byte* pB, sword32* sA, sword32* sB); +WOLFSSL_LOCAL void wc_mldsa_encode_w1_88_x2_avx512(const sword32* w1A, + const sword32* w1B, byte* w1eA, byte* w1eB); +WOLFSSL_LOCAL void wc_mldsa_encode_eta_2_x2_avx512(const sword32* sA, + const sword32* sB, byte* pA, byte* pB); +WOLFSSL_LOCAL void wc_mldsa_encode_t0_t1_x2_avx512(const sword32* tA, + const sword32* tB, byte* t0A, byte* t0B, byte* t1A, byte* t1B); + +/* Sixteen gamma1 values are a whole number of dwords, so these encoders pack + * one polynomial per call rather than pairing them up. */ +WOLFSSL_LOCAL void wc_mldsa_encode_eta_4_avx512(const sword32* s, byte* p); +WOLFSSL_LOCAL void wc_mldsa_encode_w1_32_avx512(const sword32* w1, byte* w1e); +WOLFSSL_LOCAL void wc_mldsa_encode_gamma1_17_avx512(const sword32* z, byte* s); +WOLFSSL_LOCAL void wc_mldsa_encode_gamma1_19_avx512(const sword32* z, byte* s); + +WOLFSSL_LOCAL void wc_mldsa_ntt_1p_avx512(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_ntt_small_1p_avx512(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_ntt_small_full_1p_avx512(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_ntt_full_1p_avx512(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_invntt_1p_avx512(sword32* r); +WOLFSSL_LOCAL void wc_mldsa_invntt_full_1p_avx512(sword32* r); + +WOLFSSL_LOCAL void wc_mldsa_poly_red_avx512(sword32* a); + +WOLFSSL_LOCAL void wc_mldsa_mul_avx512(sword32* r, const sword32* a, + const sword32* b); +WOLFSSL_LOCAL void wc_mldsa_mul_vec_4_avx512(sword32* r, const sword32* a, + const sword32* b); +WOLFSSL_LOCAL void wc_mldsa_mul_vec_5_avx512(sword32* r, const sword32* a, + const sword32* b); +WOLFSSL_LOCAL void wc_mldsa_mul_vec_7_avx512(sword32* r, const sword32* a, + const sword32* b); + +WOLFSSL_LOCAL void wc_mldsa_decompose_q88_avx512(const sword32* r, sword32* r0, + sword32* r1); +WOLFSSL_LOCAL void wc_mldsa_decompose_q32_avx512(const sword32* r, byte k, + sword32* r0, sword32* r1); + +WOLFSSL_LOCAL int wc_mldsa_vec_check_low_avx512(const sword32* a, byte l, + sword32 hi); + +WOLFSSL_LOCAL void wc_mldsa_poly_add_avx512(sword32* r, const sword32* a); +WOLFSSL_LOCAL void wc_mldsa_poly_sub_avx512(sword32* r, const sword32* a); +WOLFSSL_LOCAL void wc_mldsa_poly_make_pos_avx512(sword32* a); +#endif /* WOLFSSL_MLDSA_HAVE_INTEL_AVX512 */ + +#ifdef WOLFSSL_MLDSA_HAVE_INTEL_AVX512_VBMI +/* vpermb gathers the encoded bytes across the whole register, so these encode + * one polynomial per call rather than pairing two as the AVX512 forms do. + * Output is identical to the AVX2 and AVX512 routines. */ +WOLFSSL_LOCAL void wc_mldsa_encode_w1_88_avx512_vbmi(const sword32* w1, + byte* w1e); +WOLFSSL_LOCAL void wc_mldsa_encode_t0_t1_avx512_vbmi(const sword32* t, + byte* t0, byte* t1); +#endif /* WOLFSSL_MLDSA_HAVE_INTEL_AVX512_VBMI */ #endif