/* Taken from Bas Westerbaan's new 4-way SHAKE implementation * for Sphincs+ (https://github.com/sphincs/sphincsplus/pull/14/), * but uses vpshufb for byte-granular rotations as in the Keccak Code Package. */ #include "cdecl.h" .data .p2align 5 rho8: .byte 7,0,1,2,3,4,5,6,15,8,9,10,11,12,13,14,7,0,1,2,3,4,5,6,15,8,9,10,11,12,13,14 rho56: .byte 1,2,3,4,5,6,7,0,9,10,11,12,13,14,15,8,1,2,3,4,5,6,7,0,9,10,11,12,13,14,15,8 .text .global cdecl(PQCLEAN_DILITHIUM2_AVX2_f1600x4) .global _cdecl(PQCLEAN_DILITHIUM2_AVX2_f1600x4) cdecl(PQCLEAN_DILITHIUM2_AVX2_f1600x4): _cdecl(PQCLEAN_DILITHIUM2_AVX2_f1600x4): vmovdqa rho8(%rip), %ymm0 movq $6, %rax looptop: vmovdqa 0(%rdi), %ymm8 vmovdqa 32(%rdi), %ymm9 vmovdqa 64(%rdi), %ymm10 vmovdqa 96(%rdi), %ymm11 vmovdqa 128(%rdi), %ymm12 vpxor 160(%rdi), %ymm8, %ymm8 vpxor 192(%rdi), %ymm9, %ymm9 vpxor 224(%rdi), %ymm10, %ymm10 vpxor 256(%rdi), %ymm11, %ymm11 vpxor 288(%rdi), %ymm12, %ymm12 vpxor 320(%rdi), %ymm8, %ymm8 vpxor 352(%rdi), %ymm9, %ymm9 vpxor 384(%rdi), %ymm10, %ymm10 vpxor 416(%rdi), %ymm11, %ymm11 vpxor 448(%rdi), %ymm12, %ymm12 vpxor 480(%rdi), %ymm8, %ymm8 vpxor 512(%rdi), %ymm9, %ymm9 vpxor 544(%rdi), %ymm10, %ymm10 vpxor 576(%rdi), %ymm11, %ymm11 vpxor 608(%rdi), %ymm12, %ymm12 vpxor 640(%rdi), %ymm8, %ymm8 vpxor 672(%rdi), %ymm9, %ymm9 vpxor 704(%rdi), %ymm10, %ymm10 vpxor 736(%rdi), %ymm11, %ymm11 vpxor 768(%rdi), %ymm12, %ymm12 vpsllq $1, %ymm9, %ymm13 vpsllq $1, %ymm10, %ymm14 vpsllq $1, %ymm11, %ymm15 vpsllq $1, %ymm12, %ymm7 vpsllq $1, %ymm8, %ymm6 vpsrlq $63, %ymm9, %ymm5 vpsrlq $63, %ymm10, %ymm4 vpsrlq $63, %ymm11, %ymm3 vpsrlq $63, %ymm12, %ymm2 vpsrlq $63, %ymm8, %ymm1 vpor %ymm13, %ymm5, %ymm5 vpor %ymm14, %ymm4, %ymm4 vpor %ymm15, %ymm3, %ymm3 vpor %ymm7, %ymm2, %ymm2 vpor %ymm6, %ymm1, %ymm1 vpxor %ymm5, %ymm12, %ymm5 vpxor %ymm4, %ymm8, %ymm4 vpxor %ymm3, %ymm9, %ymm3 vpxor %ymm2, %ymm10, %ymm2 vpxor %ymm1, %ymm11, %ymm1 vpxor 0(%rdi), %ymm5, %ymm8 vpxor 192(%rdi), %ymm4, %ymm9 vpxor 384(%rdi), %ymm3, %ymm10 vpxor 576(%rdi), %ymm2, %ymm11 vpxor 768(%rdi), %ymm1, %ymm12 vpsllq $44, %ymm9, %ymm14 vpsllq $43, %ymm10, %ymm15 vpsllq $21, %ymm11, %ymm7 vpsllq $14, %ymm12, %ymm6 vpsrlq $20, %ymm9, %ymm9 vpsrlq $21, %ymm10, %ymm10 vpsrlq $43, %ymm11, %ymm11 vpsrlq $50, %ymm12, %ymm12 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vpbroadcastq 0(%rsi), %ymm8 vpxor %ymm8, %ymm13, %ymm13 vmovdqa %ymm13, 0(%rdi) vmovdqa %ymm14, 192(%rdi) vmovdqa %ymm15, 384(%rdi) vmovdqa %ymm7, 576(%rdi) vmovdqa %ymm6, 768(%rdi) vpxor 96(%rdi), %ymm2, %ymm8 vpxor 288(%rdi), %ymm1, %ymm9 vpxor 320(%rdi), %ymm5, %ymm10 vpxor 512(%rdi), %ymm4, %ymm11 vpxor 704(%rdi), %ymm3, %ymm12 vpsllq $28, %ymm8, %ymm13 vpsllq $20, %ymm9, %ymm14 vpsllq $3, %ymm10, %ymm15 vpsllq $45, %ymm11, %ymm7 vpsllq $61, %ymm12, %ymm6 vpsrlq $36, %ymm8, %ymm8 vpsrlq $44, %ymm9, %ymm9 vpsrlq $61, %ymm10, %ymm10 vpsrlq $19, %ymm11, %ymm11 vpsrlq $3, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 320(%rdi) vmovdqa %ymm14, 512(%rdi) vmovdqa %ymm15, 704(%rdi) vmovdqa %ymm7, 96(%rdi) vmovdqa %ymm6, 288(%rdi) vpxor 32(%rdi), %ymm4, %ymm8 vpxor 224(%rdi), %ymm3, %ymm9 vpxor 416(%rdi), %ymm2, %ymm10 vpxor 608(%rdi), %ymm1, %ymm11 vpxor 640(%rdi), %ymm5, %ymm12 vpsllq $1, %ymm8, %ymm13 vpsllq $6, %ymm9, %ymm14 vpsllq $25, %ymm10, %ymm15 #vpsllq $8, %ymm11, %ymm7 vpsllq $18, %ymm12, %ymm6 vpsrlq $63, %ymm8, %ymm8 vpsrlq $58, %ymm9, %ymm9 vpsrlq $39, %ymm10, %ymm10 #vpsrlq $56, %ymm11, %ymm11 vpsrlq $46, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 #vpor %ymm7, %ymm11, %ymm11 vpshufb %ymm0, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 640(%rdi) vmovdqa %ymm14, 32(%rdi) vmovdqa %ymm15, 224(%rdi) vmovdqa %ymm7, 416(%rdi) vmovdqa %ymm6, 608(%rdi) vpxor 128(%rdi), %ymm1, %ymm8 vpxor 160(%rdi), %ymm5, %ymm9 vpxor 352(%rdi), %ymm4, %ymm10 vpxor 544(%rdi), %ymm3, %ymm11 vpxor 736(%rdi), %ymm2, %ymm12 vpsllq $27, %ymm8, %ymm13 vpsllq $36, %ymm9, %ymm14 vpsllq $10, %ymm10, %ymm15 vpsllq $15, %ymm11, %ymm7 #vpsllq $56, %ymm12, %ymm6 vpsrlq $37, %ymm8, %ymm8 vpsrlq $28, %ymm9, %ymm9 vpsrlq $54, %ymm10, %ymm10 vpsrlq $49, %ymm11, %ymm11 #vpsrlq $8, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 #vpor %ymm6, %ymm12, %ymm12 vpshufb rho56(%rip), %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 160(%rdi) vmovdqa %ymm14, 352(%rdi) vmovdqa %ymm15, 544(%rdi) vmovdqa %ymm7, 736(%rdi) vmovdqa %ymm6, 128(%rdi) vpxor 64(%rdi), %ymm3, %ymm8 vpxor 256(%rdi), %ymm2, %ymm9 vpxor 448(%rdi), %ymm1, %ymm10 vpxor 480(%rdi), %ymm5, %ymm11 vpxor 672(%rdi), %ymm4, %ymm12 vpsllq $62, %ymm8, %ymm13 vpsllq $55, %ymm9, %ymm14 vpsllq $39, %ymm10, %ymm15 vpsllq $41, %ymm11, %ymm7 vpsllq $2, %ymm12, %ymm6 vpsrlq $2, %ymm8, %ymm8 vpsrlq $9, %ymm9, %ymm9 vpsrlq $25, %ymm10, %ymm10 vpsrlq $23, %ymm11, %ymm11 vpsrlq $62, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 480(%rdi) vmovdqa %ymm14, 672(%rdi) vmovdqa %ymm15, 64(%rdi) vmovdqa %ymm7, 256(%rdi) vmovdqa %ymm6, 448(%rdi) vmovdqa 0(%rdi), %ymm8 vmovdqa 32(%rdi), %ymm9 vmovdqa 64(%rdi), %ymm10 vmovdqa 96(%rdi), %ymm11 vmovdqa 128(%rdi), %ymm12 vpxor 160(%rdi), %ymm8, %ymm8 vpxor 192(%rdi), %ymm9, %ymm9 vpxor 224(%rdi), %ymm10, %ymm10 vpxor 256(%rdi), %ymm11, %ymm11 vpxor 288(%rdi), %ymm12, %ymm12 vpxor 320(%rdi), %ymm8, %ymm8 vpxor 352(%rdi), %ymm9, %ymm9 vpxor 384(%rdi), %ymm10, %ymm10 vpxor 416(%rdi), %ymm11, %ymm11 vpxor 448(%rdi), %ymm12, %ymm12 vpxor 480(%rdi), %ymm8, %ymm8 vpxor 512(%rdi), %ymm9, %ymm9 vpxor 544(%rdi), %ymm10, %ymm10 vpxor 576(%rdi), %ymm11, %ymm11 vpxor 608(%rdi), %ymm12, %ymm12 vpxor 640(%rdi), %ymm8, %ymm8 vpxor 672(%rdi), %ymm9, %ymm9 vpxor 704(%rdi), %ymm10, %ymm10 vpxor 736(%rdi), %ymm11, %ymm11 vpxor 768(%rdi), %ymm12, %ymm12 vpsllq $1, %ymm9, %ymm13 vpsllq $1, %ymm10, %ymm14 vpsllq $1, %ymm11, %ymm15 vpsllq $1, %ymm12, %ymm7 vpsllq $1, %ymm8, %ymm6 vpsrlq $63, %ymm9, %ymm5 vpsrlq $63, %ymm10, %ymm4 vpsrlq $63, %ymm11, %ymm3 vpsrlq $63, %ymm12, %ymm2 vpsrlq $63, %ymm8, %ymm1 vpor %ymm13, %ymm5, %ymm5 vpor %ymm14, %ymm4, %ymm4 vpor %ymm15, %ymm3, %ymm3 vpor %ymm7, %ymm2, %ymm2 vpor %ymm6, %ymm1, %ymm1 vpxor %ymm5, %ymm12, %ymm5 vpxor %ymm4, %ymm8, %ymm4 vpxor %ymm3, %ymm9, %ymm3 vpxor %ymm2, %ymm10, %ymm2 vpxor %ymm1, %ymm11, %ymm1 vpxor 0(%rdi), %ymm5, %ymm8 vpxor 512(%rdi), %ymm4, %ymm9 vpxor 224(%rdi), %ymm3, %ymm10 vpxor 736(%rdi), %ymm2, %ymm11 vpxor 448(%rdi), %ymm1, %ymm12 vpsllq $44, %ymm9, %ymm14 vpsllq $43, %ymm10, %ymm15 vpsllq $21, %ymm11, %ymm7 vpsllq $14, %ymm12, %ymm6 vpsrlq $20, %ymm9, %ymm9 vpsrlq $21, %ymm10, %ymm10 vpsrlq $43, %ymm11, %ymm11 vpsrlq $50, %ymm12, %ymm12 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vpbroadcastq 8(%rsi), %ymm8 vpxor %ymm8, %ymm13, %ymm13 vmovdqa %ymm13, 0(%rdi) vmovdqa %ymm14, 512(%rdi) vmovdqa %ymm15, 224(%rdi) vmovdqa %ymm7, 736(%rdi) vmovdqa %ymm6, 448(%rdi) vpxor 576(%rdi), %ymm2, %ymm8 vpxor 288(%rdi), %ymm1, %ymm9 vpxor 640(%rdi), %ymm5, %ymm10 vpxor 352(%rdi), %ymm4, %ymm11 vpxor 64(%rdi), %ymm3, %ymm12 vpsllq $28, %ymm8, %ymm13 vpsllq $20, %ymm9, %ymm14 vpsllq $3, %ymm10, %ymm15 vpsllq $45, %ymm11, %ymm7 vpsllq $61, %ymm12, %ymm6 vpsrlq $36, %ymm8, %ymm8 vpsrlq $44, %ymm9, %ymm9 vpsrlq $61, %ymm10, %ymm10 vpsrlq $19, %ymm11, %ymm11 vpsrlq $3, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 640(%rdi) vmovdqa %ymm14, 352(%rdi) vmovdqa %ymm15, 64(%rdi) vmovdqa %ymm7, 576(%rdi) vmovdqa %ymm6, 288(%rdi) vpxor 192(%rdi), %ymm4, %ymm8 vpxor 704(%rdi), %ymm3, %ymm9 vpxor 416(%rdi), %ymm2, %ymm10 vpxor 128(%rdi), %ymm1, %ymm11 vpxor 480(%rdi), %ymm5, %ymm12 vpsllq $1, %ymm8, %ymm13 vpsllq $6, %ymm9, %ymm14 vpsllq $25, %ymm10, %ymm15 #vpsllq $8, %ymm11, %ymm7 vpsllq $18, %ymm12, %ymm6 vpsrlq $63, %ymm8, %ymm8 vpsrlq $58, %ymm9, %ymm9 vpsrlq $39, %ymm10, %ymm10 #vpsrlq $56, %ymm11, %ymm11 vpsrlq $46, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 #vpor %ymm7, %ymm11, %ymm11 vpshufb %ymm0, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 480(%rdi) vmovdqa %ymm14, 192(%rdi) vmovdqa %ymm15, 704(%rdi) vmovdqa %ymm7, 416(%rdi) vmovdqa %ymm6, 128(%rdi) vpxor 768(%rdi), %ymm1, %ymm8 vpxor 320(%rdi), %ymm5, %ymm9 vpxor 32(%rdi), %ymm4, %ymm10 vpxor 544(%rdi), %ymm3, %ymm11 vpxor 256(%rdi), %ymm2, %ymm12 vpsllq $27, %ymm8, %ymm13 vpsllq $36, %ymm9, %ymm14 vpsllq $10, %ymm10, %ymm15 vpsllq $15, %ymm11, %ymm7 #vpsllq $56, %ymm12, %ymm6 vpsrlq $37, %ymm8, %ymm8 vpsrlq $28, %ymm9, %ymm9 vpsrlq $54, %ymm10, %ymm10 vpsrlq $49, %ymm11, %ymm11 #vpsrlq $8, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 #vpor %ymm6, %ymm12, %ymm12 vpshufb rho56(%rip), %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 320(%rdi) vmovdqa %ymm14, 32(%rdi) vmovdqa %ymm15, 544(%rdi) vmovdqa %ymm7, 256(%rdi) vmovdqa %ymm6, 768(%rdi) vpxor 384(%rdi), %ymm3, %ymm8 vpxor 96(%rdi), %ymm2, %ymm9 vpxor 608(%rdi), %ymm1, %ymm10 vpxor 160(%rdi), %ymm5, %ymm11 vpxor 672(%rdi), %ymm4, %ymm12 vpsllq $62, %ymm8, %ymm13 vpsllq $55, %ymm9, %ymm14 vpsllq $39, %ymm10, %ymm15 vpsllq $41, %ymm11, %ymm7 vpsllq $2, %ymm12, %ymm6 vpsrlq $2, %ymm8, %ymm8 vpsrlq $9, %ymm9, %ymm9 vpsrlq $25, %ymm10, %ymm10 vpsrlq $23, %ymm11, %ymm11 vpsrlq $62, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 160(%rdi) vmovdqa %ymm14, 672(%rdi) vmovdqa %ymm15, 384(%rdi) vmovdqa %ymm7, 96(%rdi) vmovdqa %ymm6, 608(%rdi) vmovdqa 0(%rdi), %ymm8 vmovdqa 32(%rdi), %ymm9 vmovdqa 64(%rdi), %ymm10 vmovdqa 96(%rdi), %ymm11 vmovdqa 128(%rdi), %ymm12 vpxor 160(%rdi), %ymm8, %ymm8 vpxor 192(%rdi), %ymm9, %ymm9 vpxor 224(%rdi), %ymm10, %ymm10 vpxor 256(%rdi), %ymm11, %ymm11 vpxor 288(%rdi), %ymm12, %ymm12 vpxor 320(%rdi), %ymm8, %ymm8 vpxor 352(%rdi), %ymm9, %ymm9 vpxor 384(%rdi), %ymm10, %ymm10 vpxor 416(%rdi), %ymm11, %ymm11 vpxor 448(%rdi), %ymm12, %ymm12 vpxor 480(%rdi), %ymm8, %ymm8 vpxor 512(%rdi), %ymm9, %ymm9 vpxor 544(%rdi), %ymm10, %ymm10 vpxor 576(%rdi), %ymm11, %ymm11 vpxor 608(%rdi), %ymm12, %ymm12 vpxor 640(%rdi), %ymm8, %ymm8 vpxor 672(%rdi), %ymm9, %ymm9 vpxor 704(%rdi), %ymm10, %ymm10 vpxor 736(%rdi), %ymm11, %ymm11 vpxor 768(%rdi), %ymm12, %ymm12 vpsllq $1, %ymm9, %ymm13 vpsllq $1, %ymm10, %ymm14 vpsllq $1, %ymm11, %ymm15 vpsllq $1, %ymm12, %ymm7 vpsllq $1, %ymm8, %ymm6 vpsrlq $63, %ymm9, %ymm5 vpsrlq $63, %ymm10, %ymm4 vpsrlq $63, %ymm11, %ymm3 vpsrlq $63, %ymm12, %ymm2 vpsrlq $63, %ymm8, %ymm1 vpor %ymm13, %ymm5, %ymm5 vpor %ymm14, %ymm4, %ymm4 vpor %ymm15, %ymm3, %ymm3 vpor %ymm7, %ymm2, %ymm2 vpor %ymm6, %ymm1, %ymm1 vpxor %ymm5, %ymm12, %ymm5 vpxor %ymm4, %ymm8, %ymm4 vpxor %ymm3, %ymm9, %ymm3 vpxor %ymm2, %ymm10, %ymm2 vpxor %ymm1, %ymm11, %ymm1 vpxor 0(%rdi), %ymm5, %ymm8 vpxor 352(%rdi), %ymm4, %ymm9 vpxor 704(%rdi), %ymm3, %ymm10 vpxor 256(%rdi), %ymm2, %ymm11 vpxor 608(%rdi), %ymm1, %ymm12 vpsllq $44, %ymm9, %ymm14 vpsllq $43, %ymm10, %ymm15 vpsllq $21, %ymm11, %ymm7 vpsllq $14, %ymm12, %ymm6 vpsrlq $20, %ymm9, %ymm9 vpsrlq $21, %ymm10, %ymm10 vpsrlq $43, %ymm11, %ymm11 vpsrlq $50, %ymm12, %ymm12 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vpbroadcastq 16(%rsi), %ymm8 vpxor %ymm8, %ymm13, %ymm13 vmovdqa %ymm13, 0(%rdi) vmovdqa %ymm14, 352(%rdi) vmovdqa %ymm15, 704(%rdi) vmovdqa %ymm7, 256(%rdi) vmovdqa %ymm6, 608(%rdi) vpxor 736(%rdi), %ymm2, %ymm8 vpxor 288(%rdi), %ymm1, %ymm9 vpxor 480(%rdi), %ymm5, %ymm10 vpxor 32(%rdi), %ymm4, %ymm11 vpxor 384(%rdi), %ymm3, %ymm12 vpsllq $28, %ymm8, %ymm13 vpsllq $20, %ymm9, %ymm14 vpsllq $3, %ymm10, %ymm15 vpsllq $45, %ymm11, %ymm7 vpsllq $61, %ymm12, %ymm6 vpsrlq $36, %ymm8, %ymm8 vpsrlq $44, %ymm9, %ymm9 vpsrlq $61, %ymm10, %ymm10 vpsrlq $19, %ymm11, %ymm11 vpsrlq $3, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 480(%rdi) vmovdqa %ymm14, 32(%rdi) vmovdqa %ymm15, 384(%rdi) vmovdqa %ymm7, 736(%rdi) vmovdqa %ymm6, 288(%rdi) vpxor 512(%rdi), %ymm4, %ymm8 vpxor 64(%rdi), %ymm3, %ymm9 vpxor 416(%rdi), %ymm2, %ymm10 vpxor 768(%rdi), %ymm1, %ymm11 vpxor 160(%rdi), %ymm5, %ymm12 vpsllq $1, %ymm8, %ymm13 vpsllq $6, %ymm9, %ymm14 vpsllq $25, %ymm10, %ymm15 #vpsllq $8, %ymm11, %ymm7 vpsllq $18, %ymm12, %ymm6 vpsrlq $63, %ymm8, %ymm8 vpsrlq $58, %ymm9, %ymm9 vpsrlq $39, %ymm10, %ymm10 #vpsrlq $56, %ymm11, %ymm11 vpsrlq $46, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 #vpor %ymm7, %ymm11, %ymm11 vpshufb %ymm0, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 160(%rdi) vmovdqa %ymm14, 512(%rdi) vmovdqa %ymm15, 64(%rdi) vmovdqa %ymm7, 416(%rdi) vmovdqa %ymm6, 768(%rdi) vpxor 448(%rdi), %ymm1, %ymm8 vpxor 640(%rdi), %ymm5, %ymm9 vpxor 192(%rdi), %ymm4, %ymm10 vpxor 544(%rdi), %ymm3, %ymm11 vpxor 96(%rdi), %ymm2, %ymm12 vpsllq $27, %ymm8, %ymm13 vpsllq $36, %ymm9, %ymm14 vpsllq $10, %ymm10, %ymm15 vpsllq $15, %ymm11, %ymm7 #vpsllq $56, %ymm12, %ymm6 vpsrlq $37, %ymm8, %ymm8 vpsrlq $28, %ymm9, %ymm9 vpsrlq $54, %ymm10, %ymm10 vpsrlq $49, %ymm11, %ymm11 #vpsrlq $8, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 #vpor %ymm6, %ymm12, %ymm12 vpshufb rho56(%rip), %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 640(%rdi) vmovdqa %ymm14, 192(%rdi) vmovdqa %ymm15, 544(%rdi) vmovdqa %ymm7, 96(%rdi) vmovdqa %ymm6, 448(%rdi) vpxor 224(%rdi), %ymm3, %ymm8 vpxor 576(%rdi), %ymm2, %ymm9 vpxor 128(%rdi), %ymm1, %ymm10 vpxor 320(%rdi), %ymm5, %ymm11 vpxor 672(%rdi), %ymm4, %ymm12 vpsllq $62, %ymm8, %ymm13 vpsllq $55, %ymm9, %ymm14 vpsllq $39, %ymm10, %ymm15 vpsllq $41, %ymm11, %ymm7 vpsllq $2, %ymm12, %ymm6 vpsrlq $2, %ymm8, %ymm8 vpsrlq $9, %ymm9, %ymm9 vpsrlq $25, %ymm10, %ymm10 vpsrlq $23, %ymm11, %ymm11 vpsrlq $62, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 320(%rdi) vmovdqa %ymm14, 672(%rdi) vmovdqa %ymm15, 224(%rdi) vmovdqa %ymm7, 576(%rdi) vmovdqa %ymm6, 128(%rdi) vmovdqa 0(%rdi), %ymm8 vmovdqa 32(%rdi), %ymm9 vmovdqa 64(%rdi), %ymm10 vmovdqa 96(%rdi), %ymm11 vmovdqa 128(%rdi), %ymm12 vpxor 160(%rdi), %ymm8, %ymm8 vpxor 192(%rdi), %ymm9, %ymm9 vpxor 224(%rdi), %ymm10, %ymm10 vpxor 256(%rdi), %ymm11, %ymm11 vpxor 288(%rdi), %ymm12, %ymm12 vpxor 320(%rdi), %ymm8, %ymm8 vpxor 352(%rdi), %ymm9, %ymm9 vpxor 384(%rdi), %ymm10, %ymm10 vpxor 416(%rdi), %ymm11, %ymm11 vpxor 448(%rdi), %ymm12, %ymm12 vpxor 480(%rdi), %ymm8, %ymm8 vpxor 512(%rdi), %ymm9, %ymm9 vpxor 544(%rdi), %ymm10, %ymm10 vpxor 576(%rdi), %ymm11, %ymm11 vpxor 608(%rdi), %ymm12, %ymm12 vpxor 640(%rdi), %ymm8, %ymm8 vpxor 672(%rdi), %ymm9, %ymm9 vpxor 704(%rdi), %ymm10, %ymm10 vpxor 736(%rdi), %ymm11, %ymm11 vpxor 768(%rdi), %ymm12, %ymm12 vpsllq $1, %ymm9, %ymm13 vpsllq $1, %ymm10, %ymm14 vpsllq $1, %ymm11, %ymm15 vpsllq $1, %ymm12, %ymm7 vpsllq $1, %ymm8, %ymm6 vpsrlq $63, %ymm9, %ymm5 vpsrlq $63, %ymm10, %ymm4 vpsrlq $63, %ymm11, %ymm3 vpsrlq $63, %ymm12, %ymm2 vpsrlq $63, %ymm8, %ymm1 vpor %ymm13, %ymm5, %ymm5 vpor %ymm14, %ymm4, %ymm4 vpor %ymm15, %ymm3, %ymm3 vpor %ymm7, %ymm2, %ymm2 vpor %ymm6, %ymm1, %ymm1 vpxor %ymm5, %ymm12, %ymm5 vpxor %ymm4, %ymm8, %ymm4 vpxor %ymm3, %ymm9, %ymm3 vpxor %ymm2, %ymm10, %ymm2 vpxor %ymm1, %ymm11, %ymm1 vpxor 0(%rdi), %ymm5, %ymm8 vpxor 32(%rdi), %ymm4, %ymm9 vpxor 64(%rdi), %ymm3, %ymm10 vpxor 96(%rdi), %ymm2, %ymm11 vpxor 128(%rdi), %ymm1, %ymm12 vpsllq $44, %ymm9, %ymm14 vpsllq $43, %ymm10, %ymm15 vpsllq $21, %ymm11, %ymm7 vpsllq $14, %ymm12, %ymm6 vpsrlq $20, %ymm9, %ymm9 vpsrlq $21, %ymm10, %ymm10 vpsrlq $43, %ymm11, %ymm11 vpsrlq $50, %ymm12, %ymm12 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vpbroadcastq 24(%rsi), %ymm8 vpxor %ymm8, %ymm13, %ymm13 vmovdqa %ymm13, 0(%rdi) vmovdqa %ymm14, 32(%rdi) vmovdqa %ymm15, 64(%rdi) vmovdqa %ymm7, 96(%rdi) vmovdqa %ymm6, 128(%rdi) vpxor 256(%rdi), %ymm2, %ymm8 vpxor 288(%rdi), %ymm1, %ymm9 vpxor 160(%rdi), %ymm5, %ymm10 vpxor 192(%rdi), %ymm4, %ymm11 vpxor 224(%rdi), %ymm3, %ymm12 vpsllq $28, %ymm8, %ymm13 vpsllq $20, %ymm9, %ymm14 vpsllq $3, %ymm10, %ymm15 vpsllq $45, %ymm11, %ymm7 vpsllq $61, %ymm12, %ymm6 vpsrlq $36, %ymm8, %ymm8 vpsrlq $44, %ymm9, %ymm9 vpsrlq $61, %ymm10, %ymm10 vpsrlq $19, %ymm11, %ymm11 vpsrlq $3, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 160(%rdi) vmovdqa %ymm14, 192(%rdi) vmovdqa %ymm15, 224(%rdi) vmovdqa %ymm7, 256(%rdi) vmovdqa %ymm6, 288(%rdi) vpxor 352(%rdi), %ymm4, %ymm8 vpxor 384(%rdi), %ymm3, %ymm9 vpxor 416(%rdi), %ymm2, %ymm10 vpxor 448(%rdi), %ymm1, %ymm11 vpxor 320(%rdi), %ymm5, %ymm12 vpsllq $1, %ymm8, %ymm13 vpsllq $6, %ymm9, %ymm14 vpsllq $25, %ymm10, %ymm15 #vpsllq $8, %ymm11, %ymm7 vpsllq $18, %ymm12, %ymm6 vpsrlq $63, %ymm8, %ymm8 vpsrlq $58, %ymm9, %ymm9 vpsrlq $39, %ymm10, %ymm10 #vpsrlq $56, %ymm11, %ymm11 vpsrlq $46, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 #vpor %ymm7, %ymm11, %ymm11 vpshufb %ymm0, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 320(%rdi) vmovdqa %ymm14, 352(%rdi) vmovdqa %ymm15, 384(%rdi) vmovdqa %ymm7, 416(%rdi) vmovdqa %ymm6, 448(%rdi) vpxor 608(%rdi), %ymm1, %ymm8 vpxor 480(%rdi), %ymm5, %ymm9 vpxor 512(%rdi), %ymm4, %ymm10 vpxor 544(%rdi), %ymm3, %ymm11 vpxor 576(%rdi), %ymm2, %ymm12 vpsllq $27, %ymm8, %ymm13 vpsllq $36, %ymm9, %ymm14 vpsllq $10, %ymm10, %ymm15 vpsllq $15, %ymm11, %ymm7 #vpsllq $56, %ymm12, %ymm6 vpsrlq $37, %ymm8, %ymm8 vpsrlq $28, %ymm9, %ymm9 vpsrlq $54, %ymm10, %ymm10 vpsrlq $49, %ymm11, %ymm11 #vpsrlq $8, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 #vpor %ymm6, %ymm12, %ymm12 vpshufb rho56(%rip), %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 480(%rdi) vmovdqa %ymm14, 512(%rdi) vmovdqa %ymm15, 544(%rdi) vmovdqa %ymm7, 576(%rdi) vmovdqa %ymm6, 608(%rdi) vpxor 704(%rdi), %ymm3, %ymm8 vpxor 736(%rdi), %ymm2, %ymm9 vpxor 768(%rdi), %ymm1, %ymm10 vpxor 640(%rdi), %ymm5, %ymm11 vpxor 672(%rdi), %ymm4, %ymm12 vpsllq $62, %ymm8, %ymm13 vpsllq $55, %ymm9, %ymm14 vpsllq $39, %ymm10, %ymm15 vpsllq $41, %ymm11, %ymm7 vpsllq $2, %ymm12, %ymm6 vpsrlq $2, %ymm8, %ymm8 vpsrlq $9, %ymm9, %ymm9 vpsrlq $25, %ymm10, %ymm10 vpsrlq $23, %ymm11, %ymm11 vpsrlq $62, %ymm12, %ymm12 vpor %ymm13, %ymm8, %ymm8 vpor %ymm14, %ymm9, %ymm9 vpor %ymm15, %ymm10, %ymm10 vpor %ymm7, %ymm11, %ymm11 vpor %ymm6, %ymm12, %ymm12 vpandn %ymm10, %ymm9, %ymm13 vpandn %ymm11, %ymm10, %ymm14 vpandn %ymm12, %ymm11, %ymm15 vpandn %ymm8, %ymm12, %ymm7 vpandn %ymm9, %ymm8, %ymm6 vpxor %ymm8, %ymm13, %ymm13 vpxor %ymm9, %ymm14, %ymm14 vpxor %ymm10, %ymm15, %ymm15 vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm12, %ymm6, %ymm6 vmovdqa %ymm13, 640(%rdi) vmovdqa %ymm14, 672(%rdi) vmovdqa %ymm15, 704(%rdi) vmovdqa %ymm7, 736(%rdi) vmovdqa %ymm6, 768(%rdi) addq $32, %rsi subq $1, %rax jnz looptop ret