diff --git a/app/extensions/chacha/chacha_avx-32.inc b/app/extensions/chacha/chacha_avx-32.inc index 8f38118..2feed3b 100644 --- a/app/extensions/chacha/chacha_avx-32.inc +++ b/app/extensions/chacha/chacha_avx-32.inc @@ -4,80 +4,139 @@ GLOBAL_HIDDEN_FN chacha_blocks_avx chacha_blocks_avx_local: pushl %ebp movl %esp, %ebp -andl $-64, %esp +andl $~63, %esp pushl %esi pushl %edi pushl %ebx subl $1268, %esp -LOAD_VAR_PIC chacha_constants, %eax -vmovdqa 0(%eax), %xmm5 -vmovdqa 16(%eax), %xmm2 -vmovdqa 32(%eax), %xmm1 -movl $1, %edx +movl $1, %ecx +LOAD_VAR_PIC chacha_constants, %esi +movl 16(%ebp), %edx movl 20(%ebp), %ebx -movl 16(%ebp), %esi -movl %esi, %ecx +vmovd %ecx, %xmm2 +vmovdqu 16(%esi), %xmm0 +vmovdqu 32(%esi), %xmm1 movl 12(%ebp), %eax -vmovd %edx, %xmm0 +vmovdqu %xmm0, 448(%esp) +vmovdqu %xmm1, 432(%esp) +vmovdqu %xmm2, 96(%esp) +movl %edx, 416(%esp) testl %ebx, %ebx -je chacha_blocks_avx_30 -movl 8(%ebp), %edi -vmovdqu (%edi), %xmm7 -vmovdqu 16(%edi), %xmm6 -vmovdqu 32(%edi), %xmm4 -movl 48(%edi), %edx +je chacha_blocks_avx_36 +chacha_blocks_avx_2: +movl 8(%ebp), %ecx +vmovdqu 0(%esi), %xmm0 +vmovdqu (%ecx), %xmm1 +vmovdqu 16(%ecx), %xmm2 +movl 48(%ecx), %edi +vmovdqu %xmm0, 48(%esp) +movl %edi, 424(%esp) +vmovdqu %xmm1, 64(%esp) +vmovdqu %xmm2, 80(%esp) +vmovdqu 32(%ecx), %xmm0 cmpl $256, %ebx jb chacha_blocks_avx_10 -movl 8(%ebp), %edi -movl %ebx, 44(%esp) -vpshufd $0, %xmm5, %xmm3 -movl 32(%edi), %ebx -vmovdqu %xmm3, 368(%esp) -vpshufd $85, %xmm5, %xmm3 -vmovdqu %xmm3, 352(%esp) -vpshufd $170, %xmm5, %xmm3 -vmovdqu %xmm3, 336(%esp) -vpshufd $255, %xmm5, %xmm3 -vmovdqu %xmm3, 320(%esp) -vpshufd $0, %xmm7, %xmm3 -movl %ebx, 32(%esp) -vmovdqu %xmm3, 304(%esp) +chacha_blocks_avx_3: +vmovdqu 64(%esp), %xmm7 +vpshufd $255, %xmm7, %xmm1 +vmovdqu %xmm1, 208(%esp) +vmovdqu 80(%esp), %xmm1 +vmovdqu 48(%esp), %xmm4 +vpshufd $0, %xmm7, %xmm2 +vmovdqu %xmm2, 240(%esp) vpshufd $85, %xmm7, %xmm3 -movl 36(%edi), %ebx -vmovdqu %xmm3, 288(%esp) -vpshufd $170, %xmm7, %xmm3 -vmovdqu %xmm3, 272(%esp) -vpshufd $255, %xmm7, %xmm3 -vmovdqu %xmm3, 256(%esp) -vpshufd $0, %xmm6, %xmm3 -vmovdqu %xmm3, 240(%esp) -vpshufd $85, %xmm6, %xmm3 -vmovdqu %xmm3, 224(%esp) -vpshufd $170, %xmm6, %xmm3 -movl %ebx, 36(%esp) -vmovdqu %xmm3, 208(%esp) -vpshufd $255, %xmm6, %xmm3 -movl 40(%edi), %ebx -vmovdqu %xmm3, 192(%esp) -vpshufd $170, %xmm4, %xmm3 -movl 44(%edi), %edi -vmovdqu %xmm3, 176(%esp) -vpshufd $255, %xmm4, %xmm3 -movl %ebx, 24(%esp) -movl %edx, 432(%esp) +vpshufd $170, %xmm7, %xmm2 +vpshufd $0, %xmm1, %xmm7 +vmovdqu %xmm7, 192(%esp) +vpshufd $85, %xmm1, %xmm7 +vpshufd $85, %xmm4, %xmm5 +vmovdqu %xmm7, 176(%esp) +vpshufd $170, %xmm1, %xmm7 +vpshufd $255, %xmm1, %xmm1 +vpshufd $0, %xmm4, %xmm6 +vmovdqu %xmm5, 224(%esp) +vpshufd $170, %xmm4, %xmm5 +vpshufd $255, %xmm4, %xmm4 +vmovdqu %xmm1, 144(%esp) +vpshufd $170, %xmm0, %xmm1 +vpshufd $255, %xmm0, %xmm0 +movl 32(%ecx), %edi +movl 36(%ecx), %esi +vmovdqu %xmm7, 160(%esp) +vmovdqu %xmm1, 128(%esp) +vmovdqu %xmm0, 256(%esp) +vmovdqu %xmm2, 336(%esp) +vmovdqu %xmm3, 320(%esp) +vmovdqu %xmm4, 304(%esp) +vmovdqu %xmm5, 288(%esp) +vmovdqu %xmm6, 272(%esp) +movl %ebx, 420(%esp) +chacha_blocks_avx_4: +movl %edi, %ecx +movl %esi, %ebx +addl $1, %ecx +movl %ecx, 36(%esp) +movl %edi, %ecx +adcl $0, %ebx +addl $2, %ecx +movl %ebx, 116(%esp) +movl %esi, %ebx movl %ecx, 40(%esp) -movl %edi, 28(%esp) -movl 32(%esp), %edx -movl 36(%esp), %ecx -vmovdqu %xmm6, 128(%esp) -vmovdqu %xmm7, 112(%esp) -vmovdqu %xmm5, 96(%esp) -vmovdqu %xmm3, 384(%esp) -vmovdqu %xmm0, 80(%esp) -vmovdqu %xmm1, 448(%esp) -vmovdqu %xmm2, 464(%esp) -jmp chacha_blocks_avx_4 -.p2align 6,,63 +movl %edi, %ecx +adcl $0, %ebx +addl $3, %ecx +movl %edi, 32(%esp) +movl %ecx, 44(%esp) +vmovdqu 32(%esp), %xmm4 +vmovdqu 320(%esp), %xmm7 +vmovdqu 240(%esp), %xmm1 +movl %ebx, 120(%esp) +movl %esi, %ebx +vmovdqu %xmm4, 368(%esp) +adcl $0, %ebx +vmovdqu %xmm4, 464(%esp) +addl $4, %edi +vmovdqu 304(%esp), %xmm0 +vmovdqu 128(%esp), %xmm4 +vmovdqu %xmm7, 560(%esp) +vmovdqu %xmm1, 384(%esp) +vmovdqu 160(%esp), %xmm7 +vmovdqu 208(%esp), %xmm1 +movl %esi, 112(%esp) +adcl $0, %esi +movl %ebx, 124(%esp) +vmovdqu %xmm0, 576(%esp) +vmovdqu %xmm4, 480(%esp) +vmovdqu 272(%esp), %xmm5 +vmovdqu 336(%esp), %xmm0 +vmovdqu 256(%esp), %xmm4 +vmovdqu %xmm7, 528(%esp) +vmovdqu 112(%esp), %xmm6 +vmovdqu 224(%esp), %xmm3 +vmovdqu 288(%esp), %xmm2 +vmovdqu 144(%esp), %xmm7 +vmovdqu %xmm1, 592(%esp) +vmovdqu %xmm0, 544(%esp) +vmovdqu %xmm4, 496(%esp) +vmovdqu %xmm5, 608(%esp) +vmovdqu %xmm6, 352(%esp) +vmovdqu 192(%esp), %xmm1 +vmovdqu 176(%esp), %xmm0 +movl 424(%esp), %ecx +vmovdqu 592(%esp), %xmm5 +vmovdqu 384(%esp), %xmm4 +vmovdqu %xmm7, 512(%esp) +vmovdqu %xmm2, 640(%esp) +vmovdqu %xmm3, 624(%esp) +jmp chacha_blocks_avx_5 +.p2align 5 +nop +nop +nop +nop +nop +nop +nop nop nop nop @@ -86,455 +145,538 @@ nop nop nop nop -chacha_blocks_avx_4: -movl %edx, %ebx -movl %ecx, %edi -addl $1, %ebx -movl %ebx, 148(%esp) -movl %edx, %ebx -adcl $0, %edi -addl $2, %ebx -movl %edi, 164(%esp) -movl %ecx, %edi -movl %ebx, 152(%esp) -movl %edx, %ebx -adcl $0, %edi -addl $3, %ebx -movl %edx, 144(%esp) -movl %ebx, 156(%esp) -vmovdqu 144(%esp), %xmm3 -vmovdqu 272(%esp), %xmm7 -movl %edi, 168(%esp) -movl %ecx, %edi -vmovdqu %xmm3, 400(%esp) -adcl $0, %edi -vmovdqu %xmm7, 592(%esp) -addl $4, %edx -vmovdqu %xmm3, 608(%esp) -vmovdqu 208(%esp), %xmm7 -vmovdqu 176(%esp), %xmm3 -movl %ecx, 160(%esp) -adcl $0, %ecx -movl %edi, 172(%esp) -vmovdqu 352(%esp), %xmm5 -vmovdqu 336(%esp), %xmm0 -vmovdqu 320(%esp), %xmm1 -vmovdqu 288(%esp), %xmm2 -vmovdqu %xmm7, 496(%esp) -vmovdqu %xmm3, 624(%esp) -vmovdqu 160(%esp), %xmm6 -vmovdqu 368(%esp), %xmm4 -vmovdqu 192(%esp), %xmm7 -vmovdqu 384(%esp), %xmm3 -vmovdqu %xmm5, 544(%esp) -vmovdqu %xmm0, 560(%esp) -vmovdqu %xmm1, 576(%esp) -vmovdqu %xmm2, 640(%esp) -vmovdqu %xmm6, 416(%esp) -vmovdqu 304(%esp), %xmm5 -vmovdqu 256(%esp), %xmm2 -vmovdqu 240(%esp), %xmm1 -vmovdqu 224(%esp), %xmm0 -movl 432(%esp), %ebx -vmovdqu %xmm7, 480(%esp) -vmovdqu %xmm3, 512(%esp) -vmovdqu %xmm4, 528(%esp) chacha_blocks_avx_5: -vpaddd 528(%esp), %xmm5, %xmm4 -vmovdqu 640(%esp), %xmm7 -vpxor 608(%esp), %xmm4, %xmm3 -vmovdqu %xmm4, 672(%esp) -vpaddd 544(%esp), %xmm7, %xmm7 -vmovdqu 464(%esp), %xmm4 +vpaddd 608(%esp), %xmm4, %xmm2 +vmovdqu 560(%esp), %xmm7 +vpxor 464(%esp), %xmm2, %xmm3 +vmovdqu %xmm2, 656(%esp) +vpaddd 624(%esp), %xmm7, %xmm7 +vmovdqu 448(%esp), %xmm2 vpxor %xmm7, %xmm6, %xmm6 -vpshufb %xmm4, %xmm3, %xmm3 -vpshufb %xmm4, %xmm6, %xmm6 -vmovdqu %xmm7, 688(%esp) +vpshufb %xmm2, %xmm3, %xmm3 +vpshufb %xmm2, %xmm6, %xmm6 +vmovdqu %xmm7, 672(%esp) vpaddd %xmm3, %xmm1, %xmm1 -vmovdqu 592(%esp), %xmm7 +vmovdqu 544(%esp), %xmm7 vpaddd %xmm6, %xmm0, %xmm0 -vpaddd 560(%esp), %xmm7, %xmm7 -vpxor %xmm1, %xmm5, %xmm5 -vmovdqu %xmm2, 656(%esp) -vpaddd 576(%esp), %xmm2, %xmm2 -vmovdqu %xmm7, 704(%esp) -vpxor 624(%esp), %xmm7, %xmm7 -vmovdqu %xmm2, 720(%esp) -vpxor 512(%esp), %xmm2, %xmm2 -vpshufb %xmm4, %xmm7, %xmm7 -vpshufb %xmm4, %xmm2, %xmm2 -vmovdqu %xmm0, 768(%esp) -vpslld $12, %xmm5, %xmm4 -vmovdqu %xmm1, 752(%esp) -vpsrld $20, %xmm5, %xmm1 -vpxor 640(%esp), %xmm0, %xmm0 -vpxor %xmm4, %xmm1, %xmm5 +vpaddd 640(%esp), %xmm7, %xmm7 +vpxor %xmm1, %xmm4, %xmm4 +vmovdqu %xmm5, 592(%esp) +vpaddd 576(%esp), %xmm5, %xmm5 +vmovdqu %xmm7, 688(%esp) +vpxor 480(%esp), %xmm7, %xmm7 +vmovdqu %xmm5, 704(%esp) +vpxor 496(%esp), %xmm5, %xmm5 +vpshufb %xmm2, %xmm7, %xmm7 +vpshufb %xmm2, %xmm5, %xmm5 +vmovdqu %xmm0, 752(%esp) +vpslld $12, %xmm4, %xmm2 +vmovdqu %xmm1, 736(%esp) +vpsrld $20, %xmm4, %xmm1 +vpxor 560(%esp), %xmm0, %xmm0 +vpor %xmm2, %xmm1, %xmm4 vpsrld $20, %xmm0, %xmm1 vpslld $12, %xmm0, %xmm0 -vpxor %xmm0, %xmm1, %xmm1 -vpaddd 496(%esp), %xmm7, %xmm0 -vpaddd 480(%esp), %xmm2, %xmm4 -vmovdqu %xmm2, 736(%esp) -vpxor 592(%esp), %xmm0, %xmm2 -vmovdqu %xmm0, 800(%esp) -vmovdqu %xmm4, 816(%esp) -vpxor 656(%esp), %xmm4, %xmm0 -vpsrld $20, %xmm2, %xmm4 -vpslld $12, %xmm2, %xmm2 -vpxor %xmm2, %xmm4, %xmm4 -vpsrld $20, %xmm0, %xmm2 +vpor %xmm0, %xmm1, %xmm1 +vpaddd 528(%esp), %xmm7, %xmm0 +vpaddd 512(%esp), %xmm5, %xmm2 +vmovdqu %xmm5, 720(%esp) +vpxor 544(%esp), %xmm0, %xmm5 +vmovdqu %xmm0, 784(%esp) +vmovdqu %xmm2, 800(%esp) +vpxor 592(%esp), %xmm2, %xmm0 +vpsrld $20, %xmm5, %xmm2 +vpslld $12, %xmm5, %xmm5 +vpor %xmm5, %xmm2, %xmm2 +vpsrld $20, %xmm0, %xmm5 vpslld $12, %xmm0, %xmm0 -vpxor %xmm0, %xmm2, %xmm0 -vpaddd 672(%esp), %xmm5, %xmm2 -vmovdqu %xmm2, 848(%esp) -vpxor %xmm2, %xmm3, %xmm2 -vmovdqu 448(%esp), %xmm3 -vpshufb %xmm3, %xmm2, %xmm2 -vmovdqu %xmm5, 784(%esp) -vpaddd 688(%esp), %xmm1, %xmm5 -vmovdqu %xmm2, 880(%esp) -vpxor %xmm5, %xmm6, %xmm6 +vpor %xmm0, %xmm5, %xmm0 +vpaddd 656(%esp), %xmm4, %xmm5 +vmovdqu %xmm5, 832(%esp) +vpxor %xmm5, %xmm3, %xmm5 +vmovdqu 432(%esp), %xmm3 +vpshufb %xmm3, %xmm5, %xmm5 +vmovdqu %xmm4, 768(%esp) +vpaddd 672(%esp), %xmm1, %xmm4 vmovdqu %xmm5, 864(%esp) -vpaddd 720(%esp), %xmm0, %xmm2 -vpaddd 704(%esp), %xmm4, %xmm5 +vpxor %xmm4, %xmm6, %xmm6 +vmovdqu %xmm4, 848(%esp) +vpaddd 704(%esp), %xmm0, %xmm5 +vpaddd 688(%esp), %xmm2, %xmm4 vpshufb %xmm3, %xmm6, %xmm6 -vmovdqu %xmm2, 928(%esp) -vpxor %xmm5, %xmm7, %xmm7 -vpxor 736(%esp), %xmm2, %xmm2 vmovdqu %xmm5, 912(%esp) -vpshufb %xmm3, %xmm7, %xmm5 -vpshufb %xmm3, %xmm2, %xmm2 -vmovdqu 880(%esp), %xmm3 -vpaddd 752(%esp), %xmm3, %xmm7 -vmovdqu %xmm4, 832(%esp) -vmovdqu %xmm6, 896(%esp) -vpaddd 768(%esp), %xmm6, %xmm6 -vpxor 784(%esp), %xmm7, %xmm4 -vmovdqu %xmm6, 976(%esp) +vpxor %xmm4, %xmm7, %xmm7 +vpxor 720(%esp), %xmm5, %xmm5 +vmovdqu %xmm4, 896(%esp) +vpshufb %xmm3, %xmm7, %xmm4 +vpshufb %xmm3, %xmm5, %xmm5 +vmovdqu 864(%esp), %xmm3 +vpaddd 736(%esp), %xmm3, %xmm7 +vmovdqu %xmm2, 816(%esp) +vmovdqu %xmm6, 880(%esp) +vpaddd 752(%esp), %xmm6, %xmm6 +vpxor 768(%esp), %xmm7, %xmm2 +vmovdqu %xmm6, 960(%esp) vpxor %xmm6, %xmm1, %xmm6 -vpsrld $25, %xmm4, %xmm1 -vpslld $7, %xmm4, %xmm3 -vmovdqu %xmm5, 944(%esp) -vmovdqu %xmm7, 960(%esp) -vpxor %xmm3, %xmm1, %xmm7 -vpaddd 800(%esp), %xmm5, %xmm5 +vpsrld $25, %xmm2, %xmm1 +vpslld $7, %xmm2, %xmm3 +vmovdqu %xmm4, 928(%esp) +vmovdqu %xmm7, 944(%esp) +vpor %xmm3, %xmm1, %xmm7 +vpaddd 784(%esp), %xmm4, %xmm4 vpsrld $25, %xmm6, %xmm1 vpslld $7, %xmm6, %xmm6 -vpaddd 816(%esp), %xmm2, %xmm3 -vpxor %xmm6, %xmm1, %xmm4 -vpxor 832(%esp), %xmm5, %xmm1 +vpaddd 800(%esp), %xmm5, %xmm3 +vpor %xmm6, %xmm1, %xmm2 +vpxor 816(%esp), %xmm4, %xmm1 vpxor %xmm3, %xmm0, %xmm0 vpsrld $25, %xmm1, %xmm6 vpslld $7, %xmm1, %xmm1 -vmovdqu %xmm3, 1024(%esp) +vmovdqu %xmm3, 1008(%esp) vpsrld $25, %xmm0, %xmm3 vpslld $7, %xmm0, %xmm0 -vpxor %xmm1, %xmm6, %xmm1 -vpxor %xmm0, %xmm3, %xmm6 -vpaddd 848(%esp), %xmm4, %xmm0 -vmovdqu %xmm4, 1008(%esp) -vpxor %xmm0, %xmm2, %xmm3 -vpaddd 864(%esp), %xmm1, %xmm4 -vmovdqu 464(%esp), %xmm2 -vmovdqu %xmm4, 1072(%esp) -vmovdqu %xmm0, 1056(%esp) -vpshufb %xmm2, %xmm3, %xmm0 -vpxor 880(%esp), %xmm4, %xmm4 -vpaddd %xmm0, %xmm5, %xmm5 -vpshufb %xmm2, %xmm4, %xmm4 -vpaddd 912(%esp), %xmm6, %xmm3 -vmovdqu %xmm6, 1040(%esp) -vpaddd 928(%esp), %xmm7, %xmm6 -vmovdqu %xmm7, 992(%esp) -vpxor 896(%esp), %xmm3, %xmm7 -vmovdqu %xmm6, 1104(%esp) -vpxor 944(%esp), %xmm6, %xmm6 -vpshufb %xmm2, %xmm7, %xmm7 -vmovdqu %xmm3, 1088(%esp) -vpshufb %xmm2, %xmm6, %xmm3 +vpor %xmm1, %xmm6, %xmm1 +vpor %xmm0, %xmm3, %xmm6 +vpaddd 832(%esp), %xmm2, %xmm0 +vmovdqu %xmm2, 992(%esp) +vpxor %xmm0, %xmm5, %xmm3 +vpaddd 848(%esp), %xmm1, %xmm2 +vmovdqu 448(%esp), %xmm5 +vmovdqu %xmm2, 1056(%esp) +vmovdqu %xmm0, 1040(%esp) +vpshufb %xmm5, %xmm3, %xmm0 +vpxor 864(%esp), %xmm2, %xmm2 +vpaddd %xmm0, %xmm4, %xmm4 +vpshufb %xmm5, %xmm2, %xmm2 +vpaddd 896(%esp), %xmm6, %xmm3 +vmovdqu %xmm6, 1024(%esp) +vpaddd 912(%esp), %xmm7, %xmm6 +vmovdqu %xmm7, 976(%esp) +vpxor 880(%esp), %xmm3, %xmm7 +vmovdqu %xmm6, 1088(%esp) +vpxor 928(%esp), %xmm6, %xmm6 +vpshufb %xmm5, %xmm7, %xmm7 +vmovdqu %xmm3, 1072(%esp) +vpshufb %xmm5, %xmm6, %xmm3 +vmovdqu %xmm4, 1120(%esp) +vpaddd 1008(%esp), %xmm2, %xmm5 +vpxor 992(%esp), %xmm4, %xmm4 +vpxor %xmm5, %xmm1, %xmm1 vmovdqu %xmm5, 1136(%esp) -vpaddd 1024(%esp), %xmm4, %xmm2 -vpxor 1008(%esp), %xmm5, %xmm5 -vpxor %xmm2, %xmm1, %xmm1 -vmovdqu %xmm2, 1152(%esp) -vpsrld $20, %xmm5, %xmm6 -vpslld $12, %xmm5, %xmm2 -vpxor %xmm2, %xmm6, %xmm5 +vpsrld $20, %xmm4, %xmm6 +vpslld $12, %xmm4, %xmm5 +vpor %xmm5, %xmm6, %xmm4 vpsrld $20, %xmm1, %xmm6 vpslld $12, %xmm1, %xmm1 -vpaddd 960(%esp), %xmm7, %xmm2 -vpxor %xmm1, %xmm6, %xmm1 -vpaddd 976(%esp), %xmm3, %xmm6 -vmovdqu %xmm3, 1120(%esp) -vpxor 1040(%esp), %xmm2, %xmm3 -vmovdqu %xmm2, 1184(%esp) -vmovdqu %xmm6, 1200(%esp) -vpxor 992(%esp), %xmm6, %xmm2 +vpaddd 944(%esp), %xmm7, %xmm5 +vpor %xmm1, %xmm6, %xmm1 +vpaddd 960(%esp), %xmm3, %xmm6 +vmovdqu %xmm3, 1104(%esp) +vpxor 1024(%esp), %xmm5, %xmm3 +vmovdqu %xmm5, 1168(%esp) +vmovdqu %xmm6, 1184(%esp) +vpxor 976(%esp), %xmm6, %xmm5 vpsrld $20, %xmm3, %xmm6 vpslld $12, %xmm3, %xmm3 -vpxor %xmm3, %xmm6, %xmm6 -vpsrld $20, %xmm2, %xmm3 -vpslld $12, %xmm2, %xmm2 -vmovdqu %xmm5, 1168(%esp) -vpxor %xmm2, %xmm3, %xmm2 -vpaddd 1056(%esp), %xmm5, %xmm5 -vpaddd 1072(%esp), %xmm1, %xmm3 -vmovdqu %xmm5, 528(%esp) -vpxor %xmm5, %xmm0, %xmm5 -vmovdqu 448(%esp), %xmm0 -vpxor %xmm3, %xmm4, %xmm4 -vpshufb %xmm0, %xmm5, %xmm5 +vpor %xmm3, %xmm6, %xmm6 +vpsrld $20, %xmm5, %xmm3 +vpslld $12, %xmm5, %xmm5 +vmovdqu %xmm4, 1152(%esp) +vpor %xmm5, %xmm3, %xmm5 +vpaddd 1040(%esp), %xmm4, %xmm4 +vpaddd 1056(%esp), %xmm1, %xmm3 +vmovdqu %xmm4, 608(%esp) +vpxor %xmm4, %xmm0, %xmm4 +vmovdqu 432(%esp), %xmm0 +vpxor %xmm3, %xmm2, %xmm2 vpshufb %xmm0, %xmm4, %xmm4 -vmovdqu %xmm6, 1216(%esp) -vpaddd 1088(%esp), %xmm6, %xmm6 -vmovdqu %xmm3, 544(%esp) +vpshufb %xmm0, %xmm2, %xmm2 +vmovdqu %xmm6, 1200(%esp) +vpaddd 1072(%esp), %xmm6, %xmm6 +vmovdqu %xmm3, 624(%esp) vpxor %xmm6, %xmm7, %xmm7 -vpaddd 1104(%esp), %xmm2, %xmm3 -vmovdqu %xmm6, 560(%esp) +vpaddd 1088(%esp), %xmm5, %xmm3 +vmovdqu %xmm6, 640(%esp) vpshufb %xmm0, %xmm7, %xmm6 -vpxor 1120(%esp), %xmm3, %xmm7 -vmovdqu %xmm4, 608(%esp) +vpxor 1104(%esp), %xmm3, %xmm7 +vmovdqu %xmm2, 464(%esp) vmovdqu %xmm3, 576(%esp) vpshufb %xmm0, %xmm7, %xmm0 -vpaddd 1136(%esp), %xmm5, %xmm3 -vpaddd 1152(%esp), %xmm4, %xmm4 -vmovdqu %xmm5, 512(%esp) -vpxor %xmm4, %xmm1, %xmm1 -vpxor 1168(%esp), %xmm3, %xmm5 -vmovdqu %xmm3, 496(%esp) -vpsrld $25, %xmm5, %xmm7 -vpslld $7, %xmm5, %xmm3 -vpsrld $25, %xmm1, %xmm5 +vpaddd 1120(%esp), %xmm4, %xmm3 +vpaddd 1136(%esp), %xmm2, %xmm2 +vmovdqu %xmm4, 496(%esp) +vpxor %xmm2, %xmm1, %xmm1 +vpxor 1152(%esp), %xmm3, %xmm4 +vmovdqu %xmm2, 512(%esp) +vpsrld $25, %xmm4, %xmm7 +vpslld $7, %xmm4, %xmm2 +vpsrld $25, %xmm1, %xmm4 vpslld $7, %xmm1, %xmm1 -vpxor %xmm1, %xmm5, %xmm1 -vmovdqu %xmm0, 624(%esp) -vmovdqu %xmm1, 592(%esp) -vpaddd 1184(%esp), %xmm6, %xmm1 -vpaddd 1200(%esp), %xmm0, %xmm0 -vmovdqu %xmm4, 480(%esp) -vpxor %xmm3, %xmm7, %xmm4 -vpxor 1216(%esp), %xmm1, %xmm3 -vpxor %xmm0, %xmm2, %xmm7 -vmovdqu %xmm4, 640(%esp) -vpsrld $25, %xmm3, %xmm2 -vpslld $7, %xmm3, %xmm3 -vpsrld $25, %xmm7, %xmm4 -vpslld $7, %xmm7, %xmm5 -vpxor %xmm3, %xmm2, %xmm2 -vpxor %xmm5, %xmm4, %xmm5 -addl $-2, %ebx +vpor %xmm1, %xmm4, %xmm1 +vmovdqu %xmm0, 480(%esp) +vmovdqu %xmm1, 544(%esp) +vpaddd 1168(%esp), %xmm6, %xmm1 +vpaddd 1184(%esp), %xmm0, %xmm0 +vmovdqu %xmm3, 528(%esp) +vpor %xmm2, %xmm7, %xmm3 +vpxor 1200(%esp), %xmm1, %xmm2 +vpxor %xmm0, %xmm5, %xmm7 +vmovdqu %xmm3, 560(%esp) +vpsrld $25, %xmm2, %xmm5 +vpslld $7, %xmm2, %xmm2 +vpsrld $25, %xmm7, %xmm3 +vpslld $7, %xmm7, %xmm4 +vpor %xmm2, %xmm5, %xmm5 +vpor %xmm4, %xmm3, %xmm4 +addl $-2, %ecx jne chacha_blocks_avx_5 -vmovdqu 528(%esp), %xmm4 -testl %eax, %eax -je chacha_blocks_avx_37 -vmovdqu %xmm6, 64(%esp) -vmovdqu 544(%esp), %xmm6 -vpaddd 368(%esp), %xmm4, %xmm3 -vmovdqu 560(%esp), %xmm7 +chacha_blocks_avx_6: +vmovdqu 624(%esp), %xmm3 +vpaddd 224(%esp), %xmm3, %xmm3 +vmovdqu %xmm5, 592(%esp) +vmovdqu %xmm4, 384(%esp) +vmovdqu 640(%esp), %xmm2 +vmovdqu 608(%esp), %xmm5 vmovdqu 576(%esp), %xmm4 -vmovdqu %xmm0, 48(%esp) -vpaddd 352(%esp), %xmm6, %xmm0 -vpaddd 336(%esp), %xmm7, %xmm6 -vpaddd 320(%esp), %xmm4, %xmm7 -vpunpckldq %xmm0, %xmm3, %xmm4 -vpunpckhdq %xmm0, %xmm3, %xmm0 -vpunpckldq %xmm7, %xmm6, %xmm3 -vpunpckhdq %xmm7, %xmm6, %xmm7 -vpunpcklqdq %xmm3, %xmm4, %xmm6 -vpunpckhqdq %xmm3, %xmm4, %xmm4 -vpxor 64(%eax), %xmm4, %xmm3 -vpunpcklqdq %xmm7, %xmm0, %xmm4 -vpunpckhqdq %xmm7, %xmm0, %xmm7 -vpxor (%eax), %xmm6, %xmm6 -vpxor 128(%eax), %xmm4, %xmm4 -vpxor 192(%eax), %xmm7, %xmm0 -vmovdqu %xmm6, (%esi) -vmovdqu %xmm4, 128(%esi) -vmovdqu %xmm3, 64(%esi) -vmovdqu %xmm0, 192(%esi) -vpaddd 304(%esp), %xmm5, %xmm6 -vmovdqu 640(%esp), %xmm5 -vpaddd 288(%esp), %xmm5, %xmm4 -vmovdqu 592(%esp), %xmm5 -vpaddd 272(%esp), %xmm5, %xmm7 -vpaddd 256(%esp), %xmm2, %xmm3 -vpunpckldq %xmm4, %xmm6, %xmm0 -vpunpckldq %xmm3, %xmm7, %xmm5 -vpunpckhdq %xmm4, %xmm6, %xmm2 -vpunpckhdq %xmm3, %xmm7, %xmm3 -vpunpcklqdq %xmm5, %xmm0, %xmm6 -vpunpckhqdq %xmm5, %xmm0, %xmm7 -vpunpcklqdq %xmm3, %xmm2, %xmm5 -vpunpckhqdq %xmm3, %xmm2, %xmm2 -vpxor 16(%eax), %xmm6, %xmm4 -vpxor 144(%eax), %xmm5, %xmm6 -vpxor 208(%eax), %xmm2, %xmm5 -vpaddd 240(%esp), %xmm1, %xmm2 -vmovdqu 48(%esp), %xmm1 -vpxor 80(%eax), %xmm7, %xmm0 -vmovdqu %xmm6, 144(%esi) -vmovdqu %xmm5, 208(%esi) -vmovdqu %xmm0, 80(%esi) -vmovdqu %xmm4, 16(%esi) -vpaddd 224(%esp), %xmm1, %xmm6 -vmovdqu 496(%esp), %xmm1 -vmovdqu 480(%esp), %xmm5 -vpaddd 208(%esp), %xmm1, %xmm0 -vpaddd 192(%esp), %xmm5, %xmm3 -vpunpckldq %xmm6, %xmm2, %xmm7 -vpunpckhdq %xmm6, %xmm2, %xmm2 -vpunpckldq %xmm3, %xmm0, %xmm6 -vpunpckhdq %xmm3, %xmm0, %xmm5 -vpunpcklqdq %xmm6, %xmm7, %xmm4 -vpunpckhqdq %xmm6, %xmm7, %xmm0 -vpunpcklqdq %xmm5, %xmm2, %xmm3 -vpunpckhqdq %xmm5, %xmm2, %xmm7 -vpxor 32(%eax), %xmm4, %xmm1 -vpxor 96(%eax), %xmm0, %xmm4 -vpxor 160(%eax), %xmm3, %xmm6 -vpxor 224(%eax), %xmm7, %xmm5 -vmovdqu %xmm1, 32(%esi) -vmovdqu %xmm4, 96(%esi) -vmovdqu %xmm6, 160(%esi) -vmovdqu %xmm5, 224(%esi) -vmovdqu 608(%esp), %xmm1 -vmovdqu 64(%esp), %xmm2 -vmovdqu 624(%esp), %xmm0 -vmovdqu 512(%esp), %xmm3 -vpaddd 400(%esp), %xmm1, %xmm7 -vpaddd 416(%esp), %xmm2, %xmm1 -vpaddd 176(%esp), %xmm0, %xmm2 -vpaddd 384(%esp), %xmm3, %xmm0 -vpunpckldq %xmm1, %xmm7, %xmm6 -vpunpckldq %xmm0, %xmm2, %xmm4 -vpunpckhdq %xmm1, %xmm7, %xmm5 -vpunpckhdq %xmm0, %xmm2, %xmm2 -vpunpcklqdq %xmm4, %xmm6, %xmm3 -vpxor 48(%eax), %xmm3, %xmm1 -vpunpckhqdq %xmm4, %xmm6, %xmm0 +vmovdqu %xmm3, 400(%esp) +vpaddd 272(%esp), %xmm5, %xmm5 +vpaddd 288(%esp), %xmm2, %xmm2 +vpaddd 304(%esp), %xmm4, %xmm3 +testl %eax, %eax +jne chacha_blocks_avx_7 +vmovdqu %xmm0, (%esp) +vmovdqu 400(%esp), %xmm0 +vpunpckldq %xmm0, %xmm5, %xmm7 +vpunpckldq %xmm3, %xmm2, %xmm4 +vmovdqu %xmm6, 16(%esp) +vpunpcklqdq %xmm4, %xmm7, %xmm6 +vpunpckhqdq %xmm4, %xmm7, %xmm4 +vpunpckhdq %xmm0, %xmm5, %xmm5 +vpunpckhdq %xmm3, %xmm2, %xmm2 vpunpcklqdq %xmm2, %xmm5, %xmm3 vpunpckhqdq %xmm2, %xmm5, %xmm5 -vpxor 112(%eax), %xmm0, %xmm4 -vpxor 176(%eax), %xmm3, %xmm6 -vpxor 240(%eax), %xmm5, %xmm7 -addl $256, %eax -vmovdqu %xmm1, 48(%esi) -vmovdqu %xmm4, 112(%esi) -vmovdqu %xmm6, 176(%esi) -vmovdqu %xmm7, 240(%esi) +vmovdqu %xmm6, (%edx) +vmovdqu %xmm4, 64(%edx) +vmovdqu %xmm3, 128(%edx) +vmovdqu %xmm5, 192(%edx) +vmovdqu 544(%esp), %xmm0 +vmovdqu 384(%esp), %xmm2 +vmovdqu 560(%esp), %xmm4 +vmovdqu 592(%esp), %xmm6 +vpaddd 336(%esp), %xmm0, %xmm7 +vpaddd 240(%esp), %xmm2, %xmm5 +vpaddd 320(%esp), %xmm4, %xmm3 +vpaddd 208(%esp), %xmm6, %xmm0 +vpunpckldq %xmm3, %xmm5, %xmm2 +vpunpckldq %xmm0, %xmm7, %xmm4 +vpunpckhdq %xmm3, %xmm5, %xmm3 +vpunpckhdq %xmm0, %xmm7, %xmm7 +vpunpcklqdq %xmm4, %xmm2, %xmm6 +vpunpckhqdq %xmm4, %xmm2, %xmm4 +vpunpcklqdq %xmm7, %xmm3, %xmm5 +vpunpckhqdq %xmm7, %xmm3, %xmm3 +vpaddd 192(%esp), %xmm1, %xmm2 +vmovdqu (%esp), %xmm1 +vmovdqu %xmm4, 80(%edx) +vmovdqu %xmm3, 208(%edx) +vmovdqu %xmm5, 144(%edx) +vmovdqu %xmm6, 16(%edx) +vmovdqu 528(%esp), %xmm3 +vmovdqu 512(%esp), %xmm4 +vpaddd 176(%esp), %xmm1, %xmm5 +vpaddd 160(%esp), %xmm3, %xmm1 +vpaddd 144(%esp), %xmm4, %xmm7 +vpunpckldq %xmm5, %xmm2, %xmm0 +vpunpckldq %xmm7, %xmm1, %xmm6 +vpunpckhdq %xmm5, %xmm2, %xmm5 +vpunpckhdq %xmm7, %xmm1, %xmm1 +vpunpcklqdq %xmm6, %xmm0, %xmm3 +vpunpcklqdq %xmm1, %xmm5, %xmm2 +vmovdqu %xmm3, 32(%edx) +vmovdqu %xmm2, 160(%edx) +vpunpckhqdq %xmm1, %xmm5, %xmm7 +vmovdqu 464(%esp), %xmm3 +vmovdqu 16(%esp), %xmm1 +vmovdqu 480(%esp), %xmm5 +vmovdqu 496(%esp), %xmm2 +vpaddd 368(%esp), %xmm3, %xmm4 +vpaddd 128(%esp), %xmm5, %xmm5 +vpaddd 256(%esp), %xmm2, %xmm2 +vpunpckhqdq %xmm6, %xmm0, %xmm6 +vpaddd 352(%esp), %xmm1, %xmm0 +vmovdqu %xmm6, 96(%edx) +vmovdqu %xmm7, 224(%edx) +vpunpckldq %xmm0, %xmm4, %xmm6 +vpunpckldq %xmm2, %xmm5, %xmm7 +vpunpckhdq %xmm0, %xmm4, %xmm0 +vpunpckhdq %xmm2, %xmm5, %xmm4 +vpunpcklqdq %xmm7, %xmm6, %xmm3 +vpunpckhqdq %xmm7, %xmm6, %xmm1 +vpunpcklqdq %xmm4, %xmm0, %xmm2 +vpunpckhqdq %xmm4, %xmm0, %xmm0 +vmovdqu %xmm3, 48(%edx) +vmovdqu %xmm1, 112(%edx) +vmovdqu %xmm2, 176(%edx) +vmovdqu %xmm0, 240(%edx) jmp chacha_blocks_avx_8 -chacha_blocks_avx_37: -vmovdqu %xmm2, 656(%esp) -vmovdqu %xmm1, (%esp) -vmovdqu %xmm0, 48(%esp) -vmovdqu 544(%esp), %xmm1 +chacha_blocks_avx_7: +vmovdqu 400(%esp), %xmm7 +vpunpckldq %xmm7, %xmm5, %xmm4 +vpunpckhdq %xmm7, %xmm5, %xmm7 +vpunpckldq %xmm3, %xmm2, %xmm5 +vpunpckhdq %xmm3, %xmm2, %xmm3 +vpunpcklqdq %xmm5, %xmm4, %xmm2 +vpunpckhqdq %xmm5, %xmm4, %xmm4 +vpxor 64(%eax), %xmm4, %xmm5 +vpunpcklqdq %xmm3, %xmm7, %xmm4 +vpunpckhqdq %xmm3, %xmm7, %xmm3 +vpxor 128(%eax), %xmm4, %xmm4 +vpxor 192(%eax), %xmm3, %xmm7 +vpxor (%eax), %xmm2, %xmm2 +vmovdqu %xmm4, 128(%edx) +vmovdqu %xmm2, (%edx) +vmovdqu %xmm5, 64(%edx) +vmovdqu %xmm7, 192(%edx) +vmovdqu 384(%esp), %xmm4 +vpaddd 240(%esp), %xmm4, %xmm3 vmovdqu 560(%esp), %xmm2 -vmovdqu 576(%esp), %xmm0 -vmovdqu %xmm6, 64(%esp) -vpaddd 368(%esp), %xmm4, %xmm7 -vpaddd 352(%esp), %xmm1, %xmm6 -vpaddd 336(%esp), %xmm2, %xmm3 -vpaddd 320(%esp), %xmm0, %xmm0 -vpunpckldq %xmm6, %xmm7, %xmm1 +vmovdqu 544(%esp), %xmm5 +vmovdqu 592(%esp), %xmm4 +vpaddd 320(%esp), %xmm2, %xmm2 +vpaddd 336(%esp), %xmm5, %xmm7 +vpaddd 208(%esp), %xmm4, %xmm4 +vpunpckldq %xmm2, %xmm3, %xmm5 +vpunpckhdq %xmm2, %xmm3, %xmm2 +vpunpckldq %xmm4, %xmm7, %xmm3 +vpunpckhdq %xmm4, %xmm7, %xmm4 +vpunpcklqdq %xmm3, %xmm5, %xmm7 +vpunpckhqdq %xmm3, %xmm5, %xmm5 +vpxor 80(%eax), %xmm5, %xmm3 +vpunpcklqdq %xmm4, %xmm2, %xmm5 +vpunpckhqdq %xmm4, %xmm2, %xmm2 +vpxor 16(%eax), %xmm7, %xmm7 +vpxor 144(%eax), %xmm5, %xmm5 +vpxor 208(%eax), %xmm2, %xmm4 +vmovdqu %xmm7, 16(%edx) +vmovdqu %xmm5, 144(%edx) +vmovdqu %xmm3, 80(%edx) +vmovdqu %xmm4, 208(%edx) +vpaddd 176(%esp), %xmm0, %xmm7 +vpaddd 192(%esp), %xmm1, %xmm5 +vmovdqu 528(%esp), %xmm0 +vmovdqu 512(%esp), %xmm1 +vpaddd 160(%esp), %xmm0, %xmm3 +vpaddd 144(%esp), %xmm1, %xmm0 +vpunpckldq %xmm7, %xmm5, %xmm1 vpunpckldq %xmm0, %xmm3, %xmm2 -vpunpcklqdq %xmm2, %xmm1, %xmm4 -vpunpckhqdq %xmm2, %xmm1, %xmm2 -vpunpckhdq %xmm6, %xmm7, %xmm6 -vpunpckhdq %xmm0, %xmm3, %xmm3 -vpunpcklqdq %xmm3, %xmm6, %xmm7 -vpunpckhqdq %xmm3, %xmm6, %xmm1 -vmovdqu %xmm4, (%esi) -vmovdqu %xmm2, 64(%esi) -vmovdqu %xmm7, 128(%esi) -vmovdqu %xmm1, 192(%esi) -vmovdqu 640(%esp), %xmm4 -vmovdqu 592(%esp), %xmm2 -vmovdqu 656(%esp), %xmm0 -vpaddd 304(%esp), %xmm5, %xmm5 -vpaddd 288(%esp), %xmm4, %xmm1 -vpaddd 272(%esp), %xmm2, %xmm7 -vpaddd 256(%esp), %xmm0, %xmm3 -vpunpckldq %xmm1, %xmm5, %xmm4 -vpunpckldq %xmm3, %xmm7, %xmm2 -vpunpcklqdq %xmm2, %xmm4, %xmm6 -vpunpckhqdq %xmm2, %xmm4, %xmm4 -vpunpckhdq %xmm1, %xmm5, %xmm5 -vpunpckhdq %xmm3, %xmm7, %xmm1 -vpunpcklqdq %xmm1, %xmm5, %xmm2 -vpunpckhqdq %xmm1, %xmm5, %xmm5 -vmovdqu %xmm6, 16(%esi) -vmovdqu %xmm4, 80(%esi) -vmovdqu %xmm2, 144(%esi) -vmovdqu %xmm5, 208(%esi) -vmovdqu (%esp), %xmm0 -vmovdqu 48(%esp), %xmm4 -vmovdqu 496(%esp), %xmm3 -vmovdqu 480(%esp), %xmm6 -vpaddd 240(%esp), %xmm0, %xmm0 -vpaddd 224(%esp), %xmm4, %xmm2 -vpaddd 208(%esp), %xmm3, %xmm5 -vpaddd 192(%esp), %xmm6, %xmm7 -vpunpckldq %xmm2, %xmm0, %xmm4 -vpunpckldq %xmm7, %xmm5, %xmm3 -vpunpcklqdq %xmm3, %xmm4, %xmm1 -vpunpckhqdq %xmm3, %xmm4, %xmm6 -vpunpckhdq %xmm2, %xmm0, %xmm2 vpunpckhdq %xmm7, %xmm5, %xmm7 -vmovdqu 64(%esp), %xmm0 -vpunpcklqdq %xmm7, %xmm2, %xmm5 -vpunpckhqdq %xmm7, %xmm2, %xmm2 -vmovdqu %xmm1, 32(%esi) -vmovdqu %xmm6, 96(%esi) -vmovdqu %xmm2, 224(%esi) -vmovdqu %xmm5, 160(%esi) -vmovdqu 608(%esp), %xmm1 -vmovdqu 624(%esp), %xmm6 -vmovdqu 512(%esp), %xmm7 -vpaddd 416(%esp), %xmm0, %xmm3 -vpaddd 400(%esp), %xmm1, %xmm4 -vpaddd 176(%esp), %xmm6, %xmm2 -vpaddd 384(%esp), %xmm7, %xmm0 -vpunpckldq %xmm3, %xmm4, %xmm5 -vpunpckldq %xmm0, %xmm2, %xmm6 -vpunpckhdq %xmm3, %xmm4, %xmm3 -vpunpckhdq %xmm0, %xmm2, %xmm4 -vpunpcklqdq %xmm6, %xmm5, %xmm1 -vpunpckhqdq %xmm6, %xmm5, %xmm5 -vpunpcklqdq %xmm4, %xmm3, %xmm0 -vpunpckhqdq %xmm4, %xmm3, %xmm2 -vmovdqu %xmm1, 48(%esi) -vmovdqu %xmm5, 112(%esi) -vmovdqu %xmm0, 176(%esi) -vmovdqu %xmm2, 240(%esi) +vpunpckhdq %xmm0, %xmm3, %xmm4 +vpunpcklqdq %xmm2, %xmm1, %xmm3 +vpunpckhqdq %xmm2, %xmm1, %xmm1 +vpunpcklqdq %xmm4, %xmm7, %xmm2 +vpunpckhqdq %xmm4, %xmm7, %xmm7 +vpxor 32(%eax), %xmm3, %xmm0 +vpxor 96(%eax), %xmm1, %xmm1 +vpxor 160(%eax), %xmm2, %xmm3 +vpxor 224(%eax), %xmm7, %xmm4 +vmovdqu %xmm0, 32(%edx) +vmovdqu %xmm1, 96(%edx) +vmovdqu %xmm3, 160(%edx) +vmovdqu %xmm4, 224(%edx) +vpaddd 352(%esp), %xmm6, %xmm0 +vmovdqu 480(%esp), %xmm6 +vpaddd 128(%esp), %xmm6, %xmm2 +vmovdqu 464(%esp), %xmm5 +vmovdqu 496(%esp), %xmm6 +vpaddd 368(%esp), %xmm5, %xmm1 +vpaddd 256(%esp), %xmm6, %xmm3 +vpunpckldq %xmm0, %xmm1, %xmm7 +vpunpckldq %xmm3, %xmm2, %xmm5 +vpunpckhdq %xmm0, %xmm1, %xmm1 +vpunpckhdq %xmm3, %xmm2, %xmm0 +vpunpcklqdq %xmm5, %xmm7, %xmm4 +vpunpckhqdq %xmm5, %xmm7, %xmm7 +vpunpcklqdq %xmm0, %xmm1, %xmm2 +vpunpckhqdq %xmm0, %xmm1, %xmm0 +vpxor 48(%eax), %xmm4, %xmm6 +vpxor 112(%eax), %xmm7, %xmm3 +vpxor 176(%eax), %xmm2, %xmm4 +vpxor 240(%eax), %xmm0, %xmm1 +addl $256, %eax +vmovdqu %xmm6, 48(%edx) +vmovdqu %xmm3, 112(%edx) +vmovdqu %xmm4, 176(%edx) +vmovdqu %xmm1, 240(%edx) chacha_blocks_avx_8: -movl 44(%esp), %ebx -addl $256, %esi -addl $-256, %ebx -movl %ebx, 44(%esp) -cmpl $256, %ebx +movl 420(%esp), %ecx +addl $256, %edx +addl $-256, %ecx +movl %ecx, 420(%esp) +cmpl $256, %ecx jae chacha_blocks_avx_4 -movl %edx, 32(%esp) -movl %edx, %edi -movl %ecx, 36(%esp) -movl %edi, 16(%esp) -movl %ecx, %edi -movl %edi, 20(%esp) -vmovdqu 128(%esp), %xmm6 -vmovdqu 112(%esp), %xmm7 -vmovdqu 96(%esp), %xmm5 -vmovdqu 80(%esp), %xmm0 -vmovdqu 448(%esp), %xmm1 -vmovdqu 464(%esp), %xmm2 -movl 432(%esp), %edx -movl 40(%esp), %ecx -vmovdqu 16(%esp), %xmm4 +chacha_blocks_avx_9: +movl 8(%ebp), %ecx +movl %edi, 32(%ecx) +movl %esi, 36(%ecx) +movl 420(%esp), %ebx +vmovdqu 32(%ecx), %xmm0 chacha_blocks_avx_10: +cmpl $128, %ebx +jb chacha_blocks_avx_16 +chacha_blocks_avx_11: +vmovdqu 64(%esp), %xmm3 +vmovdqa %xmm0, %xmm1 +vmovdqu 80(%esp), %xmm4 +vmovdqu 48(%esp), %xmm6 +vpaddq 96(%esp), %xmm0, %xmm2 +vmovdqu %xmm3, 32(%esp) +vmovdqu %xmm4, 16(%esp) +vmovdqu %xmm6, 128(%esp) +vmovdqu %xmm6, 160(%esp) +vmovdqu %xmm2, (%esp) +vmovdqu %xmm2, 144(%esp) +movl 424(%esp), %esi +vmovdqu 16(%esp), %xmm5 +vmovdqu 32(%esp), %xmm6 +vmovdqu %xmm0, 112(%esp) +chacha_blocks_avx_12: +vpaddd 160(%esp), %xmm3, %xmm0 +vpaddd 128(%esp), %xmm6, %xmm2 +vpxor %xmm0, %xmm1, %xmm1 +vmovdqu 448(%esp), %xmm7 +vmovdqu %xmm2, 176(%esp) +vpshufb %xmm7, %xmm1, %xmm1 +vpxor 144(%esp), %xmm2, %xmm2 +vpaddd %xmm1, %xmm4, %xmm4 +vpshufb %xmm7, %xmm2, %xmm2 +vpaddd %xmm2, %xmm5, %xmm5 +vpxor %xmm4, %xmm3, %xmm3 +vpxor %xmm5, %xmm6, %xmm7 +vpsrld $20, %xmm3, %xmm6 +vpslld $12, %xmm3, %xmm3 +vpor %xmm3, %xmm6, %xmm6 +vpsrld $20, %xmm7, %xmm3 +vpslld $12, %xmm7, %xmm7 +vpaddd %xmm6, %xmm0, %xmm0 +vpor %xmm7, %xmm3, %xmm7 +vpxor %xmm0, %xmm1, %xmm1 +vmovdqu %xmm0, 192(%esp) +vpaddd 176(%esp), %xmm7, %xmm3 +vmovdqu 432(%esp), %xmm0 +vpxor %xmm3, %xmm2, %xmm2 +vpshufb %xmm0, %xmm1, %xmm1 +vpshufb %xmm0, %xmm2, %xmm0 +vpaddd %xmm1, %xmm4, %xmm4 +vpaddd %xmm0, %xmm5, %xmm5 +vpxor %xmm4, %xmm6, %xmm6 +vpxor %xmm5, %xmm7, %xmm7 +vpsrld $25, %xmm6, %xmm2 +vpslld $7, %xmm6, %xmm6 +vpor %xmm6, %xmm2, %xmm2 +vpsrld $25, %xmm7, %xmm6 +vpslld $7, %xmm7, %xmm7 +vpor %xmm7, %xmm6, %xmm6 +vpshufd $147, 192(%esp), %xmm7 +vpshufd $147, %xmm3, %xmm3 +vpaddd %xmm2, %xmm7, %xmm7 +vpshufd $78, %xmm1, %xmm1 +vpaddd %xmm6, %xmm3, %xmm3 +vmovdqu %xmm7, 208(%esp) +vpxor %xmm7, %xmm1, %xmm7 +vmovdqu 448(%esp), %xmm1 +vpshufd $78, %xmm0, %xmm0 +vpshufb %xmm1, %xmm7, %xmm7 +vpxor %xmm3, %xmm0, %xmm0 +vpshufb %xmm1, %xmm0, %xmm0 +vpshufd $57, %xmm4, %xmm4 +vpshufd $57, %xmm5, %xmm5 +vpaddd %xmm7, %xmm4, %xmm1 +vpaddd %xmm0, %xmm5, %xmm5 +vpxor %xmm1, %xmm2, %xmm4 +vpxor %xmm5, %xmm6, %xmm2 +vpsrld $20, %xmm4, %xmm6 +vpslld $12, %xmm4, %xmm4 +vpor %xmm4, %xmm6, %xmm4 +vpsrld $20, %xmm2, %xmm6 +vpslld $12, %xmm2, %xmm2 +vpor %xmm2, %xmm6, %xmm2 +vpaddd 208(%esp), %xmm4, %xmm6 +vpaddd %xmm2, %xmm3, %xmm3 +vmovdqu %xmm2, 224(%esp) +vpxor %xmm6, %xmm7, %xmm7 +vmovdqu 432(%esp), %xmm2 +vpxor %xmm3, %xmm0, %xmm0 +vpshufb %xmm2, %xmm7, %xmm7 +vpshufb %xmm2, %xmm0, %xmm0 +vpshufd $57, %xmm3, %xmm3 +vpaddd %xmm0, %xmm5, %xmm5 +vmovdqu %xmm3, 128(%esp) +vpaddd %xmm7, %xmm1, %xmm3 +vpshufd $78, %xmm0, %xmm0 +vpxor %xmm3, %xmm4, %xmm2 +vmovdqu %xmm0, 144(%esp) +vpxor 224(%esp), %xmm5, %xmm0 +vpshufd $57, %xmm6, %xmm6 +vmovdqu %xmm6, 160(%esp) +vpsrld $25, %xmm2, %xmm6 +vpshufd $78, %xmm7, %xmm1 +vpslld $7, %xmm2, %xmm7 +vpsrld $25, %xmm0, %xmm2 +vpslld $7, %xmm0, %xmm0 +vpshufd $147, %xmm3, %xmm4 +vpor %xmm7, %xmm6, %xmm3 +vpshufd $147, %xmm5, %xmm5 +vpor %xmm0, %xmm2, %xmm6 +addl $-2, %esi +jne chacha_blocks_avx_12 +chacha_blocks_avx_13: +vmovdqu 64(%esp), %xmm2 +vmovdqu %xmm5, 16(%esp) +vpaddd %xmm3, %xmm2, %xmm7 +vmovdqu %xmm6, 32(%esp) +vmovdqu 112(%esp), %xmm0 +vmovdqu 48(%esp), %xmm5 +vpaddd %xmm1, %xmm0, %xmm1 +vmovdqu 160(%esp), %xmm6 +vmovdqu 80(%esp), %xmm3 +vpaddd %xmm6, %xmm5, %xmm6 +vpaddd 128(%esp), %xmm5, %xmm0 +vpaddd %xmm4, %xmm3, %xmm4 +vpaddd 32(%esp), %xmm2, %xmm5 +vpaddd 16(%esp), %xmm3, %xmm2 +vmovdqu (%esp), %xmm3 +vpaddd 144(%esp), %xmm3, %xmm3 +testl %eax, %eax +je chacha_blocks_avx_15 +chacha_blocks_avx_14: +vpxor (%eax), %xmm6, %xmm6 +vpxor 16(%eax), %xmm7, %xmm7 +vpxor 32(%eax), %xmm4, %xmm4 +vpxor 48(%eax), %xmm1, %xmm1 +vpxor 64(%eax), %xmm0, %xmm0 +vpxor 80(%eax), %xmm5, %xmm5 +vpxor 96(%eax), %xmm2, %xmm2 +vpxor 112(%eax), %xmm3, %xmm3 +addl $128, %eax +chacha_blocks_avx_15: +vmovdqu %xmm0, 64(%edx) +vmovdqu %xmm6, (%edx) +vmovdqu %xmm7, 16(%edx) +vmovdqu %xmm4, 32(%edx) +vmovdqu %xmm1, 48(%edx) +vmovdqu %xmm5, 80(%edx) +vmovdqu %xmm2, 96(%edx) +vmovdqu %xmm3, 112(%edx) +addl $-128, %ebx +addl $128, %edx +vmovdqu (%esp), %xmm0 +vpaddq 96(%esp), %xmm0, %xmm0 +chacha_blocks_avx_16: movl %ebx, %edi testl %ebx, %ebx -jne chacha_blocks_avx_12 -chacha_blocks_avx_11: -movl 8(%ebp), %eax -vmovdqu %xmm4, 32(%eax) +jne chacha_blocks_avx_18 +chacha_blocks_avx_17: +vmovdqu %xmm0, 32(%ecx) addl $1268, %esp popl %ebx popl %edi @@ -542,153 +684,155 @@ popl %esi movl %ebp, %esp popl %ebp ret -chacha_blocks_avx_12: -movl $0, 20(%esp) -movl %ecx, 40(%esp) -vmovdqu %xmm0, 80(%esp) -vmovdqu %xmm1, 448(%esp) -vmovdqu %xmm2, 464(%esp) -movl %edi, 36(%esp) -movl %ebx, 44(%esp) -movl %edx, 432(%esp) -movl 20(%esp), %ecx -jmp chacha_blocks_avx_13 -chacha_blocks_avx_29: -movl %edx, 44(%esp) -addl $64, %esi -chacha_blocks_avx_13: -incl %ecx -movl %ecx, %edx -shll $6, %edx -negl %edx -addl 36(%esp), %edx -lea 64(%edx), %ebx +chacha_blocks_avx_18: +movl %edi, 20(%esp) +xorl %esi, %esi +movl %ebx, 420(%esp) +vmovdqu 80(%esp), %xmm7 +vmovdqu 64(%esp), %xmm1 +vmovdqu 48(%esp), %xmm6 +jmp chacha_blocks_avx_19 +chacha_blocks_avx_35: +movl %ecx, 420(%esp) +addl $64, %edx +chacha_blocks_avx_19: +incl %esi +movl %esi, %ecx +shll $6, %ecx +negl %ecx +addl 20(%esp), %ecx +lea 64(%ecx), %ebx cmpl $64, %ebx -jae chacha_blocks_avx_24 +jae chacha_blocks_avx_30 +chacha_blocks_avx_20: testl %eax, %eax -je chacha_blocks_avx_23 +je chacha_blocks_avx_29 +chacha_blocks_avx_21: testl %ebx, %ebx -je chacha_blocks_avx_22 +je chacha_blocks_avx_28 +chacha_blocks_avx_22: movl %ebx, %edi shrl $1, %edi -movl %edi, 24(%esp) +movl %edi, 12(%esp) testl %edi, %edi -jbe chacha_blocks_avx_31 -movl %esi, 32(%esp) +jbe chacha_blocks_avx_37 +chacha_blocks_avx_23: +movl %esi, 8(%esp) xorl %edi, %edi +movl %ecx, 4(%esp) movl %edx, 16(%esp) -movl %ecx, 20(%esp) -movl 24(%esp), %esi -chacha_blocks_avx_18: +movl 12(%esp), %esi +chacha_blocks_avx_24: movzbl (%eax,%edi,2), %edx -movb %dl, 192(%esp,%edi,2) +movb %dl, 128(%esp,%edi,2) movzbl 1(%eax,%edi,2), %ecx -movb %cl, 193(%esp,%edi,2) +movb %cl, 129(%esp,%edi,2) incl %edi cmpl %esi, %edi -jb chacha_blocks_avx_18 -movl 16(%esp), %edx +jb chacha_blocks_avx_24 +chacha_blocks_avx_25: +movl 4(%esp), %ecx lea 1(%edi,%edi), %edi -movl 20(%esp), %ecx -movl 32(%esp), %esi -movl %edi, 28(%esp) -chacha_blocks_avx_20: +movl 8(%esp), %esi +movl 16(%esp), %edx +movl %edi, (%esp) +chacha_blocks_avx_26: lea -1(%edi), %edi cmpl %ebx, %edi -jae chacha_blocks_avx_22 +jae chacha_blocks_avx_28 +chacha_blocks_avx_27: movzbl (%edi,%eax), %eax -movl 28(%esp), %edi -movb %al, 191(%esp,%edi) -chacha_blocks_avx_22: -lea 192(%esp), %eax -chacha_blocks_avx_23: -movl %esi, 40(%esp) -lea 192(%esp), %esi -chacha_blocks_avx_24: -vmovdqu %xmm5, 96(%esp) -vmovdqa %xmm5, %xmm0 -vmovdqu %xmm4, (%esp) -vmovdqa %xmm7, %xmm3 -movl %esi, 32(%esp) -xorl %edi, %edi -vmovdqu %xmm6, 128(%esp) +movl (%esp), %edi +movb %al, 127(%esp,%edi) +chacha_blocks_avx_28: +lea 128(%esp), %eax +chacha_blocks_avx_29: +movl %edx, 416(%esp) +lea 128(%esp), %edx +chacha_blocks_avx_30: +vmovdqu %xmm0, 112(%esp) vmovdqa %xmm6, %xmm2 -vmovdqu %xmm7, 112(%esp) -vmovdqa %xmm4, %xmm1 -movl %eax, 48(%esp) -vmovdqu 448(%esp), %xmm4 -vmovdqu 464(%esp), %xmm5 -movl 432(%esp), %esi -chacha_blocks_avx_25: -vpaddd %xmm3, %xmm0, %xmm6 +movl %edx, 16(%esp) +xorl %edi, %edi +movl %eax, 24(%esp) +vmovdqa %xmm1, %xmm3 +vmovdqu 448(%esp), %xmm1 +vmovdqa %xmm7, %xmm4 +movl 424(%esp), %edx +vmovdqa %xmm0, %xmm5 +vmovdqu 432(%esp), %xmm0 +chacha_blocks_avx_31: +vpaddd %xmm3, %xmm2, %xmm6 incl %edi -vpxor %xmm6, %xmm1, %xmm0 -vpshufb %xmm5, %xmm0, %xmm1 -vpaddd %xmm1, %xmm2, %xmm0 +vpxor %xmm6, %xmm5, %xmm2 +vpshufb %xmm1, %xmm2, %xmm5 +vpaddd %xmm5, %xmm4, %xmm2 lea (%edi,%edi), %eax -vpxor %xmm0, %xmm3, %xmm2 -vpsrld $20, %xmm2, %xmm3 -vpslld $12, %xmm2, %xmm7 -vpxor %xmm7, %xmm3, %xmm7 +vpxor %xmm2, %xmm3, %xmm4 +vpsrld $20, %xmm4, %xmm3 +vpslld $12, %xmm4, %xmm7 +vpor %xmm7, %xmm3, %xmm7 vpaddd %xmm7, %xmm6, %xmm3 -vpxor %xmm3, %xmm1, %xmm1 -vpshufb %xmm4, %xmm1, %xmm2 -vpaddd %xmm2, %xmm0, %xmm6 -vpxor %xmm6, %xmm7, %xmm0 -vpsrld $25, %xmm0, %xmm1 -vpslld $7, %xmm0, %xmm7 +vpxor %xmm3, %xmm5, %xmm5 +vpshufb %xmm0, %xmm5, %xmm4 +vpaddd %xmm4, %xmm2, %xmm6 +vpxor %xmm6, %xmm7, %xmm2 +vpsrld $25, %xmm2, %xmm5 +vpslld $7, %xmm2, %xmm7 vpshufd $147, %xmm3, %xmm3 -vpxor %xmm7, %xmm1, %xmm1 -vpshufd $78, %xmm2, %xmm2 -vpaddd %xmm1, %xmm3, %xmm0 -vpxor %xmm0, %xmm2, %xmm2 -vpshufb %xmm5, %xmm2, %xmm7 +vpor %xmm7, %xmm5, %xmm5 +vpshufd $78, %xmm4, %xmm4 +vpaddd %xmm5, %xmm3, %xmm2 +vpxor %xmm2, %xmm4, %xmm4 +vpshufb %xmm1, %xmm4, %xmm7 vpshufd $57, %xmm6, %xmm6 vpaddd %xmm7, %xmm6, %xmm3 -vpxor %xmm3, %xmm1, %xmm2 -vpsrld $20, %xmm2, %xmm1 -vpslld $12, %xmm2, %xmm6 -vpxor %xmm6, %xmm1, %xmm2 -vpaddd %xmm2, %xmm0, %xmm1 -vpxor %xmm1, %xmm7, %xmm0 -vpshufb %xmm4, %xmm0, %xmm7 +vpxor %xmm3, %xmm5, %xmm4 +vpsrld $20, %xmm4, %xmm5 +vpslld $12, %xmm4, %xmm6 +vpor %xmm6, %xmm5, %xmm4 +vpaddd %xmm4, %xmm2, %xmm5 +vpxor %xmm5, %xmm7, %xmm2 +vpshufb %xmm0, %xmm2, %xmm7 vpaddd %xmm7, %xmm3, %xmm3 -vpxor %xmm3, %xmm2, %xmm6 -vpshufd $57, %xmm1, %xmm0 -vpshufd $78, %xmm7, %xmm1 +vpxor %xmm3, %xmm4, %xmm6 +vpshufd $57, %xmm5, %xmm2 +vpshufd $78, %xmm7, %xmm5 vpslld $7, %xmm6, %xmm7 -vpshufd $147, %xmm3, %xmm2 +vpshufd $147, %xmm3, %xmm4 vpsrld $25, %xmm6, %xmm3 -vpxor %xmm7, %xmm3, %xmm3 -cmpl %esi, %eax -jne chacha_blocks_avx_25 -vmovdqu 128(%esp), %xmm6 -vmovdqu 112(%esp), %xmm7 +vpor %xmm7, %xmm3, %xmm3 +cmpl %edx, %eax +jne chacha_blocks_avx_31 +chacha_blocks_avx_32: +vmovdqu 80(%esp), %xmm7 +vmovdqu 64(%esp), %xmm1 +vpaddd %xmm7, %xmm4, %xmm4 +vmovdqu 48(%esp), %xmm6 +vpaddd %xmm1, %xmm3, %xmm3 +vmovdqu 112(%esp), %xmm0 vpaddd %xmm6, %xmm2, %xmm2 -vmovdqu 96(%esp), %xmm5 -vpaddd %xmm7, %xmm3, %xmm3 -vmovdqu (%esp), %xmm4 -vpaddd %xmm5, %xmm0, %xmm0 -movl 48(%esp), %eax -vpaddd %xmm4, %xmm1, %xmm1 -movl 32(%esp), %esi +movl 24(%esp), %eax +vpaddd %xmm0, %xmm5, %xmm5 +movl 16(%esp), %edx testl %eax, %eax -je chacha_blocks_avx_28 -vpxor (%eax), %xmm0, %xmm0 +je chacha_blocks_avx_34 +chacha_blocks_avx_33: +vpxor (%eax), %xmm2, %xmm2 vpxor 16(%eax), %xmm3, %xmm3 -vpxor 32(%eax), %xmm2, %xmm2 -vpxor 48(%eax), %xmm1, %xmm1 +vpxor 32(%eax), %xmm4, %xmm4 +vpxor 48(%eax), %xmm5, %xmm5 addl $64, %eax -chacha_blocks_avx_28: -vmovdqu %xmm0, (%esi) -vmovdqu %xmm3, 16(%esi) -vmovdqu %xmm2, 32(%esi) -vmovdqu %xmm1, 48(%esi) -vpaddq 80(%esp), %xmm4, %xmm4 +chacha_blocks_avx_34: +vmovdqu %xmm2, (%edx) +vmovdqu %xmm3, 16(%edx) +vmovdqu %xmm4, 32(%edx) +vmovdqu %xmm5, 48(%edx) +vpaddq 96(%esp), %xmm0, %xmm0 cmpl $64, %ebx -jbe chacha_blocks_avx_32 -jmp chacha_blocks_avx_29 -chacha_blocks_avx_30: +jbe chacha_blocks_avx_38 +jmp chacha_blocks_avx_35 +chacha_blocks_avx_36: addl $1268, %esp popl %ebx popl %edi @@ -696,25 +840,28 @@ popl %esi movl %ebp, %esp popl %ebp ret -chacha_blocks_avx_31: +chacha_blocks_avx_37: movl $1, %edi -movl %edi, 28(%esp) -jmp chacha_blocks_avx_20 -chacha_blocks_avx_32: -movl 44(%esp), %ebx -movl 40(%esp), %ecx +movl %edi, (%esp) +jmp chacha_blocks_avx_26 +chacha_blocks_avx_38: +movl 420(%esp), %ebx +movl 8(%ebp), %ecx cmpl $64, %ebx -jae chacha_blocks_avx_11 +jae chacha_blocks_avx_17 +chacha_blocks_avx_39: testl %ebx, %ebx -jbe chacha_blocks_avx_11 -xorl %edx, %edx -chacha_blocks_avx_35: -movzbl (%edx,%esi), %eax -movb %al, (%edx,%ecx) -incl %edx -cmpl %ebx, %edx -jb chacha_blocks_avx_35 -jmp chacha_blocks_avx_11 +jbe chacha_blocks_avx_17 +chacha_blocks_avx_40: +movl 416(%esp), %edi +xorl %esi, %esi +chacha_blocks_avx_41: +movzbl (%esi,%edx), %eax +movb %al, (%esi,%edi) +incl %esi +cmpl %ebx, %esi +jb chacha_blocks_avx_41 +jmp chacha_blocks_avx_17 FN_END chacha_blocks_avx diff --git a/app/extensions/chacha/chacha_avx2-32.inc b/app/extensions/chacha/chacha_avx2-32.inc index a15a646..a23a351 100644 --- a/app/extensions/chacha/chacha_avx2-32.inc +++ b/app/extensions/chacha/chacha_avx2-32.inc @@ -4,968 +4,879 @@ GLOBAL_HIDDEN_FN chacha_blocks_avx2 chacha_blocks_avx2_local: pushl %ebp movl %esp, %ebp -andl $-64, %esp +andl $~63, %esp pushl %esi pushl %edi pushl %ebx -subl $3828, %esp -pushl $1 -popl %ecx -movl 8(%ebp), %ebx -movl 12(%ebp), %eax -movl %eax, 2156(%esp) -movl 16(%ebp), %eax -vmovd %ecx, %xmm2 -LOAD_VAR_PIC chacha_constants, %edx -vmovdqu 0(%edx), %xmm3 -vmovdqu 16(%edx), %xmm0 -vmovdqu 32(%edx), %xmm1 -movl 48(%ebx), %ecx +subl $3124, %esp +movl $1, %eax +LOAD_VAR_PIC chacha_constants, %esi +movl 16(%ebp), %ebx movl 20(%ebp), %edx -vmovdqu %xmm0, 2160(%esp) -vmovdqu %xmm1, 2176(%esp) -vmovdqu %xmm2, 2080(%esp) -movl %eax, 2144(%esp) -movl %ecx, 2148(%esp) -xorl %ecx, %ecx -vmovdqu %xmm3, 512(%esp) +vmovd %eax, %xmm0 +vmovdqu 16(%esi), %ymm1 +vmovdqu 32(%esi), %ymm2 +vmovdqu %xmm0, 592(%esp) +vmovdqu %ymm1, 1568(%esp) +vmovdqu %ymm2, 1536(%esp) +movl 12(%ebp), %edi +movl %ebx, 1508(%esp) +testl %edx, %edx +je chacha_blocks_avx2_44 chacha_blocks_avx2_2: -vmovdqu (%ebx,%ecx,4), %xmm0 -vmovdqu %xmm0, 528(%esp,%ecx,4) -addl $4, %ecx -cmpl $12, %ecx -jb chacha_blocks_avx2_2 -chacha_blocks_avx2_3: -vmovdqu 512(%esp), %xmm0 -vmovdqu 528(%esp), %xmm1 -vmovdqu 544(%esp), %xmm2 -vmovdqu %xmm0, 2096(%esp) -vmovdqu %xmm1, 2112(%esp) -vmovdqu %xmm2, 2128(%esp) +movl 8(%ebp), %ecx +vmovdqu 0(%esi), %xmm5 +vmovdqu %xmm5, 544(%esp) +vmovdqu 16(%ecx), %xmm0 +vmovdqu (%ecx), %xmm1 +vmovdqu %xmm0, 576(%esp) +vmovdqu 32(%ecx), %xmm0 +movl 48(%ecx), %eax +vmovdqu %xmm1, 560(%esp) +movl %eax, 1516(%esp) +vmovq 8(%esi), %xmm5 +vmovq 8(%ecx), %xmm1 +vmovdqu %xmm0, 304(%esp) +vpsrldq $4, %xmm0, %xmm2 cmpl $512, %edx -jb chacha_blocks_avx2_11 +jb chacha_blocks_avx2_10 +chacha_blocks_avx2_3: +vpbroadcastd 312(%esp), %ymm7 +vmovdqu 576(%esp), %xmm4 +vmovdqu %ymm7, 704(%esp) +vmovdqu %xmm4, 288(%esp) +vmovdqu 560(%esp), %xmm6 +vmovdqu 544(%esp), %xmm3 +vmovdqu %xmm6, 272(%esp) +vpbroadcastd 316(%esp), %ymm7 +vmovdqu %ymm7, 672(%esp) +vmovdqu %xmm3, 256(%esp) +vmovd %xmm0, %ecx +vmovd %xmm2, %eax +vpbroadcastd 292(%esp), %ymm7 +vmovdqu %ymm7, 800(%esp) +vpbroadcastd %xmm4, %ymm0 +vpbroadcastd %xmm1, %ymm1 +vpbroadcastd 296(%esp), %ymm7 +vmovdqu %ymm0, 832(%esp) +vmovdqu %ymm1, 864(%esp) +vmovdqu %ymm7, 768(%esp) +vpbroadcastd %xmm3, %ymm2 +vpbroadcastd %xmm6, %ymm3 +vpbroadcastd 260(%esp), %ymm0 +vpbroadcastd 276(%esp), %ymm4 +vpbroadcastd 284(%esp), %ymm1 +vpbroadcastd 300(%esp), %ymm7 +vpbroadcastd %xmm5, %ymm6 +vpbroadcastd 268(%esp), %ymm5 +vmovdqu %ymm7, 736(%esp) +vmovdqu %ymm1, 1088(%esp) +vmovdqu %ymm4, 1056(%esp) +vmovdqu %ymm3, 1024(%esp) +vmovdqu %ymm5, 992(%esp) +vmovdqu %ymm6, 960(%esp) +vmovdqu %ymm0, 928(%esp) +vmovdqu %ymm2, 896(%esp) +movl %edx, 1512(%esp) +movl %esi, 1504(%esp) chacha_blocks_avx2_4: -vpbroadcastd 536(%esp), %ymm7 -vmovdqu %ymm7, 2048(%esp) -vpbroadcastd 540(%esp), %ymm7 -vmovdqu %ymm7, 2016(%esp) -vpbroadcastd 568(%esp), %ymm7 -vmovdqu %ymm7, 1856(%esp) -vpbroadcastd 572(%esp), %ymm7 -vmovdqu %ymm7, 1824(%esp) -vpbroadcastd 548(%esp), %ymm7 -vmovdqu %ymm7, 1952(%esp) -vbroadcasti128 2160(%esp), %ymm4 -vpbroadcastd 2128(%esp), %ymm0 -vpbroadcastd 552(%esp), %ymm7 -vmovdqu %ymm4, 2592(%esp) -vmovdqu %ymm0, 1984(%esp) -vmovdqu %ymm7, 1920(%esp) -vbroadcasti128 2176(%esp), %ymm6 -vpbroadcastd 2096(%esp), %ymm5 -vpbroadcastd 2112(%esp), %ymm4 -vpbroadcastd 516(%esp), %ymm3 -vpbroadcastd 520(%esp), %ymm2 -vpbroadcastd 524(%esp), %ymm1 -vpbroadcastd 532(%esp), %ymm0 -vpbroadcastd 556(%esp), %ymm7 -movl %edx, 2152(%esp) -movl 560(%esp), %ecx -movl 564(%esp), %ebx -movl 2156(%esp), %edx -vmovdqu %ymm7, 1888(%esp) -vmovdqu %ymm0, 1600(%esp) -vmovdqu %ymm4, 1568(%esp) -vmovdqu %ymm1, 1536(%esp) -vmovdqu %ymm2, 1504(%esp) -vmovdqu %ymm3, 1472(%esp) -vmovdqu %ymm5, 1440(%esp) -vmovdqu %ymm6, 2208(%esp) +movl %ecx, %edx +movl %eax, %esi +addl $1, %edx +movl %edx, 612(%esp) +movl %ecx, %edx +adcl $0, %esi +addl $2, %edx +movl %esi, 644(%esp) +movl %eax, %esi +movl %edx, 616(%esp) +movl %ecx, %edx +adcl $0, %esi +addl $3, %edx +movl %esi, 648(%esp) +movl %eax, %esi +movl %edx, 620(%esp) +movl %ecx, %edx +vmovdqu 864(%esp), %ymm3 +adcl $0, %esi +vmovdqu 832(%esp), %ymm7 +vmovdqu 896(%esp), %ymm2 +vmovdqu 960(%esp), %ymm5 +vmovdqu 1056(%esp), %ymm6 +vmovdqu %ymm3, 1760(%esp) +vmovdqu 800(%esp), %ymm3 +vmovdqu %ymm7, 1248(%esp) +vmovdqu 768(%esp), %ymm7 +vmovdqu 928(%esp), %ymm4 +vmovdqu %ymm6, 1792(%esp) +vmovdqu %ymm3, 1216(%esp) +vmovdqu 736(%esp), %ymm3 +vmovdqu %ymm7, 1728(%esp) +vmovdqu 704(%esp), %ymm7 +vmovdqu %ymm5, 1888(%esp) +vmovdqu %ymm2, 1824(%esp) +vmovdqu %ymm3, 1696(%esp) +vmovdqu 672(%esp), %ymm3 +vmovdqu 1088(%esp), %ymm6 +vmovdqu 1248(%esp), %ymm2 +vmovdqu %ymm7, 1632(%esp) +vmovdqu %ymm4, 1856(%esp) +vmovdqu %ymm3, 1600(%esp) +addl $4, %edx +movl %esi, 652(%esp) +movl %eax, %esi +movl %edx, 624(%esp) +movl %ecx, %edx +adcl $0, %esi +addl $5, %edx +movl %esi, 656(%esp) +movl %eax, %esi +movl %edx, 628(%esp) +movl %ecx, %edx +adcl $0, %esi +addl $6, %edx +movl %esi, 660(%esp) +movl %eax, %esi +movl %edx, 632(%esp) +movl %ecx, %edx +adcl $0, %esi +addl $7, %edx +movl %esi, 664(%esp) +movl %eax, %esi +adcl $0, %esi +movl %eax, 640(%esp) +movl %esi, 668(%esp) +vmovdqu 640(%esp), %ymm1 +movl %ecx, 608(%esp) +addl $8, %ecx +movl %edx, 636(%esp) +vmovdqu %ymm1, 1120(%esp) +adcl $0, %eax +vmovdqu %ymm1, 1184(%esp) +vmovdqu 608(%esp), %ymm0 +vmovdqu 992(%esp), %ymm1 +vmovdqu 1184(%esp), %ymm5 +vmovdqu %ymm0, 1152(%esp) +vmovdqu %ymm0, 1664(%esp) +vmovdqu %ymm1, 1920(%esp) +vmovdqu 1024(%esp), %ymm0 +vmovdqu 1216(%esp), %ymm1 +movl 1516(%esp), %edx +movl %ecx, 304(%esp) +movl %eax, 308(%esp) jmp chacha_blocks_avx2_5 -.p2align 6,,63 +.p2align 6 +nop +nop +nop +nop +nop chacha_blocks_avx2_5: -movl %ecx, %esi -movl %ebx, %edi -addl $1, %esi -movl %esi, 1380(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $2, %esi -movl %edi, 1412(%esp) -movl %ebx, %edi -movl %esi, 1384(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $3, %esi -movl %edi, 1416(%esp) -movl %ebx, %edi -movl %esi, 1388(%esp) -movl %ecx, %esi -vmovdqu 1920(%esp), %ymm4 -adcl $0, %edi -vmovdqu 1536(%esp), %ymm5 -vmovdqu 1600(%esp), %ymm0 -vmovdqu 2048(%esp), %ymm1 -vmovdqu 1472(%esp), %ymm7 -vmovdqu %ymm4, 2368(%esp) -vmovdqu 1888(%esp), %ymm4 -vmovdqu %ymm5, 2464(%esp) -vmovdqu %ymm0, 2432(%esp) -vmovdqu %ymm1, 2400(%esp) -vmovdqu 1568(%esp), %ymm5 -vmovdqu %ymm4, 2336(%esp) -vmovdqu 1856(%esp), %ymm4 -vmovdqu 2016(%esp), %ymm2 -vmovdqu 1984(%esp), %ymm1 -vmovdqu %ymm7, 2528(%esp) -vmovdqu 1952(%esp), %ymm0 -vmovdqu %ymm4, 2272(%esp) -vmovdqu 1824(%esp), %ymm4 -addl $4, %esi -movl %edi, 1420(%esp) -movl %ebx, %edi -movl %esi, 1392(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $5, %esi -movl %edi, 1424(%esp) -movl %ebx, %edi -movl %esi, 1396(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $6, %esi -movl %edi, 1428(%esp) -movl %ebx, %edi -movl %esi, 1400(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $7, %esi -movl %edi, 1432(%esp) -movl %ebx, %edi -adcl $0, %edi -movl %ebx, 1408(%esp) -movl %edi, 1436(%esp) -movl %ecx, 1376(%esp) -addl $8, %ecx -movl %esi, 1404(%esp) -vmovdqu 1408(%esp), %ymm6 -adcl $0, %ebx -vmovdqu 1376(%esp), %ymm3 -vmovdqu %ymm4, 2240(%esp) -vmovdqu %ymm6, 1632(%esp) -vmovdqu %ymm6, 1696(%esp) -vmovdqu %ymm3, 1664(%esp) -vmovdqu %ymm3, 2304(%esp) -vmovdqu 1504(%esp), %ymm6 -vmovdqu 1440(%esp), %ymm3 -vmovdqu %ymm6, 2560(%esp) -vmovdqu %ymm3, 2496(%esp) -vmovdqu 1696(%esp), %ymm6 -movl 2148(%esp), %esi -movl %ecx, 560(%esp) -movl %ebx, 564(%esp) -chacha_blocks_avx2_6: -vmovdqu 2432(%esp), %ymm7 -vmovdqu %ymm2, 2624(%esp) -vpaddd 2496(%esp), %ymm5, %ymm3 -vpaddd 2464(%esp), %ymm2, %ymm2 -vpaddd 2528(%esp), %ymm7, %ymm7 -vpxor 2304(%esp), %ymm3, %ymm4 -vmovdqu %ymm3, 2656(%esp) -vmovdqu 2592(%esp), %ymm3 -vmovdqu %ymm7, 2688(%esp) -vmovdqu %ymm2, 2752(%esp) -vpxor %ymm7, %ymm6, %ymm6 -vpxor 2240(%esp), %ymm2, %ymm2 -vmovdqu 2400(%esp), %ymm7 +vmovdqu 1792(%esp), %ymm7 +vmovdqu %ymm6, 1952(%esp) +vpaddd 1824(%esp), %ymm0, %ymm3 +vpaddd 1920(%esp), %ymm6, %ymm6 +vpaddd 1856(%esp), %ymm7, %ymm7 +vpxor 1664(%esp), %ymm3, %ymm4 +vmovdqu %ymm3, 1984(%esp) +vmovdqu 1568(%esp), %ymm3 +vmovdqu %ymm7, 2016(%esp) +vmovdqu %ymm6, 2080(%esp) +vpxor %ymm7, %ymm5, %ymm5 +vpxor 1600(%esp), %ymm6, %ymm6 +vmovdqu 1760(%esp), %ymm7 vpshufb %ymm3, %ymm4, %ymm4 +vpshufb %ymm3, %ymm5, %ymm5 vpshufb %ymm3, %ymm6, %ymm6 -vpshufb %ymm3, %ymm2, %ymm2 -vpaddd 2560(%esp), %ymm7, %ymm7 -vpaddd %ymm4, %ymm1, %ymm1 -vpaddd %ymm6, %ymm0, %ymm0 -vmovdqu %ymm2, 2784(%esp) -vmovdqu %ymm7, 2720(%esp) -vmovdqu %ymm1, 2816(%esp) -vmovdqu %ymm0, 2848(%esp) -vpxor 2272(%esp), %ymm7, %ymm7 -vpxor %ymm1, %ymm5, %ymm5 -vpxor 2432(%esp), %ymm0, %ymm0 +vpaddd 1888(%esp), %ymm7, %ymm7 +vpaddd %ymm4, %ymm2, %ymm2 +vpaddd %ymm5, %ymm1, %ymm1 +vmovdqu %ymm6, 2112(%esp) +vmovdqu %ymm7, 2048(%esp) +vmovdqu %ymm2, 2144(%esp) +vmovdqu %ymm1, 2176(%esp) +vpxor 1632(%esp), %ymm7, %ymm7 +vpxor %ymm2, %ymm0, %ymm0 +vpxor 1792(%esp), %ymm1, %ymm1 vpshufb %ymm3, %ymm7, %ymm7 -vpsrld $20, %ymm5, %ymm1 -vpslld $12, %ymm5, %ymm3 -vpxor %ymm3, %ymm1, %ymm5 -vpsrld $20, %ymm0, %ymm1 -vpslld $12, %ymm0, %ymm0 -vpaddd 2336(%esp), %ymm2, %ymm3 -vmovdqu %ymm5, 2880(%esp) -vpxor %ymm0, %ymm1, %ymm1 -vpaddd 2368(%esp), %ymm7, %ymm0 -vmovdqu %ymm3, 2944(%esp) -vpxor 2400(%esp), %ymm0, %ymm2 -vmovdqu %ymm0, 2912(%esp) -vpxor 2624(%esp), %ymm3, %ymm0 -vpsrld $20, %ymm2, %ymm3 -vpslld $12, %ymm2, %ymm2 -vpxor %ymm2, %ymm3, %ymm3 vpsrld $20, %ymm0, %ymm2 -vpslld $12, %ymm0, %ymm0 -vmovdqu %ymm3, 2976(%esp) -vpxor %ymm0, %ymm2, %ymm0 -vpaddd 2656(%esp), %ymm5, %ymm2 -vpaddd 2688(%esp), %ymm1, %ymm5 -vmovdqu %ymm2, 3008(%esp) -vmovdqu %ymm5, 3040(%esp) -vpxor %ymm2, %ymm4, %ymm2 -vpxor %ymm5, %ymm6, %ymm6 -vpaddd 2720(%esp), %ymm3, %ymm5 -vmovdqu 2208(%esp), %ymm4 -vpxor %ymm5, %ymm7, %ymm7 -vmovdqu %ymm5, 3136(%esp) -vpshufb %ymm4, %ymm2, %ymm2 +vpslld $12, %ymm0, %ymm3 +vpor %ymm3, %ymm2, %ymm0 +vpsrld $20, %ymm1, %ymm2 +vpslld $12, %ymm1, %ymm1 +vpaddd 1696(%esp), %ymm6, %ymm3 +vmovdqu %ymm0, 2208(%esp) +vpor %ymm1, %ymm2, %ymm2 +vpaddd 1728(%esp), %ymm7, %ymm1 +vmovdqu %ymm3, 2272(%esp) +vpxor 1760(%esp), %ymm1, %ymm6 +vmovdqu %ymm1, 2240(%esp) +vpxor 1952(%esp), %ymm3, %ymm1 +vpsrld $20, %ymm6, %ymm3 +vpslld $12, %ymm6, %ymm6 +vpor %ymm6, %ymm3, %ymm3 +vpsrld $20, %ymm1, %ymm6 +vpslld $12, %ymm1, %ymm1 +vmovdqu %ymm3, 2304(%esp) +vpor %ymm1, %ymm6, %ymm1 +vpaddd 1984(%esp), %ymm0, %ymm6 +vpaddd 2016(%esp), %ymm2, %ymm0 +vmovdqu %ymm6, 2336(%esp) +vmovdqu %ymm0, 2368(%esp) +vpxor %ymm6, %ymm4, %ymm6 +vpxor %ymm0, %ymm5, %ymm5 +vpaddd 2048(%esp), %ymm3, %ymm0 +vmovdqu 1536(%esp), %ymm4 +vpxor %ymm0, %ymm7, %ymm7 +vmovdqu %ymm0, 2464(%esp) +vpshufb %ymm4, %ymm6, %ymm6 +vpshufb %ymm4, %ymm5, %ymm5 +vpshufb %ymm4, %ymm7, %ymm0 +vmovdqu %ymm6, 2400(%esp) +vmovdqu %ymm5, 2432(%esp) +vmovdqu %ymm0, 2528(%esp) +vpaddd 2080(%esp), %ymm1, %ymm6 +vpaddd 2176(%esp), %ymm5, %ymm5 +vpaddd 2240(%esp), %ymm0, %ymm0 +vmovdqu %ymm6, 2496(%esp) +vmovdqu %ymm5, 2592(%esp) +vpxor 2112(%esp), %ymm6, %ymm6 +vpxor %ymm5, %ymm2, %ymm5 vpshufb %ymm4, %ymm6, %ymm6 -vpshufb %ymm4, %ymm7, %ymm5 -vmovdqu %ymm2, 3072(%esp) -vmovdqu %ymm6, 3104(%esp) -vmovdqu %ymm5, 3200(%esp) -vpaddd 2752(%esp), %ymm0, %ymm2 -vpaddd 2848(%esp), %ymm6, %ymm6 -vpaddd 2912(%esp), %ymm5, %ymm5 -vmovdqu %ymm2, 3168(%esp) -vmovdqu %ymm6, 3264(%esp) -vpxor 2784(%esp), %ymm2, %ymm2 -vpxor %ymm6, %ymm1, %ymm6 -vpshufb %ymm4, %ymm2, %ymm2 -vmovdqu 3072(%esp), %ymm4 -vpaddd 2816(%esp), %ymm4, %ymm7 -vpxor 2880(%esp), %ymm7, %ymm3 -vmovdqu %ymm7, 3232(%esp) -vpsrld $25, %ymm3, %ymm1 +vmovdqu 2400(%esp), %ymm4 +vpaddd 2144(%esp), %ymm4, %ymm7 +vpxor 2208(%esp), %ymm7, %ymm3 +vmovdqu %ymm7, 2560(%esp) +vpsrld $25, %ymm3, %ymm2 vpslld $7, %ymm3, %ymm4 -vpxor %ymm4, %ymm1, %ymm7 -vpsrld $25, %ymm6, %ymm1 -vpslld $7, %ymm6, %ymm6 -vpaddd 2944(%esp), %ymm2, %ymm4 -vmovdqu %ymm7, 3296(%esp) -vpxor %ymm6, %ymm1, %ymm3 -vpxor 2976(%esp), %ymm5, %ymm1 -vpxor %ymm4, %ymm0, %ymm0 -vmovdqu %ymm4, 3360(%esp) -vmovdqu %ymm3, 3328(%esp) -vpsrld $25, %ymm1, %ymm6 +vpor %ymm4, %ymm2, %ymm7 +vpsrld $25, %ymm5, %ymm2 +vpslld $7, %ymm5, %ymm5 +vpaddd 2272(%esp), %ymm6, %ymm4 +vmovdqu %ymm7, 2624(%esp) +vpor %ymm5, %ymm2, %ymm3 +vpxor 2304(%esp), %ymm0, %ymm2 +vpxor %ymm4, %ymm1, %ymm1 +vmovdqu %ymm4, 2688(%esp) +vmovdqu %ymm3, 2656(%esp) +vpsrld $25, %ymm2, %ymm5 +vpslld $7, %ymm2, %ymm2 +vpsrld $25, %ymm1, %ymm4 vpslld $7, %ymm1, %ymm1 -vpsrld $25, %ymm0, %ymm4 -vpslld $7, %ymm0, %ymm0 -vpxor %ymm1, %ymm6, %ymm1 -vpxor %ymm0, %ymm4, %ymm6 -vpaddd 3008(%esp), %ymm3, %ymm0 -vpaddd 3040(%esp), %ymm1, %ymm3 -vmovdqu %ymm6, 3392(%esp) -vmovdqu %ymm0, 3424(%esp) -vmovdqu %ymm3, 3456(%esp) -vpxor %ymm0, %ymm2, %ymm4 -vpxor 3072(%esp), %ymm3, %ymm3 -vmovdqu 2592(%esp), %ymm2 -vpshufb %ymm2, %ymm4, %ymm0 -vpshufb %ymm2, %ymm3, %ymm3 -vpaddd 3136(%esp), %ymm6, %ymm4 -vpaddd 3168(%esp), %ymm7, %ymm6 -vpaddd %ymm0, %ymm5, %ymm5 -vpxor 3104(%esp), %ymm4, %ymm7 -vmovdqu %ymm6, 3520(%esp) -vmovdqu %ymm5, 3584(%esp) -vmovdqu %ymm4, 3488(%esp) -vpxor 3200(%esp), %ymm6, %ymm6 -vpxor 3328(%esp), %ymm5, %ymm5 -vpshufb %ymm2, %ymm7, %ymm7 -vpshufb %ymm2, %ymm6, %ymm4 -vpaddd 3360(%esp), %ymm3, %ymm2 -vpsrld $20, %ymm5, %ymm6 -vmovdqu %ymm4, 3552(%esp) -vpxor %ymm2, %ymm1, %ymm1 -vmovdqu %ymm2, 3616(%esp) -vpslld $12, %ymm5, %ymm2 -vpxor %ymm2, %ymm6, %ymm5 -vpsrld $20, %ymm1, %ymm6 -vpslld $12, %ymm1, %ymm1 -vpaddd 3232(%esp), %ymm7, %ymm2 -vmovdqu %ymm5, 3648(%esp) -vpxor %ymm1, %ymm6, %ymm1 -vpaddd 3264(%esp), %ymm4, %ymm6 -vpxor 3392(%esp), %ymm2, %ymm4 -vpaddd 3424(%esp), %ymm5, %ymm5 -vmovdqu %ymm2, 3680(%esp) -vmovdqu %ymm6, 3712(%esp) -vpxor 3296(%esp), %ymm6, %ymm2 -vpsrld $20, %ymm4, %ymm6 -vpslld $12, %ymm4, %ymm4 -vmovdqu %ymm5, 2496(%esp) -vpxor %ymm5, %ymm0, %ymm5 -vpxor %ymm4, %ymm6, %ymm6 -vpsrld $20, %ymm2, %ymm4 +vpor %ymm2, %ymm5, %ymm2 +vpor %ymm1, %ymm4, %ymm5 +vpaddd 2336(%esp), %ymm3, %ymm1 +vpaddd 2368(%esp), %ymm2, %ymm3 +vmovdqu %ymm5, 2720(%esp) +vmovdqu %ymm1, 2752(%esp) +vmovdqu %ymm3, 2784(%esp) +vpxor %ymm1, %ymm6, %ymm4 +vpxor 2400(%esp), %ymm3, %ymm3 +vmovdqu 1568(%esp), %ymm6 +vpshufb %ymm6, %ymm4, %ymm1 +vpshufb %ymm6, %ymm3, %ymm3 +vpaddd 2464(%esp), %ymm5, %ymm4 +vpaddd 2496(%esp), %ymm7, %ymm5 +vpaddd %ymm1, %ymm0, %ymm0 +vpxor 2432(%esp), %ymm4, %ymm7 +vmovdqu %ymm5, 2848(%esp) +vmovdqu %ymm0, 2912(%esp) +vmovdqu %ymm4, 2816(%esp) +vpxor 2528(%esp), %ymm5, %ymm5 +vpxor 2656(%esp), %ymm0, %ymm0 +vpshufb %ymm6, %ymm7, %ymm7 +vpshufb %ymm6, %ymm5, %ymm4 +vpaddd 2688(%esp), %ymm3, %ymm6 +vpsrld $20, %ymm0, %ymm5 +vmovdqu %ymm4, 2880(%esp) +vpxor %ymm6, %ymm2, %ymm2 +vmovdqu %ymm6, 2944(%esp) +vpslld $12, %ymm0, %ymm6 +vpor %ymm6, %ymm5, %ymm0 +vpsrld $20, %ymm2, %ymm5 vpslld $12, %ymm2, %ymm2 -vmovdqu 2208(%esp), %ymm0 -vmovdqu %ymm6, 3744(%esp) -vpxor %ymm2, %ymm4, %ymm2 -vpaddd 3456(%esp), %ymm1, %ymm4 -vpaddd 3488(%esp), %ymm6, %ymm6 -vpshufb %ymm0, %ymm5, %ymm5 +vpaddd 2560(%esp), %ymm7, %ymm6 +vmovdqu %ymm0, 2976(%esp) +vpor %ymm2, %ymm5, %ymm2 +vpaddd 2592(%esp), %ymm4, %ymm5 +vpxor 2720(%esp), %ymm6, %ymm4 +vpaddd 2752(%esp), %ymm0, %ymm0 +vmovdqu %ymm6, 3008(%esp) +vmovdqu %ymm5, 3040(%esp) +vpxor 2624(%esp), %ymm5, %ymm6 +vpsrld $20, %ymm4, %ymm5 +vpslld $12, %ymm4, %ymm4 +vmovdqu %ymm0, 1824(%esp) +vpxor %ymm0, %ymm1, %ymm0 +vpor %ymm4, %ymm5, %ymm5 +vpsrld $20, %ymm6, %ymm4 +vpslld $12, %ymm6, %ymm6 +vmovdqu 1536(%esp), %ymm1 +vmovdqu %ymm5, 3072(%esp) +vpor %ymm6, %ymm4, %ymm6 +vpaddd 2784(%esp), %ymm2, %ymm4 +vpaddd 2816(%esp), %ymm5, %ymm5 +vpshufb %ymm1, %ymm0, %ymm0 vpxor %ymm4, %ymm3, %ymm3 -vpxor %ymm6, %ymm7, %ymm7 -vmovdqu %ymm4, 2528(%esp) -vmovdqu %ymm6, 2560(%esp) -vmovdqu %ymm5, 2240(%esp) -vpaddd 3520(%esp), %ymm2, %ymm4 -vpshufb %ymm0, %ymm3, %ymm3 -vpshufb %ymm0, %ymm7, %ymm6 -vpxor 3552(%esp), %ymm4, %ymm7 -vmovdqu %ymm3, 2304(%esp) -vmovdqu %ymm4, 2464(%esp) -vpaddd 3584(%esp), %ymm5, %ymm4 -vpaddd 3616(%esp), %ymm3, %ymm3 -vpshufb %ymm0, %ymm7, %ymm0 -vpxor 3648(%esp), %ymm4, %ymm5 -vpxor %ymm3, %ymm1, %ymm1 -vmovdqu %ymm3, 2336(%esp) -vmovdqu %ymm0, 2272(%esp) -vmovdqu %ymm4, 2368(%esp) -vpsrld $25, %ymm5, %ymm7 -vpslld $7, %ymm5, %ymm3 -vpsrld $25, %ymm1, %ymm5 -vpslld $7, %ymm1, %ymm1 -vpaddd 3712(%esp), %ymm0, %ymm0 -vpxor %ymm3, %ymm7, %ymm4 -vpxor %ymm1, %ymm5, %ymm1 -vpxor %ymm0, %ymm2, %ymm7 -vmovdqu %ymm4, 2432(%esp) -vmovdqu %ymm1, 2400(%esp) -vpaddd 3680(%esp), %ymm6, %ymm1 -vpsrld $25, %ymm7, %ymm4 -vpslld $7, %ymm7, %ymm5 -vpxor 3744(%esp), %ymm1, %ymm3 -vpxor %ymm5, %ymm4, %ymm5 -vpsrld $25, %ymm3, %ymm2 -vpslld $7, %ymm3, %ymm3 +vpxor %ymm5, %ymm7, %ymm7 +vmovdqu %ymm4, 1856(%esp) +vmovdqu %ymm0, 1600(%esp) +vmovdqu %ymm5, 1888(%esp) +vpaddd 2848(%esp), %ymm6, %ymm4 +vpaddd 2912(%esp), %ymm0, %ymm0 +vpshufb %ymm1, %ymm3, %ymm3 +vpshufb %ymm1, %ymm7, %ymm5 +vpxor 2880(%esp), %ymm4, %ymm7 +vmovdqu %ymm3, 1664(%esp) +vmovdqu %ymm4, 1920(%esp) +vmovdqu %ymm0, 1728(%esp) +vpaddd 2944(%esp), %ymm3, %ymm3 +vpxor 2976(%esp), %ymm0, %ymm4 +vpshufb %ymm1, %ymm7, %ymm1 vpxor %ymm3, %ymm2, %ymm2 -addl $-2, %esi -jne chacha_blocks_avx2_6 +vpsrld $25, %ymm4, %ymm7 +vpslld $7, %ymm4, %ymm0 +vmovdqu %ymm1, 1632(%esp) +vmovdqu %ymm3, 1696(%esp) +vpsrld $25, %ymm2, %ymm4 +vpslld $7, %ymm2, %ymm2 +vpor %ymm0, %ymm7, %ymm3 +vpaddd 3040(%esp), %ymm1, %ymm1 +vpor %ymm2, %ymm4, %ymm2 +vmovdqu %ymm3, 1792(%esp) +vpxor %ymm1, %ymm6, %ymm7 +vmovdqu %ymm2, 1760(%esp) +vpaddd 3008(%esp), %ymm5, %ymm2 +vpsrld $25, %ymm7, %ymm3 +vpslld $7, %ymm7, %ymm4 +vpxor 3072(%esp), %ymm2, %ymm0 +vpsrld $25, %ymm0, %ymm6 +vpslld $7, %ymm0, %ymm0 +vpor %ymm0, %ymm6, %ymm6 +vpor %ymm4, %ymm3, %ymm0 +addl $-2, %edx +jne chacha_blocks_avx2_5 +chacha_blocks_avx2_6: +vmovdqu %ymm2, 1248(%esp) +vmovdqu 1824(%esp), %ymm2 +vmovdqu 1856(%esp), %ymm4 +vmovdqu %ymm5, 1184(%esp) +vmovdqu %ymm1, 1216(%esp) +vmovdqu 1888(%esp), %ymm5 +vmovdqu 1920(%esp), %ymm1 +vmovdqu 1792(%esp), %ymm7 +vpaddd 896(%esp), %ymm2, %ymm3 +vpaddd 928(%esp), %ymm4, %ymm2 +vpaddd 1088(%esp), %ymm6, %ymm6 +vpaddd 960(%esp), %ymm5, %ymm4 +vpaddd 992(%esp), %ymm1, %ymm5 +vpaddd 1056(%esp), %ymm7, %ymm1 +vpaddd 1024(%esp), %ymm0, %ymm0 +vmovdqu %ymm6, 1312(%esp) +vmovdqu 1760(%esp), %ymm7 +vpunpckldq %ymm2, %ymm3, %ymm6 +vpunpckhdq %ymm2, %ymm3, %ymm3 +vmovdqu 1312(%esp), %ymm2 +vpaddd 864(%esp), %ymm7, %ymm7 +vmovdqu %ymm6, 1344(%esp) +vpunpckldq %ymm5, %ymm4, %ymm6 +vpunpckhdq %ymm5, %ymm4, %ymm4 +vpunpckldq %ymm1, %ymm0, %ymm5 +vpunpckhdq %ymm1, %ymm0, %ymm0 +vpunpckhdq %ymm2, %ymm7, %ymm1 +vmovdqu %ymm4, 1376(%esp) +vpunpckldq %ymm2, %ymm7, %ymm4 +vmovdqu 1344(%esp), %ymm2 +vpunpcklqdq %ymm6, %ymm2, %ymm7 +vpunpckhqdq %ymm6, %ymm2, %ymm6 +vmovdqu 1376(%esp), %ymm2 +vmovdqu %ymm7, 1408(%esp) +vpunpcklqdq %ymm4, %ymm5, %ymm7 +vpunpckhqdq %ymm4, %ymm5, %ymm4 +vpunpcklqdq %ymm2, %ymm3, %ymm5 +vpunpckhqdq %ymm2, %ymm3, %ymm3 +vmovdqu %ymm5, 1440(%esp) +vpunpcklqdq %ymm1, %ymm0, %ymm5 +vpunpckhqdq %ymm1, %ymm0, %ymm1 +vmovdqu 1408(%esp), %ymm0 +vperm2i128 $32, %ymm7, %ymm0, %ymm2 +vmovdqu %ymm2, 1280(%esp) +vperm2i128 $32, %ymm4, %ymm6, %ymm2 +vperm2i128 $49, %ymm7, %ymm0, %ymm0 +vperm2i128 $49, %ymm4, %ymm6, %ymm7 +vmovdqu 1440(%esp), %ymm4 +vperm2i128 $32, %ymm5, %ymm4, %ymm6 +vmovdqu %ymm6, 1472(%esp) +vperm2i128 $32, %ymm1, %ymm3, %ymm6 +vperm2i128 $49, %ymm5, %ymm4, %ymm4 +vperm2i128 $49, %ymm1, %ymm3, %ymm1 +vmovdqu 1472(%esp), %ymm5 +testl %edi, %edi +je chacha_blocks_avx2_51 chacha_blocks_avx2_7: -vmovdqu 2496(%esp), %ymm3 -vmovdqu 2528(%esp), %ymm7 -vmovdqu %ymm6, 1696(%esp) -vmovdqu 2560(%esp), %ymm6 -vpaddd 1440(%esp), %ymm3, %ymm4 -vpaddd 1472(%esp), %ymm7, %ymm3 -vpaddd 2016(%esp), %ymm2, %ymm2 -vpaddd 1504(%esp), %ymm6, %ymm6 -vmovdqu 2464(%esp), %ymm7 -vmovdqu %ymm2, 1728(%esp) -vpaddd 1536(%esp), %ymm7, %ymm7 -vmovdqu %ymm7, 1792(%esp) -vpaddd 1568(%esp), %ymm5, %ymm7 -vmovdqu 2432(%esp), %ymm5 -vpaddd 1600(%esp), %ymm5, %ymm5 -vmovdqu %ymm5, 1760(%esp) -vmovdqu 2400(%esp), %ymm5 -vpaddd 2048(%esp), %ymm5, %ymm5 -testl %edx, %edx -je chacha_blocks_avx2_40 +vmovdqu 1280(%esp), %ymm3 +vpxor 448(%edi), %ymm1, %ymm1 +vpxor 384(%edi), %ymm4, %ymm4 +vpxor 320(%edi), %ymm7, %ymm7 +vpxor 256(%edi), %ymm0, %ymm0 +vpxor 192(%edi), %ymm6, %ymm6 +vpxor 128(%edi), %ymm5, %ymm5 +vpxor 64(%edi), %ymm2, %ymm2 +vpxor (%edi), %ymm3, %ymm3 +vmovdqu %ymm1, 448(%ebx) +vmovdqu 1184(%esp), %ymm1 +vmovdqu %ymm2, 64(%ebx) +vmovdqu %ymm3, (%ebx) +vmovdqu %ymm0, 256(%ebx) +vmovdqu 1248(%esp), %ymm0 +vmovdqu 1216(%esp), %ymm2 +vmovdqu %ymm5, 128(%ebx) +vmovdqu %ymm7, 320(%ebx) +vmovdqu %ymm6, 192(%ebx) +vmovdqu 1728(%esp), %ymm6 +vmovdqu %ymm4, 384(%ebx) +vpaddd 1120(%esp), %ymm1, %ymm3 +vpaddd 832(%esp), %ymm0, %ymm5 +vpaddd 800(%esp), %ymm2, %ymm7 +vpaddd 768(%esp), %ymm6, %ymm6 +vmovdqu 1600(%esp), %ymm1 +vmovdqu 1696(%esp), %ymm0 +vmovdqu 1664(%esp), %ymm2 +vpaddd 672(%esp), %ymm1, %ymm1 +vpaddd 736(%esp), %ymm0, %ymm4 +vpaddd 1152(%esp), %ymm2, %ymm0 +vmovdqu 1632(%esp), %ymm2 +vmovdqu %ymm1, 224(%esp) +vpunpckldq %ymm7, %ymm5, %ymm1 +vpunpckhdq %ymm7, %ymm5, %ymm7 +vmovdqu 224(%esp), %ymm5 +vpaddd 704(%esp), %ymm2, %ymm2 +vmovdqu %ymm1, 320(%esp) +vpunpckldq %ymm4, %ymm6, %ymm1 +vpunpckhdq %ymm4, %ymm6, %ymm4 +vpunpckldq %ymm5, %ymm2, %ymm6 +vmovdqu %ymm4, 352(%esp) +vpunpckldq %ymm3, %ymm0, %ymm4 +vpunpckhdq %ymm3, %ymm0, %ymm0 +vpunpckhdq %ymm5, %ymm2, %ymm3 +vmovdqu 320(%esp), %ymm5 +vpunpcklqdq %ymm1, %ymm5, %ymm2 +vpunpckhqdq %ymm1, %ymm5, %ymm1 +vmovdqu 352(%esp), %ymm5 +vmovdqu %ymm2, 384(%esp) +vpunpcklqdq %ymm6, %ymm4, %ymm2 +vpunpckhqdq %ymm6, %ymm4, %ymm4 +vpunpcklqdq %ymm5, %ymm7, %ymm6 +vpunpckhqdq %ymm5, %ymm7, %ymm7 +vpunpckhqdq %ymm3, %ymm0, %ymm5 +vmovdqu %ymm6, 416(%esp) +vpunpcklqdq %ymm3, %ymm0, %ymm6 +vmovdqu 384(%esp), %ymm3 +vperm2i128 $32, %ymm2, %ymm3, %ymm0 +vpxor 32(%edi), %ymm0, %ymm0 +vmovdqu %ymm0, 448(%esp) +vperm2i128 $32, %ymm4, %ymm1, %ymm0 +vpxor 96(%edi), %ymm0, %ymm0 +vmovdqu %ymm0, 480(%esp) +vperm2i128 $2, 416(%esp), %ymm6, %ymm0 +vpxor 160(%edi), %ymm0, %ymm0 +vmovdqu %ymm0, 512(%esp) +vperm2i128 $32, %ymm5, %ymm7, %ymm0 +vperm2i128 $49, %ymm5, %ymm7, %ymm5 +vmovdqu 448(%esp), %ymm7 +vpxor 224(%edi), %ymm0, %ymm0 +vpxor 480(%edi), %ymm5, %ymm5 +vperm2i128 $49, %ymm2, %ymm3, %ymm3 +vperm2i128 $49, %ymm4, %ymm1, %ymm4 +vperm2i128 $19, 416(%esp), %ymm6, %ymm1 +vpxor 288(%edi), %ymm3, %ymm2 +vpxor 352(%edi), %ymm4, %ymm4 +vpxor 416(%edi), %ymm1, %ymm1 +vmovdqu %ymm7, 32(%ebx) +vmovdqu 480(%esp), %ymm7 +vmovdqu 512(%esp), %ymm3 +vmovdqu %ymm0, 224(%ebx) +vmovdqu %ymm2, 288(%ebx) +vmovdqu %ymm4, 352(%ebx) +vmovdqu %ymm7, 96(%ebx) +vmovdqu %ymm3, 160(%ebx) +vmovdqu %ymm1, 416(%ebx) +vmovdqu %ymm5, 480(%ebx) +addl $512, %edi chacha_blocks_avx2_8: -vmovdqu %ymm0, 608(%esp) -vmovdqu 1792(%esp), %ymm0 -vmovdqu %ymm1, 576(%esp) -vpunpckldq %ymm3, %ymm4, %ymm1 -vpunpckhdq %ymm3, %ymm4, %ymm3 -vpunpckldq %ymm0, %ymm6, %ymm2 -vpunpckhdq %ymm0, %ymm6, %ymm6 -vmovdqu 1760(%esp), %ymm0 -vmovdqu 1728(%esp), %ymm4 -vmovdqu %ymm3, 640(%esp) -vmovdqu %ymm6, 672(%esp) -vpunpckldq %ymm0, %ymm7, %ymm6 -vpunpckldq %ymm4, %ymm5, %ymm3 -vpunpckhdq %ymm0, %ymm7, %ymm7 -vpunpckhdq %ymm4, %ymm5, %ymm0 -vpunpcklqdq %ymm2, %ymm1, %ymm5 -vpunpckhqdq %ymm2, %ymm1, %ymm2 -vmovdqu 640(%esp), %ymm4 -vmovdqu %ymm5, 704(%esp) -vmovdqu %ymm2, 768(%esp) -vmovdqu 672(%esp), %ymm2 -vpunpcklqdq %ymm3, %ymm6, %ymm5 -vpunpckhqdq %ymm3, %ymm6, %ymm3 -vpunpcklqdq %ymm2, %ymm4, %ymm6 -vpunpckhqdq %ymm2, %ymm4, %ymm1 -vmovdqu %ymm5, 736(%esp) -vmovdqu 2336(%esp), %ymm4 -vmovdqu 1696(%esp), %ymm2 -vmovdqu %ymm3, 800(%esp) -vmovdqu 608(%esp), %ymm3 -vmovdqu %ymm6, 832(%esp) -vmovdqu %ymm1, 896(%esp) -vpunpcklqdq %ymm0, %ymm7, %ymm5 -vpunpckhqdq %ymm0, %ymm7, %ymm7 -vmovdqu 576(%esp), %ymm0 -vpaddd 1952(%esp), %ymm3, %ymm6 -vmovdqu %ymm5, 864(%esp) -vmovdqu 2368(%esp), %ymm5 -vmovdqu %ymm7, 928(%esp) -vmovdqu 2272(%esp), %ymm3 -vpaddd 1984(%esp), %ymm0, %ymm1 -vpaddd 1920(%esp), %ymm5, %ymm7 -vpaddd 1888(%esp), %ymm4, %ymm5 -vpaddd 1632(%esp), %ymm2, %ymm4 -vpaddd 1856(%esp), %ymm3, %ymm3 -vmovdqu 2240(%esp), %ymm2 -vmovdqu 2304(%esp), %ymm0 -vpaddd 1824(%esp), %ymm2, %ymm2 -vpaddd 1664(%esp), %ymm0, %ymm0 -vmovdqu %ymm2, 960(%esp) -vpunpckldq %ymm6, %ymm1, %ymm2 -vpunpckhdq %ymm6, %ymm1, %ymm6 -vpunpckhdq %ymm5, %ymm7, %ymm1 -vmovdqu %ymm2, 992(%esp) -vpunpckldq %ymm5, %ymm7, %ymm2 -vpunpckldq %ymm4, %ymm0, %ymm7 -vpunpckhdq %ymm4, %ymm0, %ymm4 -vmovdqu %ymm1, 1024(%esp) -vmovdqu 960(%esp), %ymm1 -vpunpckldq %ymm1, %ymm3, %ymm5 -vpunpckhdq %ymm1, %ymm3, %ymm0 -vmovdqu 992(%esp), %ymm3 -vpunpcklqdq %ymm2, %ymm3, %ymm1 -vpunpckhqdq %ymm2, %ymm3, %ymm3 -vmovdqu 1024(%esp), %ymm2 -vmovdqu %ymm1, 1056(%esp) -vmovdqu %ymm3, 1120(%esp) -vpunpcklqdq %ymm5, %ymm7, %ymm1 -vpunpckhqdq %ymm5, %ymm7, %ymm5 -vpunpcklqdq %ymm2, %ymm6, %ymm7 -vpunpckhqdq %ymm2, %ymm6, %ymm2 -vmovdqu 704(%esp), %ymm6 -vmovdqu %ymm1, 1088(%esp) -vmovdqu %ymm5, 1152(%esp) -vmovdqu %ymm7, 1184(%esp) -vpunpcklqdq %ymm0, %ymm4, %ymm7 -vpunpckhqdq %ymm0, %ymm4, %ymm4 -vmovdqu %ymm7, 1216(%esp) -vmovdqu %ymm4, 1248(%esp) -vperm2i128 $32, 736(%esp), %ymm6, %ymm6 -vperm2i128 $2, 1056(%esp), %ymm1, %ymm1 -vperm2i128 $32, %ymm5, %ymm3, %ymm3 -vpxor (%edx), %ymm6, %ymm0 -vpxor 32(%edx), %ymm1, %ymm6 -vpxor 96(%edx), %ymm3, %ymm5 -vmovdqu 768(%esp), %ymm1 -vmovdqu 832(%esp), %ymm3 -vmovdqu %ymm6, 1280(%esp) -vperm2i128 $2, 1184(%esp), %ymm7, %ymm7 -vperm2i128 $32, 800(%esp), %ymm1, %ymm6 -vperm2i128 $32, 864(%esp), %ymm3, %ymm1 -vpxor 160(%edx), %ymm7, %ymm7 -vpxor 128(%edx), %ymm1, %ymm3 -vpxor 64(%edx), %ymm6, %ymm6 -vmovdqu 928(%esp), %ymm1 -vmovdqu %ymm7, 1312(%esp) -vperm2i128 $2, 896(%esp), %ymm1, %ymm7 -vperm2i128 $32, %ymm4, %ymm2, %ymm4 -vpxor 192(%edx), %ymm7, %ymm7 -vpxor 224(%edx), %ymm4, %ymm4 -vmovdqu %ymm0, (%eax) -vmovdqu 1280(%esp), %ymm0 -vmovdqu %ymm5, 96(%eax) -vmovdqu 1312(%esp), %ymm5 -vmovdqu %ymm3, 128(%eax) -vmovdqu %ymm7, 192(%eax) -vmovdqu %ymm0, 32(%eax) -vmovdqu 704(%esp), %ymm3 -vmovdqu 1056(%esp), %ymm7 -vmovdqu 768(%esp), %ymm0 -vmovdqu %ymm6, 64(%eax) -vmovdqu %ymm5, 160(%eax) -vmovdqu %ymm4, 224(%eax) -vperm2i128 $49, 736(%esp), %ymm3, %ymm6 -vperm2i128 $49, 1088(%esp), %ymm7, %ymm4 -vperm2i128 $49, 800(%esp), %ymm0, %ymm3 -vpxor 256(%edx), %ymm6, %ymm5 -vpxor 288(%edx), %ymm4, %ymm7 -vpxor 320(%edx), %ymm3, %ymm4 -vmovdqu 1120(%esp), %ymm6 -vmovdqu 832(%esp), %ymm3 -vperm2i128 $49, 1152(%esp), %ymm6, %ymm0 -vperm2i128 $49, 864(%esp), %ymm3, %ymm6 -vpxor 384(%edx), %ymm6, %ymm3 -vpxor 352(%edx), %ymm0, %ymm0 -vmovdqu 1184(%esp), %ymm6 -vmovdqu %ymm3, 1344(%esp) -vperm2i128 $19, 896(%esp), %ymm1, %ymm1 -vperm2i128 $49, 1216(%esp), %ymm6, %ymm3 -vperm2i128 $49, 1248(%esp), %ymm2, %ymm2 -vpxor 448(%edx), %ymm1, %ymm6 -vpxor 416(%edx), %ymm3, %ymm3 -vpxor 480(%edx), %ymm2, %ymm1 -vmovdqu %ymm0, 352(%eax) -vmovdqu 1344(%esp), %ymm0 -vmovdqu %ymm5, 256(%eax) -vmovdqu %ymm7, 288(%eax) -vmovdqu %ymm4, 320(%eax) -vmovdqu %ymm3, 416(%eax) -vmovdqu %ymm0, 384(%eax) -vmovdqu %ymm6, 448(%eax) -vmovdqu %ymm1, 480(%eax) -addl $512, %edx +movl 1512(%esp), %edx +addl $512, %ebx +addl $-512, %edx +movl %edx, 1512(%esp) +cmpl $512, %edx +jae chacha_blocks_avx2_4 chacha_blocks_avx2_9: -movl 2152(%esp), %esi -addl $512, %eax -addl $-512, %esi -movl %esi, 2152(%esp) -cmpl $512, %esi -jae chacha_blocks_avx2_5 +movl 1504(%esp), %esi +vmovdqu 304(%esp), %xmm0 chacha_blocks_avx2_10: -movl %edx, 2156(%esp) -movl %esi, %edx -chacha_blocks_avx2_11: cmpl $256, %edx -jb chacha_blocks_avx2_17 +jb chacha_blocks_avx2_18 +chacha_blocks_avx2_11: +movl $2, %eax +vpxor %ymm3, %ymm3, %ymm3 +vinserti128 $1, %xmm0, %ymm0, %ymm5 +vinserti128 $1, 592(%esp), %ymm3, %ymm7 +vpaddq %ymm7, %ymm5, %ymm0 +vmovd %eax, %xmm7 +vmovdqu %ymm0, (%esp) +vbroadcasti128 560(%esp), %ymm1 +vbroadcasti128 576(%esp), %ymm6 +vinserti128 $1, %xmm7, %ymm7, %ymm5 +vmovdqu %ymm1, 224(%esp) +vmovdqu %ymm1, 192(%esp) +vmovdqu %ymm6, 160(%esp) +vmovdqu %ymm1, 32(%esp) +vmovdqu %ymm6, 128(%esp) +vmovdqu 224(%esp), %ymm1 +vpaddq %ymm5, %ymm0, %ymm7 +vbroadcasti128 544(%esp), %ymm2 +vmovdqa %ymm2, %ymm4 +vmovdqu %ymm2, 320(%esp) +vmovdqu %ymm2, 64(%esp) +vmovdqu %ymm7, 96(%esp) +vmovdqu %ymm7, 352(%esp) +vmovdqu %ymm4, 384(%esp) +vmovdqu 192(%esp), %ymm2 +movl 1516(%esp), %eax +vmovdqa %ymm0, %ymm3 +vmovdqu 160(%esp), %ymm0 chacha_blocks_avx2_12: -movl 560(%esp), %ecx -movl %ecx, %esi -addl $1, %esi -movl 564(%esp), %ebx -movl %ebx, %edi -movl %esi, 1380(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $2, %esi -movl %edi, 1412(%esp) -movl %ebx, %edi -movl %esi, 1384(%esp) -movl %ecx, %esi -adcl $0, %edi -addl $3, %esi -movl %edi, 1416(%esp) -movl %ebx, %edi -movl %ecx, 1376(%esp) -adcl $0, %edi -addl $4, %ecx -movl %ebx, 1408(%esp) -adcl $0, %ebx -movl %ecx, 560(%esp) -movl %ebx, 564(%esp) -vpbroadcastd 552(%esp), %xmm7 -vmovdqu %xmm7, 240(%esp) -vmovdqu %xmm7, 320(%esp) -vpbroadcastd 556(%esp), %xmm7 -movl %esi, 1388(%esp) -vmovdqu %xmm7, 256(%esp) -vmovdqu %xmm7, 304(%esp) -vmovdqu 1376(%esp), %xmm6 -vpbroadcastd 2096(%esp), %xmm3 -vpbroadcastd 524(%esp), %xmm5 -vpbroadcastd 532(%esp), %xmm2 -vpbroadcastd 536(%esp), %xmm1 -vpbroadcastd 568(%esp), %xmm7 -movl %edi, 1420(%esp) -vmovdqu %xmm6, 48(%esp) -vmovdqu %xmm6, 400(%esp) -vmovdqu %xmm3, 80(%esp) -vmovdqu %xmm3, 352(%esp) -vmovdqu %xmm5, 128(%esp) -vmovdqu %xmm5, 368(%esp) -vmovdqu %xmm2, 160(%esp) -vmovdqu %xmm2, 432(%esp) -vmovdqu %xmm1, 176(%esp) -vmovdqu %xmm1, 384(%esp) -vmovdqu %xmm7, 272(%esp) -vmovdqu %xmm7, 416(%esp) -vmovdqu 1408(%esp), %xmm6 -vpbroadcastd 516(%esp), %xmm3 -vpbroadcastd 520(%esp), %xmm4 -vpbroadcastd 2112(%esp), %xmm5 -vpbroadcastd 540(%esp), %xmm2 -vpbroadcastd 2128(%esp), %xmm1 -vpbroadcastd 548(%esp), %xmm0 -vpbroadcastd 572(%esp), %xmm7 -movl 2148(%esp), %ecx -vmovdqu %xmm6, 64(%esp) -vmovdqu %xmm3, 96(%esp) -vmovdqu %xmm4, 112(%esp) -vmovdqu %xmm5, 144(%esp) -vmovdqu %xmm2, 192(%esp) -vmovdqu %xmm1, 208(%esp) -vmovdqu %xmm0, 224(%esp) -vmovdqu %xmm7, 288(%esp) -vmovdqu %xmm7, 336(%esp) -vmovdqu %xmm4, 16(%esp) -vmovdqu %xmm3, (%esp) +vpaddd 384(%esp), %ymm1, %ymm4 +vpaddd 320(%esp), %ymm2, %ymm7 +vpxor %ymm4, %ymm3, %ymm5 +vmovdqu 1568(%esp), %ymm3 +vmovdqu %ymm7, 416(%esp) +vpxor 352(%esp), %ymm7, %ymm7 +vpshufb %ymm3, %ymm5, %ymm5 +vpshufb %ymm3, %ymm7, %ymm3 +vpaddd %ymm5, %ymm6, %ymm6 +vpaddd %ymm3, %ymm0, %ymm0 +vpxor %ymm6, %ymm1, %ymm1 +vpxor %ymm0, %ymm2, %ymm7 +vpsrld $20, %ymm1, %ymm2 +vpslld $12, %ymm1, %ymm1 +vpor %ymm1, %ymm2, %ymm1 +vpsrld $20, %ymm7, %ymm2 +vpslld $12, %ymm7, %ymm7 +vpaddd %ymm1, %ymm4, %ymm4 +vpor %ymm7, %ymm2, %ymm2 +vmovdqu %ymm4, 448(%esp) +vpxor %ymm4, %ymm5, %ymm5 +vpaddd 416(%esp), %ymm2, %ymm7 +vmovdqu 1536(%esp), %ymm4 +vpxor %ymm7, %ymm3, %ymm3 +vpshufd $147, %ymm7, %ymm7 +vpshufb %ymm4, %ymm5, %ymm5 +vpshufb %ymm4, %ymm3, %ymm4 +vpaddd %ymm5, %ymm6, %ymm6 +vpaddd %ymm4, %ymm0, %ymm3 +vpshufd $78, %ymm5, %ymm5 +vpshufd $78, %ymm4, %ymm4 +vpxor %ymm6, %ymm1, %ymm0 +vpxor %ymm3, %ymm2, %ymm2 +vpshufd $57, %ymm6, %ymm6 +vpshufd $57, %ymm3, %ymm3 +vpsrld $25, %ymm0, %ymm1 +vpslld $7, %ymm0, %ymm0 +vpor %ymm0, %ymm1, %ymm1 +vpsrld $25, %ymm2, %ymm0 +vpslld $7, %ymm2, %ymm2 +vpor %ymm2, %ymm0, %ymm0 +vpshufd $147, 448(%esp), %ymm2 +vpaddd %ymm0, %ymm7, %ymm7 +vpaddd %ymm1, %ymm2, %ymm2 +vpxor %ymm7, %ymm4, %ymm4 +vmovdqu %ymm2, 480(%esp) +vpxor %ymm2, %ymm5, %ymm2 +vmovdqu 1568(%esp), %ymm5 +vpshufb %ymm5, %ymm2, %ymm2 +vpshufb %ymm5, %ymm4, %ymm4 +vpaddd %ymm2, %ymm6, %ymm6 +vpaddd %ymm4, %ymm3, %ymm3 +vpxor %ymm6, %ymm1, %ymm5 +vpxor %ymm3, %ymm0, %ymm1 +vpsrld $20, %ymm5, %ymm0 +vpslld $12, %ymm5, %ymm5 +vpor %ymm5, %ymm0, %ymm0 +vpsrld $20, %ymm1, %ymm5 +vpslld $12, %ymm1, %ymm1 +vpor %ymm1, %ymm5, %ymm1 +vpaddd 480(%esp), %ymm0, %ymm5 +vmovdqu %ymm1, 512(%esp) +vpaddd %ymm1, %ymm7, %ymm1 +vpxor %ymm5, %ymm2, %ymm7 +vmovdqu 1536(%esp), %ymm2 +vpxor %ymm1, %ymm4, %ymm4 +vpshufb %ymm2, %ymm7, %ymm7 +vpshufb %ymm2, %ymm4, %ymm4 +vpshufd $57, %ymm5, %ymm2 +vpaddd %ymm7, %ymm6, %ymm6 +vpshufd $57, %ymm1, %ymm5 +vpaddd %ymm4, %ymm3, %ymm1 +vpshufd $78, %ymm4, %ymm4 +vpshufd $78, %ymm7, %ymm3 +vpxor %ymm6, %ymm0, %ymm7 +vpshufd $147, %ymm1, %ymm0 +vpshufd $147, %ymm6, %ymm6 +vmovdqu %ymm4, 352(%esp) +vmovdqu %ymm2, 384(%esp) +vmovdqu %ymm5, 320(%esp) +vpxor 512(%esp), %ymm1, %ymm4 +vpsrld $25, %ymm7, %ymm1 +vpslld $7, %ymm7, %ymm2 +vpsrld $25, %ymm4, %ymm5 +vpor %ymm2, %ymm1, %ymm1 +vpslld $7, %ymm4, %ymm2 +vpor %ymm2, %ymm5, %ymm2 +addl $-2, %eax +jne chacha_blocks_avx2_12 chacha_blocks_avx2_13: -vpaddd 352(%esp), %xmm5, %xmm3 -vmovdqu 432(%esp), %xmm7 -vpxor 400(%esp), %xmm3, %xmm4 -vmovdqu %xmm3, 32(%esp) -vpaddd (%esp), %xmm7, %xmm7 -vmovdqu 2160(%esp), %xmm3 -vpxor %xmm7, %xmm6, %xmm6 -vpshufb %xmm3, %xmm4, %xmm4 -vpshufb %xmm3, %xmm6, %xmm6 -vmovdqu %xmm7, 464(%esp) -vpaddd %xmm4, %xmm1, %xmm1 -vmovdqu 384(%esp), %xmm7 -vpaddd %xmm6, %xmm0, %xmm0 -vpaddd 16(%esp), %xmm7, %xmm7 -vpxor %xmm1, %xmm5, %xmm5 -vmovdqu %xmm2, 448(%esp) -vpaddd 368(%esp), %xmm2, %xmm2 -vmovdqu %xmm7, 480(%esp) -vpxor 416(%esp), %xmm7, %xmm7 -vmovdqu %xmm2, 496(%esp) -vpxor 336(%esp), %xmm2, %xmm2 -vpshufb %xmm3, %xmm7, %xmm7 -vpshufb %xmm3, %xmm2, %xmm2 -vmovdqu %xmm0, 608(%esp) -vpslld $12, %xmm5, %xmm3 -vmovdqu %xmm1, 592(%esp) -vpsrld $20, %xmm5, %xmm1 -vpxor 432(%esp), %xmm0, %xmm0 -vpxor %xmm3, %xmm1, %xmm5 -vpsrld $20, %xmm0, %xmm1 -vpslld $12, %xmm0, %xmm0 -vpxor %xmm0, %xmm1, %xmm1 -vpaddd 320(%esp), %xmm7, %xmm0 -vpaddd 304(%esp), %xmm2, %xmm3 -vmovdqu %xmm2, 576(%esp) -vpxor 384(%esp), %xmm0, %xmm2 -vmovdqu %xmm0, 640(%esp) -vmovdqu %xmm3, 656(%esp) -vpxor 448(%esp), %xmm3, %xmm0 -vpsrld $20, %xmm2, %xmm3 -vpslld $12, %xmm2, %xmm2 -vpxor %xmm2, %xmm3, %xmm3 -vpsrld $20, %xmm0, %xmm2 -vpslld $12, %xmm0, %xmm0 -vpxor %xmm0, %xmm2, %xmm0 -vpaddd 32(%esp), %xmm5, %xmm2 -vmovdqu %xmm2, 688(%esp) -vpxor %xmm2, %xmm4, %xmm2 -vmovdqu 2176(%esp), %xmm4 -vpshufb %xmm4, %xmm2, %xmm2 -vmovdqu %xmm5, 624(%esp) -vpaddd 464(%esp), %xmm1, %xmm5 -vmovdqu %xmm2, 720(%esp) -vpxor %xmm5, %xmm6, %xmm6 -vmovdqu %xmm5, 704(%esp) -vpaddd 496(%esp), %xmm0, %xmm2 -vpaddd 480(%esp), %xmm3, %xmm5 -vpshufb %xmm4, %xmm6, %xmm6 -vmovdqu %xmm2, 768(%esp) -vpxor %xmm5, %xmm7, %xmm7 -vpxor 576(%esp), %xmm2, %xmm2 -vmovdqu %xmm5, 752(%esp) -vpshufb %xmm4, %xmm7, %xmm5 -vpshufb %xmm4, %xmm2, %xmm2 -vmovdqu 720(%esp), %xmm4 -vpaddd 592(%esp), %xmm4, %xmm7 -vmovdqu %xmm3, 672(%esp) -vmovdqu %xmm6, 736(%esp) -vpaddd 608(%esp), %xmm6, %xmm6 -vpxor 624(%esp), %xmm7, %xmm3 -vmovdqu %xmm6, 816(%esp) -vpxor %xmm6, %xmm1, %xmm6 -vpsrld $25, %xmm3, %xmm1 -vpslld $7, %xmm3, %xmm4 -vmovdqu %xmm5, 784(%esp) -vmovdqu %xmm7, 800(%esp) -vpxor %xmm4, %xmm1, %xmm7 -vpaddd 640(%esp), %xmm5, %xmm5 -vpsrld $25, %xmm6, %xmm1 -vpslld $7, %xmm6, %xmm6 -vpaddd 656(%esp), %xmm2, %xmm4 -vpxor %xmm6, %xmm1, %xmm3 -vpxor 672(%esp), %xmm5, %xmm1 -vpxor %xmm4, %xmm0, %xmm0 -vpsrld $25, %xmm1, %xmm6 -vpslld $7, %xmm1, %xmm1 -vmovdqu %xmm4, 864(%esp) -vpsrld $25, %xmm0, %xmm4 -vpslld $7, %xmm0, %xmm0 -vpxor %xmm1, %xmm6, %xmm1 -vpxor %xmm0, %xmm4, %xmm6 -vpaddd 688(%esp), %xmm3, %xmm0 -vmovdqu %xmm3, 848(%esp) -vpxor %xmm0, %xmm2, %xmm4 -vpaddd 704(%esp), %xmm1, %xmm3 -vmovdqu 2160(%esp), %xmm2 -vmovdqu %xmm3, 912(%esp) -vmovdqu %xmm0, 896(%esp) -vpshufb %xmm2, %xmm4, %xmm0 -vpxor 720(%esp), %xmm3, %xmm3 -vpaddd %xmm0, %xmm5, %xmm5 -vpshufb %xmm2, %xmm3, %xmm3 -vpaddd 752(%esp), %xmm6, %xmm4 -vmovdqu %xmm6, 880(%esp) -vpaddd 768(%esp), %xmm7, %xmm6 -vmovdqu %xmm7, 832(%esp) -vpxor 736(%esp), %xmm4, %xmm7 -vmovdqu %xmm6, 944(%esp) -vpxor 784(%esp), %xmm6, %xmm6 -vpshufb %xmm2, %xmm7, %xmm7 -vmovdqu %xmm4, 928(%esp) -vpshufb %xmm2, %xmm6, %xmm4 -vmovdqu %xmm5, 976(%esp) -vpaddd 864(%esp), %xmm3, %xmm2 -vpxor 848(%esp), %xmm5, %xmm5 -vpxor %xmm2, %xmm1, %xmm1 -vmovdqu %xmm2, 992(%esp) -vpsrld $20, %xmm5, %xmm6 -vpslld $12, %xmm5, %xmm2 -vpxor %xmm2, %xmm6, %xmm5 -vpsrld $20, %xmm1, %xmm6 -vpslld $12, %xmm1, %xmm1 -vpaddd 800(%esp), %xmm7, %xmm2 -vpxor %xmm1, %xmm6, %xmm1 -vpaddd 816(%esp), %xmm4, %xmm6 -vmovdqu %xmm4, 960(%esp) -vpxor 880(%esp), %xmm2, %xmm4 -vmovdqu %xmm2, 1024(%esp) -vmovdqu %xmm6, 1040(%esp) -vpxor 832(%esp), %xmm6, %xmm2 -vpsrld $20, %xmm4, %xmm6 -vpslld $12, %xmm4, %xmm4 -vpxor %xmm4, %xmm6, %xmm6 -vpsrld $20, %xmm2, %xmm4 -vpslld $12, %xmm2, %xmm2 -vmovdqu %xmm5, 1008(%esp) -vpxor %xmm2, %xmm4, %xmm2 -vpaddd 896(%esp), %xmm5, %xmm5 -vpaddd 912(%esp), %xmm1, %xmm4 -vmovdqu %xmm5, 352(%esp) -vpxor %xmm5, %xmm0, %xmm5 -vmovdqu 2176(%esp), %xmm0 -vpxor %xmm4, %xmm3, %xmm3 -vpshufb %xmm0, %xmm5, %xmm5 -vpshufb %xmm0, %xmm3, %xmm3 -vmovdqu %xmm6, 1056(%esp) -vpaddd 928(%esp), %xmm6, %xmm6 -vmovdqu %xmm4, (%esp) -vpxor %xmm6, %xmm7, %xmm7 -vpaddd 944(%esp), %xmm2, %xmm4 -vmovdqu %xmm6, 16(%esp) -vpshufb %xmm0, %xmm7, %xmm6 -vpxor 960(%esp), %xmm4, %xmm7 -vmovdqu %xmm3, 400(%esp) -vmovdqu %xmm4, 368(%esp) -vpshufb %xmm0, %xmm7, %xmm0 -vpaddd 976(%esp), %xmm5, %xmm4 -vpaddd 992(%esp), %xmm3, %xmm3 -vmovdqu %xmm5, 336(%esp) -vpxor %xmm3, %xmm1, %xmm1 -vpxor 1008(%esp), %xmm4, %xmm5 -vmovdqu %xmm3, 304(%esp) -vpsrld $25, %xmm5, %xmm7 -vpslld $7, %xmm5, %xmm3 -vpsrld $25, %xmm1, %xmm5 -vpslld $7, %xmm1, %xmm1 -vpxor %xmm1, %xmm5, %xmm1 -vmovdqu %xmm0, 416(%esp) -vmovdqu %xmm1, 384(%esp) -vpaddd 1024(%esp), %xmm6, %xmm1 -vpaddd 1040(%esp), %xmm0, %xmm0 -vmovdqu %xmm4, 320(%esp) -vpxor %xmm3, %xmm7, %xmm4 -vpxor 1056(%esp), %xmm1, %xmm3 -vpxor %xmm0, %xmm2, %xmm7 -vmovdqu %xmm4, 432(%esp) -vpsrld $25, %xmm3, %xmm2 -vpslld $7, %xmm3, %xmm3 -vpsrld $25, %xmm7, %xmm4 -vpslld $7, %xmm7, %xmm5 -vpxor %xmm3, %xmm2, %xmm2 -vpxor %xmm5, %xmm4, %xmm5 -addl $-2, %ecx -jne chacha_blocks_avx2_13 +vmovdqu %ymm0, 160(%esp) +vmovdqu %ymm2, 192(%esp) +vmovdqu %ymm1, 224(%esp) +vmovdqu (%esp), %ymm0 +vmovdqu 32(%esp), %ymm1 +vmovdqu 384(%esp), %ymm4 +vmovdqu 64(%esp), %ymm2 +vpaddd 128(%esp), %ymm6, %ymm6 +vpaddd 224(%esp), %ymm1, %ymm5 +vpaddd %ymm0, %ymm3, %ymm0 +vpaddd %ymm2, %ymm4, %ymm4 +vperm2i128 $32, %ymm5, %ymm4, %ymm7 +vperm2i128 $32, %ymm0, %ymm6, %ymm3 +vperm2i128 $49, %ymm5, %ymm4, %ymm4 +vperm2i128 $49, %ymm0, %ymm6, %ymm0 +testl %edi, %edi +je chacha_blocks_avx2_15 chacha_blocks_avx2_14: -vmovdqu 16(%esp), %xmm4 -vmovdqu (%esp), %xmm3 -cmpl $0, 2156(%esp) -je chacha_blocks_avx2_39 +vpxor (%edi), %ymm7, %ymm7 +vpxor 32(%edi), %ymm3, %ymm3 +vpxor 64(%edi), %ymm4, %ymm4 +vpxor 96(%edi), %ymm0, %ymm0 chacha_blocks_avx2_15: -vmovdqu %xmm6, 32(%esp) -vmovdqu 352(%esp), %xmm7 -vmovdqu 368(%esp), %xmm6 -vmovdqu %xmm0, 16(%esp) -vpaddd 80(%esp), %xmm7, %xmm0 -vpaddd 96(%esp), %xmm3, %xmm3 -vpaddd 112(%esp), %xmm4, %xmm4 -vpaddd 128(%esp), %xmm6, %xmm7 -movl 2156(%esp), %ecx -vpunpckldq %xmm3, %xmm0, %xmm6 -vpunpckhdq %xmm3, %xmm0, %xmm3 -vpunpckldq %xmm7, %xmm4, %xmm0 -vpunpckhdq %xmm7, %xmm4, %xmm4 -vpunpcklqdq %xmm0, %xmm6, %xmm7 -vpunpckhqdq %xmm0, %xmm6, %xmm0 -vpxor 64(%ecx), %xmm0, %xmm6 -vpunpcklqdq %xmm4, %xmm3, %xmm0 -vpunpckhqdq %xmm4, %xmm3, %xmm3 -vpxor (%ecx), %xmm7, %xmm7 -vpxor 128(%ecx), %xmm0, %xmm0 -vpxor 192(%ecx), %xmm3, %xmm4 -vmovdqu %xmm7, (%eax) -vmovdqu %xmm6, 64(%eax) -vmovdqu %xmm4, 192(%eax) -vmovdqu %xmm0, 128(%eax) -vpaddd 144(%esp), %xmm5, %xmm7 -vmovdqu 432(%esp), %xmm5 -vpaddd 160(%esp), %xmm5, %xmm3 -vmovdqu 384(%esp), %xmm5 -vpaddd 176(%esp), %xmm5, %xmm5 -vpaddd 192(%esp), %xmm2, %xmm6 -vpunpckldq %xmm3, %xmm7, %xmm4 -vpunpckldq %xmm6, %xmm5, %xmm2 -vpunpckhdq %xmm3, %xmm7, %xmm3 -vpunpckhdq %xmm6, %xmm5, %xmm6 -vpunpcklqdq %xmm2, %xmm4, %xmm7 -vpunpckhqdq %xmm2, %xmm4, %xmm2 -vpxor 80(%ecx), %xmm2, %xmm4 -vpunpcklqdq %xmm6, %xmm3, %xmm2 -vpxor 16(%ecx), %xmm7, %xmm0 -vpunpckhqdq %xmm6, %xmm3, %xmm5 -vpxor 144(%ecx), %xmm2, %xmm7 -vpxor 208(%ecx), %xmm5, %xmm3 -vmovdqu %xmm7, 144(%eax) -vmovdqu %xmm0, 16(%eax) -vmovdqu %xmm4, 80(%eax) -vmovdqu %xmm3, 208(%eax) -vpaddd 208(%esp), %xmm1, %xmm7 -vmovdqu 16(%esp), %xmm1 -vmovdqu 320(%esp), %xmm2 -vmovdqu 304(%esp), %xmm5 -vpaddd 224(%esp), %xmm1, %xmm1 -vpaddd 240(%esp), %xmm2, %xmm0 -vpaddd 256(%esp), %xmm5, %xmm4 -vpunpckldq %xmm1, %xmm7, %xmm3 -vpunpckhdq %xmm1, %xmm7, %xmm1 -vpunpckldq %xmm4, %xmm0, %xmm7 -vpunpckhdq %xmm4, %xmm0, %xmm2 -vpunpcklqdq %xmm7, %xmm3, %xmm5 -vpunpckhqdq %xmm2, %xmm1, %xmm6 -vpunpckhqdq %xmm7, %xmm3, %xmm0 -vpunpcklqdq %xmm2, %xmm1, %xmm3 -vpxor 32(%ecx), %xmm5, %xmm5 -vpxor 224(%ecx), %xmm6, %xmm2 -vpxor 160(%ecx), %xmm3, %xmm7 -vpxor 96(%ecx), %xmm0, %xmm4 -vmovdqu 32(%esp), %xmm1 -vmovdqu 416(%esp), %xmm0 -vmovdqu %xmm5, 32(%eax) -vmovdqu %xmm2, 224(%eax) -vmovdqu %xmm4, 96(%eax) -vmovdqu %xmm7, 160(%eax) -vmovdqu 400(%esp), %xmm5 -vmovdqu 336(%esp), %xmm3 -vpaddd 64(%esp), %xmm1, %xmm2 -vpaddd 272(%esp), %xmm0, %xmm1 -vpaddd 48(%esp), %xmm5, %xmm6 -vpaddd 288(%esp), %xmm3, %xmm0 -vpunpckldq %xmm2, %xmm6, %xmm7 -vpunpckldq %xmm0, %xmm1, %xmm4 -vpunpckhdq %xmm2, %xmm6, %xmm5 -vpunpckhdq %xmm0, %xmm1, %xmm1 -vpunpcklqdq %xmm4, %xmm7, %xmm3 -vpxor 48(%ecx), %xmm3, %xmm2 -vpunpckhqdq %xmm4, %xmm7, %xmm0 -vpunpcklqdq %xmm1, %xmm5, %xmm3 -vpunpckhqdq %xmm1, %xmm5, %xmm5 -vpxor 112(%ecx), %xmm0, %xmm4 -vpxor 176(%ecx), %xmm3, %xmm6 -vpxor 240(%ecx), %xmm5, %xmm7 -addl $256, %ecx -vmovdqu %xmm2, 48(%eax) -vmovdqu %xmm4, 112(%eax) -vmovdqu %xmm6, 176(%eax) -vmovdqu %xmm7, 240(%eax) -movl %ecx, 2156(%esp) +vmovdqu %ymm3, 32(%ebx) +vmovdqu %ymm4, 64(%ebx) +vmovdqu %ymm0, 96(%ebx) +vmovdqu %ymm7, (%ebx) +vpaddd 320(%esp), %ymm2, %ymm0 +vpaddd 192(%esp), %ymm1, %ymm3 +vmovdqu 128(%esp), %ymm1 +vmovdqu 352(%esp), %ymm2 +vpaddd 160(%esp), %ymm1, %ymm4 +vpaddd 96(%esp), %ymm2, %ymm5 +vperm2i128 $32, %ymm3, %ymm0, %ymm1 +vperm2i128 $32, %ymm5, %ymm4, %ymm2 +vperm2i128 $49, %ymm3, %ymm0, %ymm0 +vperm2i128 $49, %ymm5, %ymm4, %ymm3 +je chacha_blocks_avx2_17 chacha_blocks_avx2_16: -addl $-256, %edx -addl $256, %eax +vpxor 128(%edi), %ymm1, %ymm1 +vpxor 160(%edi), %ymm2, %ymm2 +vpxor 192(%edi), %ymm0, %ymm0 +vpxor 224(%edi), %ymm3, %ymm3 +addl $256, %edi chacha_blocks_avx2_17: -vmovdqu 560(%esp), %xmm0 -movl %edx, %ecx -testl %edx, %edx -jne chacha_blocks_avx2_19 +addl $4, 304(%esp) +vmovdqu %ymm0, 192(%ebx) +vmovdqu %ymm1, 128(%ebx) +vmovdqu %ymm2, 160(%ebx) +vmovdqu %ymm3, 224(%ebx) +adcl $0, 308(%esp) +addl $-256, %edx +vmovdqu 304(%esp), %xmm0 +addl $256, %ebx chacha_blocks_avx2_18: -movl 8(%ebp), %eax -vmovdqu %xmm0, 32(%eax) -vzeroupper -addl $3828, %esp -popl %ebx -popl %edi -popl %esi -movl %ebp, %esp -popl %ebp -ret +cmpl $128, %edx +jb chacha_blocks_avx2_24 chacha_blocks_avx2_19: -movl %ecx, 20(%esp) -xorl %edi, %edi -movl %edx, 2152(%esp) -vmovdqu 2128(%esp), %xmm7 -vmovdqu 2112(%esp), %xmm1 -vmovdqu 2096(%esp), %xmm6 -movl 2156(%esp), %esi -jmp chacha_blocks_avx2_20 -chacha_blocks_avx2_33: -movl %ebx, 2152(%esp) -addl $64, %eax +vpxor %ymm7, %ymm7, %ymm7 +vinserti128 $1, %xmm0, %ymm0, %ymm0 +vinserti128 $1, 592(%esp), %ymm7, %ymm7 +vpaddq %ymm7, %ymm0, %ymm7 +vbroadcasti128 560(%esp), %ymm3 +vbroadcasti128 576(%esp), %ymm2 +vbroadcasti128 544(%esp), %ymm6 +vmovdqu %ymm2, 32(%esp) +vmovdqu %ymm3, 64(%esp) +vmovdqu %ymm7, (%esp) +vmovdqu %ymm6, 96(%esp) +vmovdqa %ymm6, %ymm1 +vmovdqa %ymm3, %ymm5 +vmovdqa %ymm2, %ymm4 +vmovdqa %ymm7, %ymm0 +movl 1516(%esp), %eax +vmovdqu 1536(%esp), %ymm2 +vmovdqu 1568(%esp), %ymm3 chacha_blocks_avx2_20: -incl %edi -movl %edi, %ebx -shll $6, %ebx -negl %ebx -addl 20(%esp), %ebx -lea 64(%ebx), %ecx -cmpl $64, %ecx -jae chacha_blocks_avx2_28 +vpaddd %ymm5, %ymm1, %ymm6 +vpxor %ymm6, %ymm0, %ymm1 +vpshufb %ymm3, %ymm1, %ymm0 +vpaddd %ymm0, %ymm4, %ymm1 +vpxor %ymm1, %ymm5, %ymm4 +vpsrld $20, %ymm4, %ymm5 +vpslld $12, %ymm4, %ymm7 +vpor %ymm7, %ymm5, %ymm7 +vpaddd %ymm7, %ymm6, %ymm5 +vpxor %ymm5, %ymm0, %ymm0 +vpshufd $147, %ymm5, %ymm5 +vpshufb %ymm2, %ymm0, %ymm4 +vpaddd %ymm4, %ymm1, %ymm6 +vpshufd $78, %ymm4, %ymm4 +vpxor %ymm6, %ymm7, %ymm1 +vpshufd $57, %ymm6, %ymm6 +vpsrld $25, %ymm1, %ymm0 +vpslld $7, %ymm1, %ymm7 +vpor %ymm7, %ymm0, %ymm0 +vpaddd %ymm0, %ymm5, %ymm1 +vpxor %ymm1, %ymm4, %ymm4 +vpshufb %ymm3, %ymm4, %ymm7 +vpaddd %ymm7, %ymm6, %ymm5 +vpxor %ymm5, %ymm0, %ymm4 +vpsrld $20, %ymm4, %ymm0 +vpslld $12, %ymm4, %ymm6 +vpor %ymm6, %ymm0, %ymm4 +vpaddd %ymm4, %ymm1, %ymm0 +vpxor %ymm0, %ymm7, %ymm1 +vpshufb %ymm2, %ymm1, %ymm7 +vpshufd $57, %ymm0, %ymm1 +vpaddd %ymm7, %ymm5, %ymm5 +vpshufd $78, %ymm7, %ymm0 +vpxor %ymm5, %ymm4, %ymm6 +vpshufd $147, %ymm5, %ymm4 +vpsrld $25, %ymm6, %ymm5 +vpslld $7, %ymm6, %ymm7 +vpor %ymm7, %ymm5, %ymm5 +addl $-2, %eax +jne chacha_blocks_avx2_20 chacha_blocks_avx2_21: -testl %esi, %esi -je chacha_blocks_avx2_27 +vmovdqu (%esp), %ymm7 +vmovdqu 32(%esp), %ymm2 +vmovdqu 64(%esp), %ymm3 +vmovdqu 96(%esp), %ymm6 +vpaddd %ymm7, %ymm0, %ymm0 +vpaddd %ymm2, %ymm4, %ymm2 +vpaddd %ymm3, %ymm5, %ymm3 +vpaddd %ymm6, %ymm1, %ymm1 +vperm2i128 $32, %ymm3, %ymm1, %ymm4 +vperm2i128 $32, %ymm0, %ymm2, %ymm5 +vperm2i128 $49, %ymm3, %ymm1, %ymm1 +vperm2i128 $49, %ymm0, %ymm2, %ymm0 +testl %edi, %edi +je chacha_blocks_avx2_23 chacha_blocks_avx2_22: -testl %ecx, %ecx -je chacha_blocks_avx2_26 +vpxor (%edi), %ymm4, %ymm4 +vpxor 32(%edi), %ymm5, %ymm5 +vpxor 64(%edi), %ymm1, %ymm1 +vpxor 96(%edi), %ymm0, %ymm0 +addl $128, %edi chacha_blocks_avx2_23: -movl %eax, 16(%esp) -xorl %edx, %edx +addl $2, 304(%esp) +vmovdqu %ymm0, 96(%ebx) +vmovdqu %ymm4, (%ebx) +vmovdqu %ymm5, 32(%ebx) +vmovdqu %ymm1, 64(%ebx) +adcl $0, 308(%esp) +addl $-128, %edx +vmovdqu 304(%esp), %xmm0 +addl $128, %ebx chacha_blocks_avx2_24: -movzbl (%edx,%esi), %eax -movb %al, 64(%esp,%edx) -incl %edx -cmpl %ecx, %edx -jb chacha_blocks_avx2_24 +testl %edx, %edx +jne chacha_blocks_avx2_26 chacha_blocks_avx2_25: -movl 16(%esp), %eax +movl 8(%ebp), %ecx +movl 304(%esp), %eax +movl 308(%esp), %edx +movl %eax, 32(%ecx) +movl %edx, 36(%ecx) +vzeroupper +addl $3124, %esp +popl %ebx +popl %edi +popl %esi +movl %ebp, %esp +popl %ebp +ret chacha_blocks_avx2_26: -lea 64(%esp), %esi +vmovdqu 1568(%esp), %ymm1 +vmovdqu 1536(%esp), %ymm2 +vmovdqu 576(%esp), %xmm7 +vmovdqu 544(%esp), %xmm6 +movl 304(%esp), %esi +movl 308(%esp), %ecx +vmovups %xmm1, 16(%esp) +vmovups %xmm2, (%esp) +vmovdqu 560(%esp), %xmm1 +jmp chacha_blocks_avx2_27 +chacha_blocks_avx2_43: +addl $-64, %edx +addl $64, %ebx chacha_blocks_avx2_27: -movl %eax, 2144(%esp) -lea 64(%esp), %eax +cmpl $64, %edx +jae chacha_blocks_avx2_38 chacha_blocks_avx2_28: -vmovdqu %xmm0, (%esp) +testl %edi, %edi +je chacha_blocks_avx2_37 +chacha_blocks_avx2_29: +testl %edx, %edx +jbe chacha_blocks_avx2_36 +chacha_blocks_avx2_30: +movl %edx, %eax +shrl $1, %eax +movl %eax, 60(%esp) +testl %eax, %eax +jbe chacha_blocks_avx2_45 +chacha_blocks_avx2_31: +movl %esi, 52(%esp) +xorl %eax, %eax +movl %edx, 1512(%esp) +movl %ebx, 56(%esp) +movl 60(%esp), %esi +chacha_blocks_avx2_32: +movzbl (%edi,%eax,2), %edx +movb %dl, 64(%esp,%eax,2) +movzbl 1(%edi,%eax,2), %ebx +movb %bl, 65(%esp,%eax,2) +incl %eax +cmpl %esi, %eax +jb chacha_blocks_avx2_32 +chacha_blocks_avx2_33: +movl 52(%esp), %esi +lea 1(%eax,%eax), %eax +movl 1512(%esp), %edx +movl 56(%esp), %ebx +movl %eax, 48(%esp) +chacha_blocks_avx2_34: +lea -1(%eax), %eax +cmpl %edx, %eax +jae chacha_blocks_avx2_36 +chacha_blocks_avx2_35: +movzbl (%eax,%edi), %eax +movl 48(%esp), %edi +movb %al, 63(%esp,%edi) +chacha_blocks_avx2_36: +lea 64(%esp), %edi +chacha_blocks_avx2_37: +movl %ebx, 1508(%esp) +lea 64(%esp), %ebx +chacha_blocks_avx2_38: +vmovdqu %xmm0, 32(%esp) vmovdqa %xmm6, %xmm2 -movl %esi, 2156(%esp) -xorl %edx, %edx -movl %eax, 16(%esp) +movl 1516(%esp), %eax vmovdqa %xmm1, %xmm3 -vmovdqu 2160(%esp), %xmm1 +vmovups 16(%esp), %xmm1 vmovdqa %xmm7, %xmm4 -movl 2148(%esp), %esi vmovdqa %xmm0, %xmm5 -vmovdqu 2176(%esp), %xmm0 -chacha_blocks_avx2_29: +vmovups (%esp), %xmm0 +chacha_blocks_avx2_39: vpaddd %xmm3, %xmm2, %xmm6 -incl %edx vpxor %xmm6, %xmm5, %xmm2 vpshufb %xmm1, %xmm2, %xmm5 vpaddd %xmm5, %xmm4, %xmm2 -lea (%edx,%edx), %eax vpxor %xmm2, %xmm3, %xmm4 vpsrld $20, %xmm4, %xmm3 vpslld $12, %xmm4, %xmm7 @@ -1000,254 +911,139 @@ vpslld $7, %xmm6, %xmm7 vpshufd $147, %xmm3, %xmm4 vpsrld $25, %xmm6, %xmm3 vpxor %xmm7, %xmm3, %xmm3 -cmpl %esi, %eax -jne chacha_blocks_avx2_29 -chacha_blocks_avx2_30: -vmovdqu 2128(%esp), %xmm7 -vmovdqu 2112(%esp), %xmm1 +addl $-2, %eax +jne chacha_blocks_avx2_39 +chacha_blocks_avx2_40: +vmovdqu 576(%esp), %xmm7 +vmovdqu 560(%esp), %xmm1 vpaddd %xmm7, %xmm4, %xmm4 -vmovdqu 2096(%esp), %xmm6 +vmovdqu 544(%esp), %xmm6 vpaddd %xmm1, %xmm3, %xmm3 -vmovdqu (%esp), %xmm0 +vmovdqu 32(%esp), %xmm0 vpaddd %xmm6, %xmm2, %xmm2 -movl 2156(%esp), %esi vpaddd %xmm0, %xmm5, %xmm5 -movl 16(%esp), %eax -testl %esi, %esi -je chacha_blocks_avx2_32 -chacha_blocks_avx2_31: -vpxor (%esi), %xmm2, %xmm2 -vpxor 16(%esi), %xmm3, %xmm3 -vpxor 32(%esi), %xmm4, %xmm4 -vpxor 48(%esi), %xmm5, %xmm5 -addl $64, %esi -chacha_blocks_avx2_32: -vmovdqu %xmm2, (%eax) -vmovdqu %xmm3, 16(%eax) -vmovdqu %xmm4, 32(%eax) -vmovdqu %xmm5, 48(%eax) -vpaddq 2080(%esp), %xmm0, %xmm0 -cmpl $64, %ecx -ja chacha_blocks_avx2_33 -chacha_blocks_avx2_34: -movl 2152(%esp), %edx +testl %edi, %edi +je chacha_blocks_avx2_42 +chacha_blocks_avx2_41: +vpxor (%edi), %xmm2, %xmm2 +vpxor 16(%edi), %xmm3, %xmm3 +vpxor 32(%edi), %xmm4, %xmm4 +vpxor 48(%edi), %xmm5, %xmm5 +addl $64, %edi +chacha_blocks_avx2_42: +addl $1, %esi +vmovdqu %xmm2, (%ebx) +vmovdqu %xmm3, 16(%ebx) +vmovdqu %xmm4, 32(%ebx) +vmovdqu %xmm5, 48(%ebx) +vpaddq 592(%esp), %xmm0, %xmm0 +adcl $0, %ecx cmpl $64, %edx -jae chacha_blocks_avx2_18 -chacha_blocks_avx2_35: +jbe chacha_blocks_avx2_46 +jmp chacha_blocks_avx2_43 +chacha_blocks_avx2_44: +vzeroupper +addl $3124, %esp +popl %ebx +popl %edi +popl %esi +movl %ebp, %esp +popl %ebp +ret +chacha_blocks_avx2_45: +movl $1, %eax +movl %eax, 48(%esp) +jmp chacha_blocks_avx2_34 +chacha_blocks_avx2_46: +movl %esi, 304(%esp) +movl %ecx, 308(%esp) +jae chacha_blocks_avx2_25 +chacha_blocks_avx2_47: testl %edx, %edx -jbe chacha_blocks_avx2_18 -chacha_blocks_avx2_36: -movl 2144(%esp), %esi -xorl %ebx, %ebx -chacha_blocks_avx2_37: -movzbl (%ebx,%eax), %ecx -movb %cl, (%ebx,%esi) -incl %ebx -cmpl %edx, %ebx -jb chacha_blocks_avx2_37 -jmp chacha_blocks_avx2_18 -chacha_blocks_avx2_39: -vmovdqu %xmm1, (%esp) -vmovdqu %xmm0, 16(%esp) -vmovdqu 352(%esp), %xmm0 -vmovdqu 368(%esp), %xmm1 -vmovdqu %xmm6, 32(%esp) -vpaddd 80(%esp), %xmm0, %xmm0 -vpaddd 96(%esp), %xmm3, %xmm3 -vpaddd 112(%esp), %xmm4, %xmm7 -vpaddd 128(%esp), %xmm1, %xmm6 -vpunpckldq %xmm3, %xmm0, %xmm4 -vpunpckldq %xmm6, %xmm7, %xmm1 -vmovdqu %xmm2, 448(%esp) -vpunpcklqdq %xmm1, %xmm4, %xmm2 -vpunpckhqdq %xmm1, %xmm4, %xmm4 -vpunpckhdq %xmm3, %xmm0, %xmm3 -vpunpckhdq %xmm6, %xmm7, %xmm6 -vpunpcklqdq %xmm6, %xmm3, %xmm7 -vmovdqu %xmm2, (%eax) -vmovdqu %xmm4, 64(%eax) -vmovdqu %xmm7, 128(%eax) -vpunpckhqdq %xmm6, %xmm3, %xmm0 -vpaddd 144(%esp), %xmm5, %xmm1 -vmovdqu 432(%esp), %xmm5 -vmovdqu 384(%esp), %xmm2 -vmovdqu 448(%esp), %xmm4 -vpaddd 160(%esp), %xmm5, %xmm5 -vpaddd 176(%esp), %xmm2, %xmm3 -vpaddd 192(%esp), %xmm4, %xmm7 -vpunpckldq %xmm5, %xmm1, %xmm6 -vpunpckldq %xmm7, %xmm3, %xmm2 -vmovdqu %xmm0, 192(%eax) -vpunpcklqdq %xmm2, %xmm6, %xmm0 -vpunpckhqdq %xmm2, %xmm6, %xmm2 -vpunpckhdq %xmm5, %xmm1, %xmm5 -vpunpckhdq %xmm7, %xmm3, %xmm3 -vpunpcklqdq %xmm3, %xmm5, %xmm1 -vpunpckhqdq %xmm3, %xmm5, %xmm7 -vmovdqu %xmm0, 16(%eax) -vmovdqu %xmm2, 80(%eax) -vmovdqu %xmm1, 144(%eax) -vmovdqu %xmm7, 208(%eax) -vmovdqu 16(%esp), %xmm3 -vmovdqu (%esp), %xmm0 -vmovdqu 320(%esp), %xmm5 -vmovdqu 304(%esp), %xmm2 -vpaddd 224(%esp), %xmm3, %xmm4 -vpaddd 208(%esp), %xmm0, %xmm6 -vpaddd 240(%esp), %xmm5, %xmm1 -vpaddd 256(%esp), %xmm2, %xmm3 -vpunpckldq %xmm4, %xmm6, %xmm7 -vpunpckldq %xmm3, %xmm1, %xmm0 -vpunpckhdq %xmm4, %xmm6, %xmm4 -vpunpckhdq %xmm3, %xmm1, %xmm1 -vpunpcklqdq %xmm0, %xmm7, %xmm5 -vpunpcklqdq %xmm1, %xmm4, %xmm6 -vpunpckhqdq %xmm1, %xmm4, %xmm3 -vmovdqu 32(%esp), %xmm1 -vmovdqu 416(%esp), %xmm4 -vmovdqu %xmm5, 32(%eax) -vmovdqu %xmm6, 160(%eax) -vmovdqu %xmm3, 224(%eax) -vpunpckhqdq %xmm0, %xmm7, %xmm7 -vmovdqu 400(%esp), %xmm5 -vmovdqu 336(%esp), %xmm0 -vpaddd 64(%esp), %xmm1, %xmm2 -vpaddd 272(%esp), %xmm4, %xmm1 -vpaddd 48(%esp), %xmm5, %xmm6 -vpaddd 288(%esp), %xmm0, %xmm4 -vmovdqu %xmm7, 96(%eax) -vpunpckldq %xmm2, %xmm6, %xmm7 -vpunpckldq %xmm4, %xmm1, %xmm5 -vpunpckhdq %xmm2, %xmm6, %xmm2 -vpunpckhdq %xmm4, %xmm1, %xmm6 -vpunpcklqdq %xmm5, %xmm7, %xmm3 -vpunpckhqdq %xmm5, %xmm7, %xmm5 -vpunpcklqdq %xmm6, %xmm2, %xmm0 -vpunpckhqdq %xmm6, %xmm2, %xmm1 -vmovdqu %xmm3, 48(%eax) -vmovdqu %xmm5, 112(%eax) -vmovdqu %xmm0, 176(%eax) -vmovdqu %xmm1, 240(%eax) -jmp chacha_blocks_avx2_16 -chacha_blocks_avx2_40: -vmovdqu %ymm1, 576(%esp) -vmovdqu 1792(%esp), %ymm2 -vmovdqu %ymm0, 608(%esp) -vpunpckldq %ymm3, %ymm4, %ymm1 -vpunpckhdq %ymm3, %ymm4, %ymm3 -vpunpckldq %ymm2, %ymm6, %ymm0 -vpunpckhdq %ymm2, %ymm6, %ymm6 -vmovdqu 1760(%esp), %ymm2 -vmovdqu %ymm3, (%esp) -vmovdqu 1728(%esp), %ymm3 -vmovdqu %ymm6, 32(%esp) -vpunpckldq %ymm2, %ymm7, %ymm6 -vpunpckhdq %ymm2, %ymm7, %ymm2 -vpunpckldq %ymm3, %ymm5, %ymm4 -vpunpckhdq %ymm3, %ymm5, %ymm7 -vpunpcklqdq %ymm0, %ymm1, %ymm3 -vpunpckhqdq %ymm0, %ymm1, %ymm0 -vpunpcklqdq %ymm4, %ymm6, %ymm5 -vpunpckhqdq %ymm4, %ymm6, %ymm6 -vperm2i128 $32, %ymm6, %ymm0, %ymm1 -vmovdqu %ymm1, 96(%esp) -vperm2i128 $49, %ymm6, %ymm0, %ymm1 -vmovdqu 32(%esp), %ymm0 -vmovdqu (%esp), %ymm6 -vmovdqu %ymm1, 160(%esp) -vpunpcklqdq %ymm0, %ymm6, %ymm1 -vperm2i128 $32, %ymm5, %ymm3, %ymm4 -vmovdqu %ymm4, 64(%esp) -vpunpcklqdq %ymm7, %ymm2, %ymm4 -vperm2i128 $49, %ymm5, %ymm3, %ymm5 -vmovdqu %ymm5, 128(%esp) -vpunpckhqdq %ymm0, %ymm6, %ymm5 -vpunpckhqdq %ymm7, %ymm2, %ymm0 -vmovdqu 608(%esp), %ymm2 -vperm2i128 $32, %ymm4, %ymm1, %ymm7 -vmovdqu %ymm7, 192(%esp) -vpaddd 1952(%esp), %ymm2, %ymm3 -vperm2i128 $32, %ymm0, %ymm5, %ymm6 -vperm2i128 $49, %ymm0, %ymm5, %ymm7 -vmovdqu 576(%esp), %ymm5 -vmovdqu 1696(%esp), %ymm0 -vmovdqu %ymm6, 224(%esp) -vmovdqu 2336(%esp), %ymm6 -vmovdqu %ymm7, 288(%esp) -vmovdqu 2304(%esp), %ymm7 -vpaddd 1888(%esp), %ymm6, %ymm2 -vmovdqu 2272(%esp), %ymm6 -vpaddd 1664(%esp), %ymm7, %ymm7 -vpaddd 1856(%esp), %ymm6, %ymm6 -vperm2i128 $49, %ymm4, %ymm1, %ymm1 -vmovdqu 2368(%esp), %ymm4 -vmovdqu %ymm1, 256(%esp) -vpaddd 1984(%esp), %ymm5, %ymm1 -vpaddd 1920(%esp), %ymm4, %ymm5 -vpaddd 1632(%esp), %ymm0, %ymm4 -vmovdqu 2240(%esp), %ymm0 -vpaddd 1824(%esp), %ymm0, %ymm0 -vmovdqu %ymm0, 320(%esp) -vpunpckldq %ymm3, %ymm1, %ymm0 -vpunpckhdq %ymm3, %ymm1, %ymm1 -vpunpckhdq %ymm2, %ymm5, %ymm3 -vmovdqu %ymm0, 352(%esp) +jbe chacha_blocks_avx2_25 +chacha_blocks_avx2_48: +movl 1508(%esp), %esi +xorl %ecx, %ecx +chacha_blocks_avx2_49: +movzbl (%ecx,%ebx), %eax +movb %al, (%ecx,%esi) +incl %ecx +cmpl %edx, %ecx +jb chacha_blocks_avx2_49 +jmp chacha_blocks_avx2_25 +chacha_blocks_avx2_51: +vmovdqu %ymm0, 256(%ebx) +vmovdqu 1248(%esp), %ymm0 +vmovdqu %ymm6, 192(%ebx) +vmovdqu %ymm7, 320(%ebx) +vmovdqu 1280(%esp), %ymm3 +vmovdqu 1216(%esp), %ymm6 +vmovdqu %ymm4, 384(%ebx) +vmovdqu %ymm1, 448(%ebx) +vmovdqu 1696(%esp), %ymm4 +vmovdqu %ymm3, (%ebx) +vmovdqu %ymm2, 64(%ebx) +vmovdqu %ymm5, 128(%ebx) +vmovdqu 1728(%esp), %ymm5 +vpaddd 832(%esp), %ymm0, %ymm7 +vpaddd 800(%esp), %ymm6, %ymm1 +vpaddd 736(%esp), %ymm4, %ymm2 +vpaddd 768(%esp), %ymm5, %ymm5 +vmovdqu 1664(%esp), %ymm0 +vmovdqu 1184(%esp), %ymm6 +vpaddd 1152(%esp), %ymm0, %ymm3 +vpaddd 1120(%esp), %ymm6, %ymm4 +vmovdqu 1632(%esp), %ymm0 +vpaddd 704(%esp), %ymm0, %ymm6 +vmovdqu 1600(%esp), %ymm0 +vpaddd 672(%esp), %ymm0, %ymm0 +vmovdqu %ymm0, (%esp) +vpunpckldq %ymm1, %ymm7, %ymm0 +vpunpckhdq %ymm1, %ymm7, %ymm1 +vmovdqu (%esp), %ymm7 +vmovdqu %ymm0, 32(%esp) vpunpckldq %ymm2, %ymm5, %ymm0 -vpunpckldq %ymm4, %ymm7, %ymm2 -vpunpckhdq %ymm4, %ymm7, %ymm7 -vmovdqu %ymm3, 384(%esp) -vmovdqu 320(%esp), %ymm3 -vpunpckldq %ymm3, %ymm6, %ymm5 -vpunpckhdq %ymm3, %ymm6, %ymm6 -vpunpcklqdq %ymm5, %ymm2, %ymm3 -vmovdqu %ymm6, 416(%esp) -vmovdqu 352(%esp), %ymm6 -vpunpcklqdq %ymm0, %ymm6, %ymm4 -vpunpckhqdq %ymm0, %ymm6, %ymm6 +vpunpckhdq %ymm2, %ymm5, %ymm2 +vpunpckldq %ymm7, %ymm6, %ymm5 +vpunpckhdq %ymm7, %ymm6, %ymm6 +vmovdqu %ymm2, 64(%esp) +vpunpckldq %ymm4, %ymm3, %ymm2 +vpunpckhdq %ymm4, %ymm3, %ymm4 +vmovdqu 32(%esp), %ymm3 +vpunpcklqdq %ymm0, %ymm3, %ymm7 +vpunpckhqdq %ymm0, %ymm3, %ymm3 vpunpckhqdq %ymm5, %ymm2, %ymm0 -vperm2i128 $32, %ymm0, %ymm6, %ymm5 -vperm2i128 $49, %ymm0, %ymm6, %ymm0 -vmovdqu %ymm0, 480(%esp) -vmovdqu 416(%esp), %ymm0 -vmovdqu %ymm5, 96(%eax) -vmovdqu 192(%esp), %ymm5 -vperm2i128 $32, %ymm3, %ymm4, %ymm2 -vperm2i128 $49, %ymm3, %ymm4, %ymm3 -vmovdqu 384(%esp), %ymm4 -vmovdqu %ymm3, 448(%esp) -vmovdqu %ymm2, 32(%eax) -vmovdqu 96(%esp), %ymm2 -vmovdqu %ymm5, 128(%eax) -vmovdqu 288(%esp), %ymm5 -vpunpcklqdq %ymm4, %ymm1, %ymm6 -vpunpcklqdq %ymm0, %ymm7, %ymm3 -vpunpckhqdq %ymm4, %ymm1, %ymm4 -vpunpckhqdq %ymm0, %ymm7, %ymm1 -vmovdqu %ymm2, 64(%eax) -vmovdqu 160(%esp), %ymm2 -vmovdqu %ymm5, 448(%eax) -vmovdqu %ymm2, 320(%eax) -vperm2i128 $32, %ymm3, %ymm6, %ymm0 -vmovdqu %ymm0, 160(%eax) -vmovdqu 224(%esp), %ymm0 -vperm2i128 $49, %ymm3, %ymm6, %ymm6 -vmovdqu 64(%esp), %ymm3 -vmovdqu %ymm0, 192(%eax) -vmovdqu 448(%esp), %ymm0 -vmovdqu %ymm6, 416(%eax) -vmovdqu %ymm3, (%eax) -vmovdqu 480(%esp), %ymm3 -vmovdqu %ymm0, 288(%eax) -vmovdqu %ymm3, 352(%eax) -vperm2i128 $32, %ymm1, %ymm4, %ymm7 -vmovdqu %ymm7, 224(%eax) -vmovdqu 128(%esp), %ymm7 -vperm2i128 $49, %ymm1, %ymm4, %ymm1 -vmovdqu 256(%esp), %ymm4 -vmovdqu %ymm7, 256(%eax) -vmovdqu %ymm1, 480(%eax) -vmovdqu %ymm4, 384(%eax) -jmp chacha_blocks_avx2_9 +vmovdqu %ymm7, 96(%esp) +vpunpcklqdq %ymm5, %ymm2, %ymm7 +vmovdqu 64(%esp), %ymm5 +vpunpcklqdq %ymm5, %ymm1, %ymm2 +vpunpckhqdq %ymm5, %ymm1, %ymm1 +vmovdqu 96(%esp), %ymm5 +vmovdqu %ymm2, 128(%esp) +vpunpcklqdq %ymm6, %ymm4, %ymm2 +vpunpckhqdq %ymm6, %ymm4, %ymm4 +vperm2i128 $32, %ymm7, %ymm5, %ymm6 +vmovdqu %ymm6, 160(%esp) +vperm2i128 $32, %ymm0, %ymm3, %ymm6 +vperm2i128 $49, %ymm0, %ymm3, %ymm3 +vmovdqu 128(%esp), %ymm0 +vmovdqu %ymm3, 192(%esp) +vmovdqu %ymm6, 96(%ebx) +vperm2i128 $49, %ymm7, %ymm5, %ymm7 +vperm2i128 $32, %ymm2, %ymm0, %ymm3 +vperm2i128 $32, %ymm4, %ymm1, %ymm5 +vperm2i128 $49, %ymm2, %ymm0, %ymm0 +vperm2i128 $49, %ymm4, %ymm1, %ymm2 +vmovdqu 160(%esp), %ymm1 +vmovdqu %ymm3, 160(%ebx) +vmovdqu %ymm5, 224(%ebx) +vmovdqu %ymm7, 288(%ebx) +vmovdqu %ymm0, 416(%ebx) +vmovdqu %ymm1, 32(%ebx) +vmovdqu 192(%esp), %ymm1 +vmovdqu %ymm2, 480(%ebx) +vmovdqu %ymm1, 352(%ebx) +jmp chacha_blocks_avx2_8 FN_END chacha_blocks_avx2