; This file is generated from a similarly-named Perl script in the BoringSSL ; source tree. Do not edit by hand. default rel %define XMMWORD %define YMMWORD %define ZMMWORD %ifdef BORINGSSL_PREFIX %include "boringssl_prefix_symbols_nasm.inc" %endif section .text code align=64 EXTERN OPENSSL_ia32cap_P chacha20_poly1305_constants: ALIGN 64 $L$chacha20_consts: DB 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k' DB 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k' $L$rol8: DB 3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14 DB 3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14 $L$rol16: DB 2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13 DB 2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13 $L$avx2_init: DD 0,0,0,0 $L$sse_inc: DD 1,0,0,0 $L$avx2_inc: DD 2,0,0,0,2,0,0,0 $L$clamp: DQ 0x0FFFFFFC0FFFFFFF,0x0FFFFFFC0FFFFFFC DQ 0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF ALIGN 16 $L$and_masks: DB 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00 DB 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ALIGN 64 poly_hash_ad_internal: xor r10,r10 xor r11,r11 xor r12,r12 cmp r8,13 jne NEAR $L$hash_ad_loop $L$poly_fast_tls_ad: mov r10,QWORD[rcx] mov r11,QWORD[5+rcx] shr r11,24 mov r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 DB 0F3h,0C3h ;repret $L$hash_ad_loop: cmp r8,16 jb NEAR $L$hash_ad_tail add r10,QWORD[((0+0))+rcx] adc r11,QWORD[((8+0))+rcx] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rcx,[16+rcx] sub r8,16 jmp NEAR $L$hash_ad_loop $L$hash_ad_tail: cmp r8,0 je NEAR $L$hash_ad_done xor r13,r13 xor r14,r14 xor r15,r15 add rcx,r8 $L$hash_ad_tail_loop: shld r14,r13,8 shl r13,8 movzx r15,BYTE[((-1))+rcx] xor r13,r15 dec rcx dec r8 jne NEAR $L$hash_ad_tail_loop add r10,r13 adc r11,r14 adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$hash_ad_done: DB 0F3h,0C3h ;repret global chacha20_poly1305_open ALIGN 64 chacha20_poly1305_open: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_chacha20_poly1305_open: mov rdi,rcx mov rsi,rdx mov rdx,r8 mov rcx,r9 mov r8,QWORD[40+rsp] mov r9,QWORD[48+rsp] push rbp push rbx push r12 push r13 push r14 push r15 push r9 sub rsp,288 + 160 + 32 lea rbp,[32+rsp] and rbp,-32 movaps XMMWORD[(0+0)+rbp],xmm6 movaps XMMWORD[(16+0)+rbp],xmm7 movaps XMMWORD[(32+0)+rbp],xmm8 movaps XMMWORD[(48+0)+rbp],xmm9 movaps XMMWORD[(64+0)+rbp],xmm10 movaps XMMWORD[(80+0)+rbp],xmm11 movaps XMMWORD[(96+0)+rbp],xmm12 movaps XMMWORD[(112+0)+rbp],xmm13 movaps XMMWORD[(128+0)+rbp],xmm14 movaps XMMWORD[(144+0)+rbp],xmm15 mov rbx,rdx mov QWORD[((0+160+32))+rbp],r8 mov QWORD[((8+160+32))+rbp],rbx mov eax,DWORD[((OPENSSL_ia32cap_P+8))] and eax,288 xor eax,288 jz NEAR chacha20_poly1305_open_avx2 cmp rbx,128 jbe NEAR $L$open_sse_128 movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqu xmm4,XMMWORD[r9] movdqu xmm8,XMMWORD[16+r9] movdqu xmm12,XMMWORD[32+r9] movdqa xmm7,xmm12 movdqa XMMWORD[(160+48)+rbp],xmm4 movdqa XMMWORD[(160+64)+rbp],xmm8 movdqa XMMWORD[(160+96)+rbp],xmm12 mov r10,10 $L$open_sse_init_rounds: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 dec r10 jne NEAR $L$open_sse_init_rounds paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] pand xmm0,XMMWORD[$L$clamp] movdqa XMMWORD[(160+0)+rbp],xmm0 movdqa XMMWORD[(160+16)+rbp],xmm4 mov r8,r8 call poly_hash_ad_internal $L$open_sse_main_loop: cmp rbx,16*16 jb NEAR $L$open_sse_tail movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm2,xmm0 movdqa xmm6,xmm4 movdqa xmm10,xmm8 movdqa xmm3,xmm0 movdqa xmm7,xmm4 movdqa xmm11,xmm8 movdqa xmm15,XMMWORD[((160+96))+rbp] paddd xmm15,XMMWORD[$L$sse_inc] movdqa xmm14,xmm15 paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm13,xmm14 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 movdqa XMMWORD[(160+144)+rbp],xmm15 mov rcx,4 mov r8,rsi $L$open_sse_main_loop_rounds: movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 lea r8,[16+r8] pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] imul r9,r12 add r15,r10 adc r9,rdx DB 102,15,58,15,255,4 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,12 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] DB 102,15,58,15,255,12 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,4 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 dec rcx jge NEAR $L$open_sse_main_loop_rounds add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[16+r8] cmp rcx,-6 jg NEAR $L$open_sse_main_loop_rounds paddd xmm3,XMMWORD[$L$chacha20_consts] paddd xmm7,XMMWORD[((160+48))+rbp] paddd xmm11,XMMWORD[((160+64))+rbp] paddd xmm15,XMMWORD[((160+144))+rbp] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqa XMMWORD[(160+80)+rbp],xmm12 movdqu xmm12,XMMWORD[((0 + 0))+rsi] pxor xmm12,xmm3 movdqu XMMWORD[(0 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((16 + 0))+rsi] pxor xmm12,xmm7 movdqu XMMWORD[(16 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((32 + 0))+rsi] pxor xmm12,xmm11 movdqu XMMWORD[(32 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((48 + 0))+rsi] pxor xmm12,xmm15 movdqu XMMWORD[(48 + 0)+rdi],xmm12 movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 64)+rdi],xmm2 movdqu XMMWORD[(16 + 64)+rdi],xmm6 movdqu XMMWORD[(32 + 64)+rdi],xmm10 movdqu XMMWORD[(48 + 64)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 128))+rsi] movdqu xmm7,XMMWORD[((16 + 128))+rsi] movdqu xmm11,XMMWORD[((32 + 128))+rsi] movdqu xmm15,XMMWORD[((48 + 128))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 128)+rdi],xmm1 movdqu XMMWORD[(16 + 128)+rdi],xmm5 movdqu XMMWORD[(32 + 128)+rdi],xmm9 movdqu XMMWORD[(48 + 128)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 192))+rsi] movdqu xmm7,XMMWORD[((16 + 192))+rsi] movdqu xmm11,XMMWORD[((32 + 192))+rsi] movdqu xmm15,XMMWORD[((48 + 192))+rsi] pxor xmm0,xmm3 pxor xmm4,xmm7 pxor xmm8,xmm11 pxor xmm15,XMMWORD[((160+80))+rbp] movdqu XMMWORD[(0 + 192)+rdi],xmm0 movdqu XMMWORD[(16 + 192)+rdi],xmm4 movdqu XMMWORD[(32 + 192)+rdi],xmm8 movdqu XMMWORD[(48 + 192)+rdi],xmm15 lea rsi,[256+rsi] lea rdi,[256+rdi] sub rbx,16*16 jmp NEAR $L$open_sse_main_loop $L$open_sse_tail: test rbx,rbx jz NEAR $L$open_sse_finalize cmp rbx,12*16 ja NEAR $L$open_sse_tail_256 cmp rbx,8*16 ja NEAR $L$open_sse_tail_192 cmp rbx,4*16 ja NEAR $L$open_sse_tail_128 movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm12,XMMWORD[((160+96))+rbp] paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 xor r8,r8 mov rcx,rbx cmp rcx,16 jb NEAR $L$open_sse_tail_64_rounds $L$open_sse_tail_64_rounds_and_x1hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 sub rcx,16 $L$open_sse_tail_64_rounds: add r8,16 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 cmp rcx,16 jae NEAR $L$open_sse_tail_64_rounds_and_x1hash cmp r8,10*16 jne NEAR $L$open_sse_tail_64_rounds paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] jmp NEAR $L$open_sse_tail_64_dec_loop $L$open_sse_tail_128: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm13,XMMWORD[((160+96))+rbp] paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 mov rcx,rbx and rcx,-16 xor r8,r8 $L$open_sse_tail_128_rounds_and_x1hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$open_sse_tail_128_rounds: add r8,16 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 cmp r8,rcx jb NEAR $L$open_sse_tail_128_rounds_and_x1hash cmp r8,10*16 jne NEAR $L$open_sse_tail_128_rounds paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqu xmm3,XMMWORD[((0 + 0))+rsi] movdqu xmm7,XMMWORD[((16 + 0))+rsi] movdqu xmm11,XMMWORD[((32 + 0))+rsi] movdqu xmm15,XMMWORD[((48 + 0))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 0)+rdi],xmm1 movdqu XMMWORD[(16 + 0)+rdi],xmm5 movdqu XMMWORD[(32 + 0)+rdi],xmm9 movdqu XMMWORD[(48 + 0)+rdi],xmm15 sub rbx,4*16 lea rsi,[64+rsi] lea rdi,[64+rdi] jmp NEAR $L$open_sse_tail_64_dec_loop $L$open_sse_tail_192: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm2,xmm0 movdqa xmm6,xmm4 movdqa xmm10,xmm8 movdqa xmm14,XMMWORD[((160+96))+rbp] paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm13,xmm14 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 mov rcx,rbx mov r8,10*16 cmp rcx,10*16 cmovg rcx,r8 and rcx,-16 xor r8,r8 $L$open_sse_tail_192_rounds_and_x1hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$open_sse_tail_192_rounds: add r8,16 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 cmp r8,rcx jb NEAR $L$open_sse_tail_192_rounds_and_x1hash cmp r8,10*16 jne NEAR $L$open_sse_tail_192_rounds cmp rbx,11*16 jb NEAR $L$open_sse_tail_192_finish add r10,QWORD[((0+160))+rsi] adc r11,QWORD[((8+160))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 cmp rbx,12*16 jb NEAR $L$open_sse_tail_192_finish add r10,QWORD[((0+176))+rsi] adc r11,QWORD[((8+176))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$open_sse_tail_192_finish: paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqu xmm3,XMMWORD[((0 + 0))+rsi] movdqu xmm7,XMMWORD[((16 + 0))+rsi] movdqu xmm11,XMMWORD[((32 + 0))+rsi] movdqu xmm15,XMMWORD[((48 + 0))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 0)+rdi],xmm2 movdqu XMMWORD[(16 + 0)+rdi],xmm6 movdqu XMMWORD[(32 + 0)+rdi],xmm10 movdqu XMMWORD[(48 + 0)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 64)+rdi],xmm1 movdqu XMMWORD[(16 + 64)+rdi],xmm5 movdqu XMMWORD[(32 + 64)+rdi],xmm9 movdqu XMMWORD[(48 + 64)+rdi],xmm15 sub rbx,8*16 lea rsi,[128+rsi] lea rdi,[128+rdi] jmp NEAR $L$open_sse_tail_64_dec_loop $L$open_sse_tail_256: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm2,xmm0 movdqa xmm6,xmm4 movdqa xmm10,xmm8 movdqa xmm3,xmm0 movdqa xmm7,xmm4 movdqa xmm11,xmm8 movdqa xmm15,XMMWORD[((160+96))+rbp] paddd xmm15,XMMWORD[$L$sse_inc] movdqa xmm14,xmm15 paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm13,xmm14 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 movdqa XMMWORD[(160+144)+rbp],xmm15 xor r8,r8 $L$open_sse_tail_256_rounds_and_x1hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 movdqa XMMWORD[(160+80)+rbp],xmm11 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm11,xmm4 pslld xmm11,12 psrld xmm4,20 pxor xmm4,xmm11 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm11,xmm4 pslld xmm11,7 psrld xmm4,25 pxor xmm4,xmm11 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm11,xmm5 pslld xmm11,12 psrld xmm5,20 pxor xmm5,xmm11 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm11,xmm5 pslld xmm11,7 psrld xmm5,25 pxor xmm5,xmm11 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm11,xmm6 pslld xmm11,12 psrld xmm6,20 pxor xmm6,xmm11 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm11,xmm6 pslld xmm11,7 psrld xmm6,25 pxor xmm6,xmm11 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 movdqa xmm11,XMMWORD[((160+80))+rbp] mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx movdqa XMMWORD[(160+80)+rbp],xmm9 paddd xmm3,xmm7 pxor xmm15,xmm3 pshufb xmm15,XMMWORD[$L$rol16] paddd xmm11,xmm15 pxor xmm7,xmm11 movdqa xmm9,xmm7 pslld xmm9,12 psrld xmm7,20 pxor xmm7,xmm9 paddd xmm3,xmm7 pxor xmm15,xmm3 pshufb xmm15,XMMWORD[$L$rol8] paddd xmm11,xmm15 pxor xmm7,xmm11 movdqa xmm9,xmm7 pslld xmm9,7 psrld xmm7,25 pxor xmm7,xmm9 DB 102,15,58,15,255,4 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,12 movdqa xmm9,XMMWORD[((160+80))+rbp] mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 movdqa XMMWORD[(160+80)+rbp],xmm11 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm11,xmm4 pslld xmm11,12 psrld xmm4,20 pxor xmm4,xmm11 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm11,xmm4 pslld xmm11,7 psrld xmm4,25 pxor xmm4,xmm11 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm11,xmm5 pslld xmm11,12 psrld xmm5,20 pxor xmm5,xmm11 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm11,xmm5 pslld xmm11,7 psrld xmm5,25 pxor xmm5,xmm11 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 imul r9,r12 add r15,r10 adc r9,rdx paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm11,xmm6 pslld xmm11,12 psrld xmm6,20 pxor xmm6,xmm11 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm11,xmm6 pslld xmm11,7 psrld xmm6,25 pxor xmm6,xmm11 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 movdqa xmm11,XMMWORD[((160+80))+rbp] mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 movdqa XMMWORD[(160+80)+rbp],xmm9 paddd xmm3,xmm7 pxor xmm15,xmm3 pshufb xmm15,XMMWORD[$L$rol16] paddd xmm11,xmm15 pxor xmm7,xmm11 movdqa xmm9,xmm7 pslld xmm9,12 psrld xmm7,20 pxor xmm7,xmm9 paddd xmm3,xmm7 pxor xmm15,xmm3 pshufb xmm15,XMMWORD[$L$rol8] paddd xmm11,xmm15 pxor xmm7,xmm11 movdqa xmm9,xmm7 pslld xmm9,7 psrld xmm7,25 pxor xmm7,xmm9 DB 102,15,58,15,255,12 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,4 movdqa xmm9,XMMWORD[((160+80))+rbp] add r8,16 cmp r8,10*16 jb NEAR $L$open_sse_tail_256_rounds_and_x1hash mov rcx,rbx and rcx,-16 $L$open_sse_tail_256_hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add r8,16 cmp r8,rcx jb NEAR $L$open_sse_tail_256_hash paddd xmm3,XMMWORD[$L$chacha20_consts] paddd xmm7,XMMWORD[((160+48))+rbp] paddd xmm11,XMMWORD[((160+64))+rbp] paddd xmm15,XMMWORD[((160+144))+rbp] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqa XMMWORD[(160+80)+rbp],xmm12 movdqu xmm12,XMMWORD[((0 + 0))+rsi] pxor xmm12,xmm3 movdqu XMMWORD[(0 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((16 + 0))+rsi] pxor xmm12,xmm7 movdqu XMMWORD[(16 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((32 + 0))+rsi] pxor xmm12,xmm11 movdqu XMMWORD[(32 + 0)+rdi],xmm12 movdqu xmm12,XMMWORD[((48 + 0))+rsi] pxor xmm12,xmm15 movdqu XMMWORD[(48 + 0)+rdi],xmm12 movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 64)+rdi],xmm2 movdqu XMMWORD[(16 + 64)+rdi],xmm6 movdqu XMMWORD[(32 + 64)+rdi],xmm10 movdqu XMMWORD[(48 + 64)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 128))+rsi] movdqu xmm7,XMMWORD[((16 + 128))+rsi] movdqu xmm11,XMMWORD[((32 + 128))+rsi] movdqu xmm15,XMMWORD[((48 + 128))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 128)+rdi],xmm1 movdqu XMMWORD[(16 + 128)+rdi],xmm5 movdqu XMMWORD[(32 + 128)+rdi],xmm9 movdqu XMMWORD[(48 + 128)+rdi],xmm15 movdqa xmm12,XMMWORD[((160+80))+rbp] sub rbx,12*16 lea rsi,[192+rsi] lea rdi,[192+rdi] $L$open_sse_tail_64_dec_loop: cmp rbx,16 jb NEAR $L$open_sse_tail_16_init sub rbx,16 movdqu xmm3,XMMWORD[rsi] pxor xmm0,xmm3 movdqu XMMWORD[rdi],xmm0 lea rsi,[16+rsi] lea rdi,[16+rdi] movdqa xmm0,xmm4 movdqa xmm4,xmm8 movdqa xmm8,xmm12 jmp NEAR $L$open_sse_tail_64_dec_loop $L$open_sse_tail_16_init: movdqa xmm1,xmm0 $L$open_sse_tail_16: test rbx,rbx jz NEAR $L$open_sse_finalize pxor xmm3,xmm3 lea rsi,[((-1))+rbx*1+rsi] mov r8,rbx $L$open_sse_tail_16_compose: pslldq xmm3,1 pinsrb xmm3,BYTE[rsi],0 sub rsi,1 sub r8,1 jnz NEAR $L$open_sse_tail_16_compose DB 102,73,15,126,221 pextrq r14,xmm3,1 pxor xmm3,xmm1 $L$open_sse_tail_16_extract: pextrb XMMWORD[rdi],xmm3,0 psrldq xmm3,1 add rdi,1 sub rbx,1 jne NEAR $L$open_sse_tail_16_extract add r10,r13 adc r11,r14 adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$open_sse_finalize: add r10,QWORD[((0+160+32))+rbp] adc r11,QWORD[((8+160+32))+rbp] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 mov r13,r10 mov r14,r11 mov r15,r12 sub r10,-5 sbb r11,-1 sbb r12,3 cmovc r10,r13 cmovc r11,r14 cmovc r12,r15 add r10,QWORD[((0+160+16))+rbp] adc r11,QWORD[((8+160+16))+rbp] movaps xmm6,XMMWORD[((0+0))+rbp] movaps xmm7,XMMWORD[((16+0))+rbp] movaps xmm8,XMMWORD[((32+0))+rbp] movaps xmm9,XMMWORD[((48+0))+rbp] movaps xmm10,XMMWORD[((64+0))+rbp] movaps xmm11,XMMWORD[((80+0))+rbp] movaps xmm12,XMMWORD[((96+0))+rbp] movaps xmm13,XMMWORD[((112+0))+rbp] movaps xmm14,XMMWORD[((128+0))+rbp] movaps xmm15,XMMWORD[((144+0))+rbp] add rsp,288 + 160 + 32 pop r9 mov QWORD[r9],r10 mov QWORD[8+r9],r11 pop r15 pop r14 pop r13 pop r12 pop rbx pop rbp mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$open_sse_128: movdqu xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm1,xmm0 movdqa xmm2,xmm0 movdqu xmm4,XMMWORD[r9] movdqa xmm5,xmm4 movdqa xmm6,xmm4 movdqu xmm8,XMMWORD[16+r9] movdqa xmm9,xmm8 movdqa xmm10,xmm8 movdqu xmm12,XMMWORD[32+r9] movdqa xmm13,xmm12 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm14,xmm13 paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm7,xmm4 movdqa xmm11,xmm8 movdqa xmm15,xmm13 mov r10,10 $L$open_sse_128_rounds: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 dec r10 jnz NEAR $L$open_sse_128_rounds paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm4,xmm7 paddd xmm5,xmm7 paddd xmm6,xmm7 paddd xmm9,xmm11 paddd xmm10,xmm11 paddd xmm13,xmm15 paddd xmm15,XMMWORD[$L$sse_inc] paddd xmm14,xmm15 pand xmm0,XMMWORD[$L$clamp] movdqa XMMWORD[(160+0)+rbp],xmm0 movdqa XMMWORD[(160+16)+rbp],xmm4 mov r8,r8 call poly_hash_ad_internal $L$open_sse_128_xor_hash: cmp rbx,16 jb NEAR $L$open_sse_tail_16 sub rbx,16 add r10,QWORD[((0+0))+rsi] adc r11,QWORD[((8+0))+rsi] adc r12,1 movdqu xmm3,XMMWORD[rsi] pxor xmm1,xmm3 movdqu XMMWORD[rdi],xmm1 lea rsi,[16+rsi] lea rdi,[16+rdi] mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 movdqa xmm1,xmm5 movdqa xmm5,xmm9 movdqa xmm9,xmm13 movdqa xmm13,xmm2 movdqa xmm2,xmm6 movdqa xmm6,xmm10 movdqa xmm10,xmm14 jmp NEAR $L$open_sse_128_xor_hash $L$SEH_end_chacha20_poly1305_open: global chacha20_poly1305_seal ALIGN 64 chacha20_poly1305_seal: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_chacha20_poly1305_seal: mov rdi,rcx mov rsi,rdx mov rdx,r8 mov rcx,r9 mov r8,QWORD[40+rsp] mov r9,QWORD[48+rsp] push rbp push rbx push r12 push r13 push r14 push r15 push r9 sub rsp,288 + 160 + 32 lea rbp,[32+rsp] and rbp,-32 movaps XMMWORD[(0+0)+rbp],xmm6 movaps XMMWORD[(16+0)+rbp],xmm7 movaps XMMWORD[(32+0)+rbp],xmm8 movaps XMMWORD[(48+0)+rbp],xmm9 movaps XMMWORD[(64+0)+rbp],xmm10 movaps XMMWORD[(80+0)+rbp],xmm11 movaps XMMWORD[(96+0)+rbp],xmm12 movaps XMMWORD[(112+0)+rbp],xmm13 movaps XMMWORD[(128+0)+rbp],xmm14 movaps XMMWORD[(144+0)+rbp],xmm15 mov rbx,QWORD[56+r9] add rbx,rdx mov QWORD[((0+160+32))+rbp],r8 mov QWORD[((8+160+32))+rbp],rbx mov rbx,rdx mov eax,DWORD[((OPENSSL_ia32cap_P+8))] and eax,288 xor eax,288 jz NEAR chacha20_poly1305_seal_avx2 cmp rbx,128 jbe NEAR $L$seal_sse_128 movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqu xmm4,XMMWORD[r9] movdqu xmm8,XMMWORD[16+r9] movdqu xmm12,XMMWORD[32+r9] movdqa xmm1,xmm0 movdqa xmm2,xmm0 movdqa xmm3,xmm0 movdqa xmm5,xmm4 movdqa xmm6,xmm4 movdqa xmm7,xmm4 movdqa xmm9,xmm8 movdqa xmm10,xmm8 movdqa xmm11,xmm8 movdqa xmm15,xmm12 paddd xmm12,XMMWORD[$L$sse_inc] movdqa xmm14,xmm12 paddd xmm12,XMMWORD[$L$sse_inc] movdqa xmm13,xmm12 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+48)+rbp],xmm4 movdqa XMMWORD[(160+64)+rbp],xmm8 movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 movdqa XMMWORD[(160+144)+rbp],xmm15 mov r10,10 $L$seal_sse_init_rounds: movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] DB 102,15,58,15,255,4 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,12 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] DB 102,15,58,15,255,12 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,4 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 dec r10 jnz NEAR $L$seal_sse_init_rounds paddd xmm3,XMMWORD[$L$chacha20_consts] paddd xmm7,XMMWORD[((160+48))+rbp] paddd xmm11,XMMWORD[((160+64))+rbp] paddd xmm15,XMMWORD[((160+144))+rbp] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] pand xmm3,XMMWORD[$L$clamp] movdqa XMMWORD[(160+0)+rbp],xmm3 movdqa XMMWORD[(160+16)+rbp],xmm7 mov r8,r8 call poly_hash_ad_internal movdqu xmm3,XMMWORD[((0 + 0))+rsi] movdqu xmm7,XMMWORD[((16 + 0))+rsi] movdqu xmm11,XMMWORD[((32 + 0))+rsi] movdqu xmm15,XMMWORD[((48 + 0))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 0)+rdi],xmm2 movdqu XMMWORD[(16 + 0)+rdi],xmm6 movdqu XMMWORD[(32 + 0)+rdi],xmm10 movdqu XMMWORD[(48 + 0)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 64)+rdi],xmm1 movdqu XMMWORD[(16 + 64)+rdi],xmm5 movdqu XMMWORD[(32 + 64)+rdi],xmm9 movdqu XMMWORD[(48 + 64)+rdi],xmm15 cmp rbx,12*16 ja NEAR $L$seal_sse_main_init mov rcx,8*16 sub rbx,8*16 lea rsi,[128+rsi] jmp NEAR $L$seal_sse_128_tail_hash $L$seal_sse_main_init: movdqu xmm3,XMMWORD[((0 + 128))+rsi] movdqu xmm7,XMMWORD[((16 + 128))+rsi] movdqu xmm11,XMMWORD[((32 + 128))+rsi] movdqu xmm15,XMMWORD[((48 + 128))+rsi] pxor xmm0,xmm3 pxor xmm4,xmm7 pxor xmm8,xmm11 pxor xmm15,xmm12 movdqu XMMWORD[(0 + 128)+rdi],xmm0 movdqu XMMWORD[(16 + 128)+rdi],xmm4 movdqu XMMWORD[(32 + 128)+rdi],xmm8 movdqu XMMWORD[(48 + 128)+rdi],xmm15 mov rcx,12*16 sub rbx,12*16 lea rsi,[192+rsi] mov rcx,2 mov r8,8 cmp rbx,4*16 jbe NEAR $L$seal_sse_tail_64 cmp rbx,8*16 jbe NEAR $L$seal_sse_tail_128 cmp rbx,12*16 jbe NEAR $L$seal_sse_tail_192 $L$seal_sse_main_loop: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm2,xmm0 movdqa xmm6,xmm4 movdqa xmm10,xmm8 movdqa xmm3,xmm0 movdqa xmm7,xmm4 movdqa xmm11,xmm8 movdqa xmm15,XMMWORD[((160+96))+rbp] paddd xmm15,XMMWORD[$L$sse_inc] movdqa xmm14,xmm15 paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm13,xmm14 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 movdqa XMMWORD[(160+144)+rbp],xmm15 ALIGN 32 $L$seal_sse_main_rounds: movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] imul r9,r12 add r15,r10 adc r9,rdx DB 102,15,58,15,255,4 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,12 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,XMMWORD[$L$rol16] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,20 pslld xmm7,32-20 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,20 pslld xmm6,32-20 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,20 pslld xmm5,32-20 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,20 pslld xmm4,32-20 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[$L$rol8] paddd xmm3,xmm7 paddd xmm2,xmm6 paddd xmm1,xmm5 paddd xmm0,xmm4 pxor xmm15,xmm3 pxor xmm14,xmm2 pxor xmm13,xmm1 pxor xmm12,xmm0 DB 102,69,15,56,0,248 DB 102,69,15,56,0,240 DB 102,69,15,56,0,232 DB 102,69,15,56,0,224 movdqa xmm8,XMMWORD[((160+80))+rbp] paddd xmm11,xmm15 paddd xmm10,xmm14 paddd xmm9,xmm13 paddd xmm8,xmm12 pxor xmm7,xmm11 pxor xmm6,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm8 movdqa XMMWORD[(160+80)+rbp],xmm8 movdqa xmm8,xmm7 psrld xmm8,25 pslld xmm7,32-25 pxor xmm7,xmm8 movdqa xmm8,xmm6 psrld xmm8,25 pslld xmm6,32-25 pxor xmm6,xmm8 movdqa xmm8,xmm5 psrld xmm8,25 pslld xmm5,32-25 pxor xmm5,xmm8 movdqa xmm8,xmm4 psrld xmm8,25 pslld xmm4,32-25 pxor xmm4,xmm8 movdqa xmm8,XMMWORD[((160+80))+rbp] DB 102,15,58,15,255,12 DB 102,69,15,58,15,219,8 DB 102,69,15,58,15,255,4 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 lea rdi,[16+rdi] dec r8 jge NEAR $L$seal_sse_main_rounds add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] dec rcx jg NEAR $L$seal_sse_main_rounds paddd xmm3,XMMWORD[$L$chacha20_consts] paddd xmm7,XMMWORD[((160+48))+rbp] paddd xmm11,XMMWORD[((160+64))+rbp] paddd xmm15,XMMWORD[((160+144))+rbp] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqa XMMWORD[(160+80)+rbp],xmm14 movdqa XMMWORD[(160+80)+rbp],xmm14 movdqu xmm14,XMMWORD[((0 + 0))+rsi] pxor xmm14,xmm3 movdqu XMMWORD[(0 + 0)+rdi],xmm14 movdqu xmm14,XMMWORD[((16 + 0))+rsi] pxor xmm14,xmm7 movdqu XMMWORD[(16 + 0)+rdi],xmm14 movdqu xmm14,XMMWORD[((32 + 0))+rsi] pxor xmm14,xmm11 movdqu XMMWORD[(32 + 0)+rdi],xmm14 movdqu xmm14,XMMWORD[((48 + 0))+rsi] pxor xmm14,xmm15 movdqu XMMWORD[(48 + 0)+rdi],xmm14 movdqa xmm14,XMMWORD[((160+80))+rbp] movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 64)+rdi],xmm2 movdqu XMMWORD[(16 + 64)+rdi],xmm6 movdqu XMMWORD[(32 + 64)+rdi],xmm10 movdqu XMMWORD[(48 + 64)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 128))+rsi] movdqu xmm7,XMMWORD[((16 + 128))+rsi] movdqu xmm11,XMMWORD[((32 + 128))+rsi] movdqu xmm15,XMMWORD[((48 + 128))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 128)+rdi],xmm1 movdqu XMMWORD[(16 + 128)+rdi],xmm5 movdqu XMMWORD[(32 + 128)+rdi],xmm9 movdqu XMMWORD[(48 + 128)+rdi],xmm15 cmp rbx,16*16 ja NEAR $L$seal_sse_main_loop_xor mov rcx,12*16 sub rbx,12*16 lea rsi,[192+rsi] jmp NEAR $L$seal_sse_128_tail_hash $L$seal_sse_main_loop_xor: movdqu xmm3,XMMWORD[((0 + 192))+rsi] movdqu xmm7,XMMWORD[((16 + 192))+rsi] movdqu xmm11,XMMWORD[((32 + 192))+rsi] movdqu xmm15,XMMWORD[((48 + 192))+rsi] pxor xmm0,xmm3 pxor xmm4,xmm7 pxor xmm8,xmm11 pxor xmm15,xmm12 movdqu XMMWORD[(0 + 192)+rdi],xmm0 movdqu XMMWORD[(16 + 192)+rdi],xmm4 movdqu XMMWORD[(32 + 192)+rdi],xmm8 movdqu XMMWORD[(48 + 192)+rdi],xmm15 lea rsi,[256+rsi] sub rbx,16*16 mov rcx,6 mov r8,4 cmp rbx,12*16 jg NEAR $L$seal_sse_main_loop mov rcx,rbx test rbx,rbx je NEAR $L$seal_sse_128_tail_hash mov rcx,6 cmp rbx,8*16 ja NEAR $L$seal_sse_tail_192 cmp rbx,4*16 ja NEAR $L$seal_sse_tail_128 $L$seal_sse_tail_64: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm12,XMMWORD[((160+96))+rbp] paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 $L$seal_sse_tail_64_rounds_and_x2hash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_sse_tail_64_rounds_and_x1hash: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] dec rcx jg NEAR $L$seal_sse_tail_64_rounds_and_x2hash dec r8 jge NEAR $L$seal_sse_tail_64_rounds_and_x1hash paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] jmp NEAR $L$seal_sse_128_tail_xor $L$seal_sse_tail_128: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm13,XMMWORD[((160+96))+rbp] paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 $L$seal_sse_tail_128_rounds_and_x2hash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_sse_tail_128_rounds_and_x1hash: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 lea rdi,[16+rdi] dec rcx jg NEAR $L$seal_sse_tail_128_rounds_and_x2hash dec r8 jge NEAR $L$seal_sse_tail_128_rounds_and_x1hash paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqu xmm3,XMMWORD[((0 + 0))+rsi] movdqu xmm7,XMMWORD[((16 + 0))+rsi] movdqu xmm11,XMMWORD[((32 + 0))+rsi] movdqu xmm15,XMMWORD[((48 + 0))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 0)+rdi],xmm1 movdqu XMMWORD[(16 + 0)+rdi],xmm5 movdqu XMMWORD[(32 + 0)+rdi],xmm9 movdqu XMMWORD[(48 + 0)+rdi],xmm15 mov rcx,4*16 sub rbx,4*16 lea rsi,[64+rsi] jmp NEAR $L$seal_sse_128_tail_hash $L$seal_sse_tail_192: movdqa xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm4,XMMWORD[((160+48))+rbp] movdqa xmm8,XMMWORD[((160+64))+rbp] movdqa xmm1,xmm0 movdqa xmm5,xmm4 movdqa xmm9,xmm8 movdqa xmm2,xmm0 movdqa xmm6,xmm4 movdqa xmm10,xmm8 movdqa xmm14,XMMWORD[((160+96))+rbp] paddd xmm14,XMMWORD[$L$sse_inc] movdqa xmm13,xmm14 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm12,xmm13 paddd xmm12,XMMWORD[$L$sse_inc] movdqa XMMWORD[(160+96)+rbp],xmm12 movdqa XMMWORD[(160+112)+rbp],xmm13 movdqa XMMWORD[(160+128)+rbp],xmm14 $L$seal_sse_tail_192_rounds_and_x2hash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_sse_tail_192_rounds_and_x1hash: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 lea rdi,[16+rdi] dec rcx jg NEAR $L$seal_sse_tail_192_rounds_and_x2hash dec r8 jge NEAR $L$seal_sse_tail_192_rounds_and_x1hash paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm6,XMMWORD[((160+48))+rbp] paddd xmm10,XMMWORD[((160+64))+rbp] paddd xmm14,XMMWORD[((160+128))+rbp] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm5,XMMWORD[((160+48))+rbp] paddd xmm9,XMMWORD[((160+64))+rbp] paddd xmm13,XMMWORD[((160+112))+rbp] paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm4,XMMWORD[((160+48))+rbp] paddd xmm8,XMMWORD[((160+64))+rbp] paddd xmm12,XMMWORD[((160+96))+rbp] movdqu xmm3,XMMWORD[((0 + 0))+rsi] movdqu xmm7,XMMWORD[((16 + 0))+rsi] movdqu xmm11,XMMWORD[((32 + 0))+rsi] movdqu xmm15,XMMWORD[((48 + 0))+rsi] pxor xmm2,xmm3 pxor xmm6,xmm7 pxor xmm10,xmm11 pxor xmm15,xmm14 movdqu XMMWORD[(0 + 0)+rdi],xmm2 movdqu XMMWORD[(16 + 0)+rdi],xmm6 movdqu XMMWORD[(32 + 0)+rdi],xmm10 movdqu XMMWORD[(48 + 0)+rdi],xmm15 movdqu xmm3,XMMWORD[((0 + 64))+rsi] movdqu xmm7,XMMWORD[((16 + 64))+rsi] movdqu xmm11,XMMWORD[((32 + 64))+rsi] movdqu xmm15,XMMWORD[((48 + 64))+rsi] pxor xmm1,xmm3 pxor xmm5,xmm7 pxor xmm9,xmm11 pxor xmm15,xmm13 movdqu XMMWORD[(0 + 64)+rdi],xmm1 movdqu XMMWORD[(16 + 64)+rdi],xmm5 movdqu XMMWORD[(32 + 64)+rdi],xmm9 movdqu XMMWORD[(48 + 64)+rdi],xmm15 mov rcx,8*16 sub rbx,8*16 lea rsi,[128+rsi] $L$seal_sse_128_tail_hash: cmp rcx,16 jb NEAR $L$seal_sse_128_tail_xor add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 sub rcx,16 lea rdi,[16+rdi] jmp NEAR $L$seal_sse_128_tail_hash $L$seal_sse_128_tail_xor: cmp rbx,16 jb NEAR $L$seal_sse_tail_16 sub rbx,16 movdqu xmm3,XMMWORD[rsi] pxor xmm0,xmm3 movdqu XMMWORD[rdi],xmm0 add r10,QWORD[rdi] adc r11,QWORD[8+rdi] adc r12,1 lea rsi,[16+rsi] lea rdi,[16+rdi] mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 movdqa xmm0,xmm4 movdqa xmm4,xmm8 movdqa xmm8,xmm12 movdqa xmm12,xmm1 movdqa xmm1,xmm5 movdqa xmm5,xmm9 movdqa xmm9,xmm13 jmp NEAR $L$seal_sse_128_tail_xor $L$seal_sse_tail_16: test rbx,rbx jz NEAR $L$process_blocks_of_extra_in mov r8,rbx mov rcx,rbx lea rsi,[((-1))+rbx*1+rsi] pxor xmm15,xmm15 $L$seal_sse_tail_16_compose: pslldq xmm15,1 pinsrb xmm15,BYTE[rsi],0 lea rsi,[((-1))+rsi] dec rcx jne NEAR $L$seal_sse_tail_16_compose pxor xmm15,xmm0 mov rcx,rbx movdqu xmm0,xmm15 $L$seal_sse_tail_16_extract: pextrb XMMWORD[rdi],xmm0,0 psrldq xmm0,1 add rdi,1 sub rcx,1 jnz NEAR $L$seal_sse_tail_16_extract mov r9,QWORD[((288 + 160 + 32))+rsp] mov r14,QWORD[56+r9] mov r13,QWORD[48+r9] test r14,r14 jz NEAR $L$process_partial_block mov r15,16 sub r15,rbx cmp r14,r15 jge NEAR $L$load_extra_in mov r15,r14 $L$load_extra_in: lea rsi,[((-1))+r15*1+r13] add r13,r15 sub r14,r15 mov QWORD[48+r9],r13 mov QWORD[56+r9],r14 add r8,r15 pxor xmm11,xmm11 $L$load_extra_load_loop: pslldq xmm11,1 pinsrb xmm11,BYTE[rsi],0 lea rsi,[((-1))+rsi] sub r15,1 jnz NEAR $L$load_extra_load_loop mov r15,rbx $L$load_extra_shift_loop: pslldq xmm11,1 sub r15,1 jnz NEAR $L$load_extra_shift_loop lea r15,[$L$and_masks] shl rbx,4 pand xmm15,XMMWORD[((-16))+rbx*1+r15] por xmm15,xmm11 DB 102,77,15,126,253 pextrq r14,xmm15,1 add r10,r13 adc r11,r14 adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$process_blocks_of_extra_in: mov r9,QWORD[((288+32+160 ))+rsp] mov rsi,QWORD[48+r9] mov r8,QWORD[56+r9] mov rcx,r8 shr r8,4 $L$process_extra_hash_loop: jz NEAR process_extra_in_trailer add r10,QWORD[((0+0))+rsi] adc r11,QWORD[((8+0))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rsi,[16+rsi] sub r8,1 jmp NEAR $L$process_extra_hash_loop process_extra_in_trailer: and rcx,15 mov rbx,rcx jz NEAR $L$do_length_block lea rsi,[((-1))+rcx*1+rsi] $L$process_extra_in_trailer_load: pslldq xmm15,1 pinsrb xmm15,BYTE[rsi],0 lea rsi,[((-1))+rsi] sub rcx,1 jnz NEAR $L$process_extra_in_trailer_load $L$process_partial_block: lea r15,[$L$and_masks] shl rbx,4 pand xmm15,XMMWORD[((-16))+rbx*1+r15] DB 102,77,15,126,253 pextrq r14,xmm15,1 add r10,r13 adc r11,r14 adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$do_length_block: add r10,QWORD[((0+160+32))+rbp] adc r11,QWORD[((8+160+32))+rbp] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 mov r13,r10 mov r14,r11 mov r15,r12 sub r10,-5 sbb r11,-1 sbb r12,3 cmovc r10,r13 cmovc r11,r14 cmovc r12,r15 add r10,QWORD[((0+160+16))+rbp] adc r11,QWORD[((8+160+16))+rbp] movaps xmm6,XMMWORD[((0+0))+rbp] movaps xmm7,XMMWORD[((16+0))+rbp] movaps xmm8,XMMWORD[((32+0))+rbp] movaps xmm9,XMMWORD[((48+0))+rbp] movaps xmm10,XMMWORD[((64+0))+rbp] movaps xmm11,XMMWORD[((80+0))+rbp] movaps xmm12,XMMWORD[((96+0))+rbp] movaps xmm13,XMMWORD[((112+0))+rbp] movaps xmm14,XMMWORD[((128+0))+rbp] movaps xmm15,XMMWORD[((144+0))+rbp] add rsp,288 + 160 + 32 pop r9 mov QWORD[r9],r10 mov QWORD[8+r9],r11 pop r15 pop r14 pop r13 pop r12 pop rbx pop rbp mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$seal_sse_128: movdqu xmm0,XMMWORD[$L$chacha20_consts] movdqa xmm1,xmm0 movdqa xmm2,xmm0 movdqu xmm4,XMMWORD[r9] movdqa xmm5,xmm4 movdqa xmm6,xmm4 movdqu xmm8,XMMWORD[16+r9] movdqa xmm9,xmm8 movdqa xmm10,xmm8 movdqu xmm14,XMMWORD[32+r9] movdqa xmm12,xmm14 paddd xmm12,XMMWORD[$L$sse_inc] movdqa xmm13,xmm12 paddd xmm13,XMMWORD[$L$sse_inc] movdqa xmm7,xmm4 movdqa xmm11,xmm8 movdqa xmm15,xmm12 mov r10,10 $L$seal_sse_128_rounds: paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,4 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,12 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,4 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,12 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,4 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,12 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol16] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,12 psrld xmm4,20 pxor xmm4,xmm3 paddd xmm0,xmm4 pxor xmm12,xmm0 pshufb xmm12,XMMWORD[$L$rol8] paddd xmm8,xmm12 pxor xmm4,xmm8 movdqa xmm3,xmm4 pslld xmm3,7 psrld xmm4,25 pxor xmm4,xmm3 DB 102,15,58,15,228,12 DB 102,69,15,58,15,192,8 DB 102,69,15,58,15,228,4 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol16] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,12 psrld xmm5,20 pxor xmm5,xmm3 paddd xmm1,xmm5 pxor xmm13,xmm1 pshufb xmm13,XMMWORD[$L$rol8] paddd xmm9,xmm13 pxor xmm5,xmm9 movdqa xmm3,xmm5 pslld xmm3,7 psrld xmm5,25 pxor xmm5,xmm3 DB 102,15,58,15,237,12 DB 102,69,15,58,15,201,8 DB 102,69,15,58,15,237,4 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol16] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,12 psrld xmm6,20 pxor xmm6,xmm3 paddd xmm2,xmm6 pxor xmm14,xmm2 pshufb xmm14,XMMWORD[$L$rol8] paddd xmm10,xmm14 pxor xmm6,xmm10 movdqa xmm3,xmm6 pslld xmm3,7 psrld xmm6,25 pxor xmm6,xmm3 DB 102,15,58,15,246,12 DB 102,69,15,58,15,210,8 DB 102,69,15,58,15,246,4 dec r10 jnz NEAR $L$seal_sse_128_rounds paddd xmm0,XMMWORD[$L$chacha20_consts] paddd xmm1,XMMWORD[$L$chacha20_consts] paddd xmm2,XMMWORD[$L$chacha20_consts] paddd xmm4,xmm7 paddd xmm5,xmm7 paddd xmm6,xmm7 paddd xmm8,xmm11 paddd xmm9,xmm11 paddd xmm12,xmm15 paddd xmm15,XMMWORD[$L$sse_inc] paddd xmm13,xmm15 pand xmm2,XMMWORD[$L$clamp] movdqa XMMWORD[(160+0)+rbp],xmm2 movdqa XMMWORD[(160+16)+rbp],xmm6 mov r8,r8 call poly_hash_ad_internal jmp NEAR $L$seal_sse_128_tail_xor $L$SEH_end_chacha20_poly1305_seal: ALIGN 64 chacha20_poly1305_open_avx2: vzeroupper vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vbroadcasti128 ymm4,XMMWORD[r9] vbroadcasti128 ymm8,XMMWORD[16+r9] vbroadcasti128 ymm12,XMMWORD[32+r9] vpaddd ymm12,ymm12,YMMWORD[$L$avx2_init] cmp rbx,6*32 jbe NEAR $L$open_avx2_192 cmp rbx,10*32 jbe NEAR $L$open_avx2_320 vmovdqa YMMWORD[(160+64)+rbp],ymm4 vmovdqa YMMWORD[(160+96)+rbp],ymm8 vmovdqa YMMWORD[(160+160)+rbp],ymm12 mov r10,10 $L$open_avx2_init_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 dec r10 jne NEAR $L$open_avx2_init_rounds vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm4,ymm0,0x02 vpand ymm3,ymm3,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm3 vperm2i128 ymm0,ymm4,ymm0,0x13 vperm2i128 ymm4,ymm12,ymm8,0x13 mov r8,r8 call poly_hash_ad_internal xor rcx,rcx $L$open_avx2_init_hash: add r10,QWORD[((0+0))+rcx*1+rsi] adc r11,QWORD[((8+0))+rcx*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add rcx,16 cmp rcx,2*32 jne NEAR $L$open_avx2_init_hash vpxor ymm0,ymm0,YMMWORD[rsi] vpxor ymm4,ymm4,YMMWORD[32+rsi] vmovdqu YMMWORD[rdi],ymm0 vmovdqu YMMWORD[32+rdi],ymm4 lea rsi,[64+rsi] lea rdi,[64+rdi] sub rbx,2*32 $L$open_avx2_main_loop: cmp rbx,16*32 jb NEAR $L$open_avx2_main_loop_done vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm3,ymm0 vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm15,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm14,ymm12,ymm15 vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+256)+rbp],ymm15 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 xor rcx,rcx $L$open_avx2_main_loop_rounds: add r10,QWORD[((0+0))+rcx*1+rsi] adc r11,QWORD[((8+0))+rcx*1+rsi] adc r12,1 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 add r15,rax adc r9,rdx vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 add r10,QWORD[((0+16))+rcx*1+rsi] adc r11,QWORD[((8+16))+rcx*1+rsi] adc r12,1 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 add r15,rax adc r9,rdx vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 add r10,QWORD[((0+32))+rcx*1+rsi] adc r11,QWORD[((8+32))+rcx*1+rsi] adc r12,1 lea rcx,[48+rcx] vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 add r15,rax adc r9,rdx vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpalignr ymm12,ymm12,ymm12,4 cmp rcx,10*6*8 jne NEAR $L$open_avx2_main_loop_rounds vpaddd ymm3,ymm3,YMMWORD[$L$chacha20_consts] vpaddd ymm7,ymm7,YMMWORD[((160+64))+rbp] vpaddd ymm11,ymm11,YMMWORD[((160+96))+rbp] vpaddd ymm15,ymm15,YMMWORD[((160+256))+rbp] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+128)+rbp],ymm0 add r10,QWORD[((0+480))+rsi] adc r11,QWORD[((8+480))+rsi] adc r12,1 vperm2i128 ymm0,ymm7,ymm3,0x02 vperm2i128 ymm7,ymm7,ymm3,0x13 vperm2i128 ymm3,ymm15,ymm11,0x02 vperm2i128 ymm11,ymm15,ymm11,0x13 vpxor ymm0,ymm0,YMMWORD[((0+0))+rsi] vpxor ymm3,ymm3,YMMWORD[((32+0))+rsi] vpxor ymm7,ymm7,YMMWORD[((64+0))+rsi] vpxor ymm11,ymm11,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm0 vmovdqu YMMWORD[(32+0)+rdi],ymm3 vmovdqu YMMWORD[(64+0)+rdi],ymm7 vmovdqu YMMWORD[(96+0)+rdi],ymm11 vmovdqa ymm0,YMMWORD[((160+128))+rbp] mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+128))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+128))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm2 vmovdqu YMMWORD[(64+128)+rdi],ymm6 vmovdqu YMMWORD[(96+128)+rdi],ymm10 add r10,QWORD[((0+480+16))+rsi] adc r11,QWORD[((8+480+16))+rsi] adc r12,1 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+256))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+256))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+256))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+256))+rsi] vmovdqu YMMWORD[(0+256)+rdi],ymm3 vmovdqu YMMWORD[(32+256)+rdi],ymm1 vmovdqu YMMWORD[(64+256)+rdi],ymm5 vmovdqu YMMWORD[(96+256)+rdi],ymm9 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vperm2i128 ymm3,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm12,ymm8,0x02 vperm2i128 ymm8,ymm12,ymm8,0x13 vpxor ymm3,ymm3,YMMWORD[((0+384))+rsi] vpxor ymm0,ymm0,YMMWORD[((32+384))+rsi] vpxor ymm4,ymm4,YMMWORD[((64+384))+rsi] vpxor ymm8,ymm8,YMMWORD[((96+384))+rsi] vmovdqu YMMWORD[(0+384)+rdi],ymm3 vmovdqu YMMWORD[(32+384)+rdi],ymm0 vmovdqu YMMWORD[(64+384)+rdi],ymm4 vmovdqu YMMWORD[(96+384)+rdi],ymm8 lea rsi,[512+rsi] lea rdi,[512+rdi] sub rbx,16*32 jmp NEAR $L$open_avx2_main_loop $L$open_avx2_main_loop_done: test rbx,rbx vzeroupper je NEAR $L$open_sse_finalize cmp rbx,12*32 ja NEAR $L$open_avx2_tail_512 cmp rbx,8*32 ja NEAR $L$open_avx2_tail_384 cmp rbx,4*32 ja NEAR $L$open_avx2_tail_256 vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+160)+rbp],ymm12 xor r8,r8 mov rcx,rbx and rcx,-16 test rcx,rcx je NEAR $L$open_avx2_tail_128_rounds $L$open_avx2_tail_128_rounds_and_x1hash: add r10,QWORD[((0+0))+r8*1+rsi] adc r11,QWORD[((8+0))+r8*1+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$open_avx2_tail_128_rounds: add r8,16 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 cmp r8,rcx jb NEAR $L$open_avx2_tail_128_rounds_and_x1hash cmp r8,160 jne NEAR $L$open_avx2_tail_128_rounds vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 jmp NEAR $L$open_avx2_tail_128_xor $L$open_avx2_tail_256: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm13,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 mov QWORD[((160+128))+rbp],rbx mov rcx,rbx sub rcx,4*32 shr rcx,4 mov r8,10 cmp rcx,10 cmovg rcx,r8 mov rbx,rsi xor r8,r8 $L$open_avx2_tail_256_rounds_and_x1hash: add r10,QWORD[((0+0))+rbx] adc r11,QWORD[((8+0))+rbx] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rbx,[16+rbx] $L$open_avx2_tail_256_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 inc r8 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,12 cmp r8,rcx jb NEAR $L$open_avx2_tail_256_rounds_and_x1hash cmp r8,10 jne NEAR $L$open_avx2_tail_256_rounds mov r8,rbx sub rbx,rsi mov rcx,rbx mov rbx,QWORD[((160+128))+rbp] $L$open_avx2_tail_256_hash: add rcx,16 cmp rcx,rbx jg NEAR $L$open_avx2_tail_256_done add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[16+r8] jmp NEAR $L$open_avx2_tail_256_hash $L$open_avx2_tail_256_done: vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+0))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+0))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+0))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm3 vmovdqu YMMWORD[(32+0)+rdi],ymm1 vmovdqu YMMWORD[(64+0)+rdi],ymm5 vmovdqu YMMWORD[(96+0)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 lea rsi,[128+rsi] lea rdi,[128+rdi] sub rbx,4*32 jmp NEAR $L$open_avx2_tail_128_xor $L$open_avx2_tail_384: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm14,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+224)+rbp],ymm14 mov QWORD[((160+128))+rbp],rbx mov rcx,rbx sub rcx,8*32 shr rcx,4 add rcx,6 mov r8,10 cmp rcx,10 cmovg rcx,r8 mov rbx,rsi xor r8,r8 $L$open_avx2_tail_384_rounds_and_x2hash: add r10,QWORD[((0+0))+rbx] adc r11,QWORD[((8+0))+rbx] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rbx,[16+rbx] $L$open_avx2_tail_384_rounds_and_x1hash: vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 add r10,QWORD[((0+0))+rbx] adc r11,QWORD[((8+0))+rbx] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rbx,[16+rbx] inc r8 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 cmp r8,rcx jb NEAR $L$open_avx2_tail_384_rounds_and_x2hash cmp r8,10 jne NEAR $L$open_avx2_tail_384_rounds_and_x1hash mov r8,rbx sub rbx,rsi mov rcx,rbx mov rbx,QWORD[((160+128))+rbp] $L$open_avx2_384_tail_hash: add rcx,16 cmp rcx,rbx jg NEAR $L$open_avx2_384_tail_done add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[16+r8] jmp NEAR $L$open_avx2_384_tail_hash $L$open_avx2_384_tail_done: vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+0))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+0))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+0))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm3 vmovdqu YMMWORD[(32+0)+rdi],ymm2 vmovdqu YMMWORD[(64+0)+rdi],ymm6 vmovdqu YMMWORD[(96+0)+rdi],ymm10 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+128))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+128))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm1 vmovdqu YMMWORD[(64+128)+rdi],ymm5 vmovdqu YMMWORD[(96+128)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 lea rsi,[256+rsi] lea rdi,[256+rdi] sub rbx,8*32 jmp NEAR $L$open_avx2_tail_128_xor $L$open_avx2_tail_512: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm3,ymm0 vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm15,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm14,ymm12,ymm15 vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+256)+rbp],ymm15 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 xor rcx,rcx mov r8,rsi $L$open_avx2_tail_512_rounds_and_x2hash: add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[16+r8] $L$open_avx2_tail_512_rounds_and_x1hash: vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 add r10,QWORD[((0+16))+r8] adc r11,QWORD[((8+16))+r8] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[32+r8] vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,4 inc rcx cmp rcx,4 jl NEAR $L$open_avx2_tail_512_rounds_and_x2hash cmp rcx,10 jne NEAR $L$open_avx2_tail_512_rounds_and_x1hash mov rcx,rbx sub rcx,12*32 and rcx,-16 $L$open_avx2_tail_512_hash: test rcx,rcx je NEAR $L$open_avx2_tail_512_done add r10,QWORD[((0+0))+r8] adc r11,QWORD[((8+0))+r8] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea r8,[16+r8] sub rcx,2*8 jmp NEAR $L$open_avx2_tail_512_hash $L$open_avx2_tail_512_done: vpaddd ymm3,ymm3,YMMWORD[$L$chacha20_consts] vpaddd ymm7,ymm7,YMMWORD[((160+64))+rbp] vpaddd ymm11,ymm11,YMMWORD[((160+96))+rbp] vpaddd ymm15,ymm15,YMMWORD[((160+256))+rbp] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+128)+rbp],ymm0 vperm2i128 ymm0,ymm7,ymm3,0x02 vperm2i128 ymm7,ymm7,ymm3,0x13 vperm2i128 ymm3,ymm15,ymm11,0x02 vperm2i128 ymm11,ymm15,ymm11,0x13 vpxor ymm0,ymm0,YMMWORD[((0+0))+rsi] vpxor ymm3,ymm3,YMMWORD[((32+0))+rsi] vpxor ymm7,ymm7,YMMWORD[((64+0))+rsi] vpxor ymm11,ymm11,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm0 vmovdqu YMMWORD[(32+0)+rdi],ymm3 vmovdqu YMMWORD[(64+0)+rdi],ymm7 vmovdqu YMMWORD[(96+0)+rdi],ymm11 vmovdqa ymm0,YMMWORD[((160+128))+rbp] vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+128))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+128))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm2 vmovdqu YMMWORD[(64+128)+rdi],ymm6 vmovdqu YMMWORD[(96+128)+rdi],ymm10 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+256))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+256))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+256))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+256))+rsi] vmovdqu YMMWORD[(0+256)+rdi],ymm3 vmovdqu YMMWORD[(32+256)+rdi],ymm1 vmovdqu YMMWORD[(64+256)+rdi],ymm5 vmovdqu YMMWORD[(96+256)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 lea rsi,[384+rsi] lea rdi,[384+rdi] sub rbx,12*32 $L$open_avx2_tail_128_xor: cmp rbx,32 jb NEAR $L$open_avx2_tail_32_xor sub rbx,32 vpxor ymm0,ymm0,YMMWORD[rsi] vmovdqu YMMWORD[rdi],ymm0 lea rsi,[32+rsi] lea rdi,[32+rdi] vmovdqa ymm0,ymm4 vmovdqa ymm4,ymm8 vmovdqa ymm8,ymm12 jmp NEAR $L$open_avx2_tail_128_xor $L$open_avx2_tail_32_xor: cmp rbx,16 vmovdqa xmm1,xmm0 jb NEAR $L$open_avx2_exit sub rbx,16 vpxor xmm1,xmm0,XMMWORD[rsi] vmovdqu XMMWORD[rdi],xmm1 lea rsi,[16+rsi] lea rdi,[16+rdi] vperm2i128 ymm0,ymm0,ymm0,0x11 vmovdqa xmm1,xmm0 $L$open_avx2_exit: vzeroupper jmp NEAR $L$open_sse_tail_16 $L$open_avx2_192: vmovdqa ymm1,ymm0 vmovdqa ymm2,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm6,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm10,ymm8 vpaddd ymm13,ymm12,YMMWORD[$L$avx2_inc] vmovdqa ymm11,ymm12 vmovdqa ymm15,ymm13 mov r10,10 $L$open_avx2_192_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 dec r10 jne NEAR $L$open_avx2_192_rounds vpaddd ymm0,ymm0,ymm2 vpaddd ymm1,ymm1,ymm2 vpaddd ymm4,ymm4,ymm6 vpaddd ymm5,ymm5,ymm6 vpaddd ymm8,ymm8,ymm10 vpaddd ymm9,ymm9,ymm10 vpaddd ymm12,ymm12,ymm11 vpaddd ymm13,ymm13,ymm15 vperm2i128 ymm3,ymm4,ymm0,0x02 vpand ymm3,ymm3,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm3 vperm2i128 ymm0,ymm4,ymm0,0x13 vperm2i128 ymm4,ymm12,ymm8,0x13 vperm2i128 ymm8,ymm5,ymm1,0x02 vperm2i128 ymm12,ymm13,ymm9,0x02 vperm2i128 ymm1,ymm5,ymm1,0x13 vperm2i128 ymm5,ymm13,ymm9,0x13 $L$open_avx2_short: mov r8,r8 call poly_hash_ad_internal $L$open_avx2_short_hash_and_xor_loop: cmp rbx,32 jb NEAR $L$open_avx2_short_tail_32 sub rbx,32 add r10,QWORD[((0+0))+rsi] adc r11,QWORD[((8+0))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add r10,QWORD[((0+16))+rsi] adc r11,QWORD[((8+16))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor ymm0,ymm0,YMMWORD[rsi] vmovdqu YMMWORD[rdi],ymm0 lea rsi,[32+rsi] lea rdi,[32+rdi] vmovdqa ymm0,ymm4 vmovdqa ymm4,ymm8 vmovdqa ymm8,ymm12 vmovdqa ymm12,ymm1 vmovdqa ymm1,ymm5 vmovdqa ymm5,ymm9 vmovdqa ymm9,ymm13 vmovdqa ymm13,ymm2 vmovdqa ymm2,ymm6 jmp NEAR $L$open_avx2_short_hash_and_xor_loop $L$open_avx2_short_tail_32: cmp rbx,16 vmovdqa xmm1,xmm0 jb NEAR $L$open_avx2_short_tail_32_exit sub rbx,16 add r10,QWORD[((0+0))+rsi] adc r11,QWORD[((8+0))+rsi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor xmm3,xmm0,XMMWORD[rsi] vmovdqu XMMWORD[rdi],xmm3 lea rsi,[16+rsi] lea rdi,[16+rdi] vextracti128 xmm1,ymm0,1 $L$open_avx2_short_tail_32_exit: vzeroupper jmp NEAR $L$open_sse_tail_16 $L$open_avx2_320: vmovdqa ymm1,ymm0 vmovdqa ymm2,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm6,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm10,ymm8 vpaddd ymm13,ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm14,ymm13,YMMWORD[$L$avx2_inc] vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+224)+rbp],ymm14 mov r10,10 $L$open_avx2_320_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,12 dec r10 jne NEAR $L$open_avx2_320_rounds vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,ymm7 vpaddd ymm5,ymm5,ymm7 vpaddd ymm6,ymm6,ymm7 vpaddd ymm8,ymm8,ymm11 vpaddd ymm9,ymm9,ymm11 vpaddd ymm10,ymm10,ymm11 vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vperm2i128 ymm3,ymm4,ymm0,0x02 vpand ymm3,ymm3,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm3 vperm2i128 ymm0,ymm4,ymm0,0x13 vperm2i128 ymm4,ymm12,ymm8,0x13 vperm2i128 ymm8,ymm5,ymm1,0x02 vperm2i128 ymm12,ymm13,ymm9,0x02 vperm2i128 ymm1,ymm5,ymm1,0x13 vperm2i128 ymm5,ymm13,ymm9,0x13 vperm2i128 ymm9,ymm6,ymm2,0x02 vperm2i128 ymm13,ymm14,ymm10,0x02 vperm2i128 ymm2,ymm6,ymm2,0x13 vperm2i128 ymm6,ymm14,ymm10,0x13 jmp NEAR $L$open_avx2_short ALIGN 64 chacha20_poly1305_seal_avx2: vzeroupper vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vbroadcasti128 ymm4,XMMWORD[r9] vbroadcasti128 ymm8,XMMWORD[16+r9] vbroadcasti128 ymm12,XMMWORD[32+r9] vpaddd ymm12,ymm12,YMMWORD[$L$avx2_init] cmp rbx,6*32 jbe NEAR $L$seal_avx2_192 cmp rbx,10*32 jbe NEAR $L$seal_avx2_320 vmovdqa ymm1,ymm0 vmovdqa ymm2,ymm0 vmovdqa ymm3,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm6,ymm4 vmovdqa ymm7,ymm4 vmovdqa YMMWORD[(160+64)+rbp],ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm10,ymm8 vmovdqa ymm11,ymm8 vmovdqa YMMWORD[(160+96)+rbp],ymm8 vmovdqa ymm15,ymm12 vpaddd ymm14,ymm15,YMMWORD[$L$avx2_inc] vpaddd ymm13,ymm14,YMMWORD[$L$avx2_inc] vpaddd ymm12,ymm13,YMMWORD[$L$avx2_inc] vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+256)+rbp],ymm15 mov r10,10 $L$seal_avx2_init_rounds: vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,4 dec r10 jnz NEAR $L$seal_avx2_init_rounds vpaddd ymm3,ymm3,YMMWORD[$L$chacha20_consts] vpaddd ymm7,ymm7,YMMWORD[((160+64))+rbp] vpaddd ymm11,ymm11,YMMWORD[((160+96))+rbp] vpaddd ymm15,ymm15,YMMWORD[((160+256))+rbp] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm11,ymm15,ymm11,0x13 vperm2i128 ymm15,ymm7,ymm3,0x02 vperm2i128 ymm3,ymm7,ymm3,0x13 vpand ymm15,ymm15,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm15 mov r8,r8 call poly_hash_ad_internal vpxor ymm3,ymm3,YMMWORD[rsi] vpxor ymm11,ymm11,YMMWORD[32+rsi] vmovdqu YMMWORD[rdi],ymm3 vmovdqu YMMWORD[32+rdi],ymm11 vperm2i128 ymm15,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm15,ymm15,YMMWORD[((0+64))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+64))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+64))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+64))+rsi] vmovdqu YMMWORD[(0+64)+rdi],ymm15 vmovdqu YMMWORD[(32+64)+rdi],ymm2 vmovdqu YMMWORD[(64+64)+rdi],ymm6 vmovdqu YMMWORD[(96+64)+rdi],ymm10 vperm2i128 ymm15,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm15,ymm15,YMMWORD[((0+192))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+192))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+192))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+192))+rsi] vmovdqu YMMWORD[(0+192)+rdi],ymm15 vmovdqu YMMWORD[(32+192)+rdi],ymm1 vmovdqu YMMWORD[(64+192)+rdi],ymm5 vmovdqu YMMWORD[(96+192)+rdi],ymm9 vperm2i128 ymm15,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm15 lea rsi,[320+rsi] sub rbx,10*32 mov rcx,10*32 cmp rbx,4*32 jbe NEAR $L$seal_avx2_short_hash_remainder vpxor ymm0,ymm0,YMMWORD[rsi] vpxor ymm4,ymm4,YMMWORD[32+rsi] vpxor ymm8,ymm8,YMMWORD[64+rsi] vpxor ymm12,ymm12,YMMWORD[96+rsi] vmovdqu YMMWORD[320+rdi],ymm0 vmovdqu YMMWORD[352+rdi],ymm4 vmovdqu YMMWORD[384+rdi],ymm8 vmovdqu YMMWORD[416+rdi],ymm12 lea rsi,[128+rsi] sub rbx,4*32 mov rcx,8 mov r8,2 cmp rbx,4*32 jbe NEAR $L$seal_avx2_tail_128 cmp rbx,8*32 jbe NEAR $L$seal_avx2_tail_256 cmp rbx,12*32 jbe NEAR $L$seal_avx2_tail_384 cmp rbx,16*32 jbe NEAR $L$seal_avx2_tail_512 vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm3,ymm0 vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm15,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm14,ymm12,ymm15 vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+256)+rbp],ymm15 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,4 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 sub rdi,16 mov rcx,9 jmp NEAR $L$seal_avx2_main_loop_rounds_entry ALIGN 32 $L$seal_avx2_main_loop: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm3,ymm0 vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm15,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm14,ymm12,ymm15 vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+256)+rbp],ymm15 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 mov rcx,10 ALIGN 32 $L$seal_avx2_main_loop_rounds: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 add r15,rax adc r9,rdx vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 $L$seal_avx2_main_loop_rounds_entry: vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 add r15,rax adc r9,rdx vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 add r10,QWORD[((0+32))+rdi] adc r11,QWORD[((8+32))+rdi] adc r12,1 lea rdi,[48+rdi] vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 add r15,rax adc r9,rdx vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpalignr ymm12,ymm12,ymm12,4 dec rcx jne NEAR $L$seal_avx2_main_loop_rounds vpaddd ymm3,ymm3,YMMWORD[$L$chacha20_consts] vpaddd ymm7,ymm7,YMMWORD[((160+64))+rbp] vpaddd ymm11,ymm11,YMMWORD[((160+96))+rbp] vpaddd ymm15,ymm15,YMMWORD[((160+256))+rbp] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+128)+rbp],ymm0 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] vperm2i128 ymm0,ymm7,ymm3,0x02 vperm2i128 ymm7,ymm7,ymm3,0x13 vperm2i128 ymm3,ymm15,ymm11,0x02 vperm2i128 ymm11,ymm15,ymm11,0x13 vpxor ymm0,ymm0,YMMWORD[((0+0))+rsi] vpxor ymm3,ymm3,YMMWORD[((32+0))+rsi] vpxor ymm7,ymm7,YMMWORD[((64+0))+rsi] vpxor ymm11,ymm11,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm0 vmovdqu YMMWORD[(32+0)+rdi],ymm3 vmovdqu YMMWORD[(64+0)+rdi],ymm7 vmovdqu YMMWORD[(96+0)+rdi],ymm11 vmovdqa ymm0,YMMWORD[((160+128))+rbp] vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+128))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+128))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm2 vmovdqu YMMWORD[(64+128)+rdi],ymm6 vmovdqu YMMWORD[(96+128)+rdi],ymm10 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+256))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+256))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+256))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+256))+rsi] vmovdqu YMMWORD[(0+256)+rdi],ymm3 vmovdqu YMMWORD[(32+256)+rdi],ymm1 vmovdqu YMMWORD[(64+256)+rdi],ymm5 vmovdqu YMMWORD[(96+256)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm12,ymm8,0x02 vperm2i128 ymm8,ymm12,ymm8,0x13 vpxor ymm3,ymm3,YMMWORD[((0+384))+rsi] vpxor ymm0,ymm0,YMMWORD[((32+384))+rsi] vpxor ymm4,ymm4,YMMWORD[((64+384))+rsi] vpxor ymm8,ymm8,YMMWORD[((96+384))+rsi] vmovdqu YMMWORD[(0+384)+rdi],ymm3 vmovdqu YMMWORD[(32+384)+rdi],ymm0 vmovdqu YMMWORD[(64+384)+rdi],ymm4 vmovdqu YMMWORD[(96+384)+rdi],ymm8 lea rsi,[512+rsi] sub rbx,16*32 cmp rbx,16*32 jg NEAR $L$seal_avx2_main_loop add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] mov rcx,10 xor r8,r8 cmp rbx,12*32 ja NEAR $L$seal_avx2_tail_512 cmp rbx,8*32 ja NEAR $L$seal_avx2_tail_384 cmp rbx,4*32 ja NEAR $L$seal_avx2_tail_256 $L$seal_avx2_tail_128: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+160)+rbp],ymm12 $L$seal_avx2_tail_128_rounds_and_3xhash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_avx2_tail_128_rounds_and_2xhash: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] dec rcx jg NEAR $L$seal_avx2_tail_128_rounds_and_3xhash dec r8 jge NEAR $L$seal_avx2_tail_128_rounds_and_2xhash vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 jmp NEAR $L$seal_avx2_short_loop $L$seal_avx2_tail_256: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm13,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 $L$seal_avx2_tail_256_rounds_and_3xhash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_avx2_tail_256_rounds_and_2xhash: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] dec rcx jg NEAR $L$seal_avx2_tail_256_rounds_and_3xhash dec r8 jge NEAR $L$seal_avx2_tail_256_rounds_and_2xhash vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+0))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+0))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+0))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm3 vmovdqu YMMWORD[(32+0)+rdi],ymm1 vmovdqu YMMWORD[(64+0)+rdi],ymm5 vmovdqu YMMWORD[(96+0)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 mov rcx,4*32 lea rsi,[128+rsi] sub rbx,4*32 jmp NEAR $L$seal_avx2_short_hash_remainder $L$seal_avx2_tail_384: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm14,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+224)+rbp],ymm14 $L$seal_avx2_tail_384_rounds_and_3xhash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_avx2_tail_384_rounds_and_2xhash: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,12 lea rdi,[32+rdi] dec rcx jg NEAR $L$seal_avx2_tail_384_rounds_and_3xhash dec r8 jge NEAR $L$seal_avx2_tail_384_rounds_and_2xhash vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+0))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+0))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+0))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm3 vmovdqu YMMWORD[(32+0)+rdi],ymm2 vmovdqu YMMWORD[(64+0)+rdi],ymm6 vmovdqu YMMWORD[(96+0)+rdi],ymm10 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+128))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+128))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm1 vmovdqu YMMWORD[(64+128)+rdi],ymm5 vmovdqu YMMWORD[(96+128)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 mov rcx,8*32 lea rsi,[256+rsi] sub rbx,8*32 jmp NEAR $L$seal_avx2_short_hash_remainder $L$seal_avx2_tail_512: vmovdqa ymm0,YMMWORD[$L$chacha20_consts] vmovdqa ymm4,YMMWORD[((160+64))+rbp] vmovdqa ymm8,YMMWORD[((160+96))+rbp] vmovdqa ymm1,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm2,ymm0 vmovdqa ymm6,ymm4 vmovdqa ymm10,ymm8 vmovdqa ymm3,ymm0 vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm15,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm14,ymm12,ymm15 vpaddd ymm13,ymm12,ymm14 vpaddd ymm12,ymm12,ymm13 vmovdqa YMMWORD[(160+256)+rbp],ymm15 vmovdqa YMMWORD[(160+224)+rbp],ymm14 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+160)+rbp],ymm12 $L$seal_avx2_tail_512_rounds_and_3xhash: add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] $L$seal_avx2_tail_512_rounds_and_2xhash: vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,4 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,12 vpalignr ymm6,ymm6,ymm6,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm5,ymm5,ymm5,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm4,ymm4,ymm4,4 add r15,rax adc r9,rdx vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,12 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vmovdqa ymm8,YMMWORD[$L$rol16] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,20 vpslld ymm7,ymm7,32-20 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,20 vpslld ymm6,ymm6,32-20 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,20 vpslld ymm5,ymm5,32-20 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,20 vpslld ymm4,ymm4,32-20 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[$L$rol8] vpaddd ymm3,ymm3,ymm7 vpaddd ymm2,ymm2,ymm6 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 vpaddd ymm1,ymm1,ymm5 vpaddd ymm0,ymm0,ymm4 vpxor ymm15,ymm15,ymm3 vpxor ymm14,ymm14,ymm2 vpxor ymm13,ymm13,ymm1 vpxor ymm12,ymm12,ymm0 vpshufb ymm15,ymm15,ymm8 vpshufb ymm14,ymm14,ymm8 vpshufb ymm13,ymm13,ymm8 vpshufb ymm12,ymm12,ymm8 vpaddd ymm11,ymm11,ymm15 vpaddd ymm10,ymm10,ymm14 vpaddd ymm9,ymm9,ymm13 vpaddd ymm8,ymm12,YMMWORD[((160+128))+rbp] vpxor ymm7,ymm7,ymm11 vpxor ymm6,ymm6,ymm10 vpxor ymm5,ymm5,ymm9 vpxor ymm4,ymm4,ymm8 vmovdqa YMMWORD[(160+128)+rbp],ymm8 vpsrld ymm8,ymm7,25 mov rdx,QWORD[((0+160+0))+rbp] mov r15,rdx mulx r14,r13,r10 mulx rdx,rax,r11 imul r15,r12 add r14,rax adc r15,rdx vpslld ymm7,ymm7,32-25 vpxor ymm7,ymm7,ymm8 vpsrld ymm8,ymm6,25 vpslld ymm6,ymm6,32-25 vpxor ymm6,ymm6,ymm8 vpsrld ymm8,ymm5,25 vpslld ymm5,ymm5,32-25 vpxor ymm5,ymm5,ymm8 vpsrld ymm8,ymm4,25 vpslld ymm4,ymm4,32-25 vpxor ymm4,ymm4,ymm8 vmovdqa ymm8,YMMWORD[((160+128))+rbp] vpalignr ymm7,ymm7,ymm7,12 vpalignr ymm11,ymm11,ymm11,8 vpalignr ymm15,ymm15,ymm15,4 vpalignr ymm6,ymm6,ymm6,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm5,ymm5,ymm5,12 vpalignr ymm9,ymm9,ymm9,8 mov rdx,QWORD[((8+160+0))+rbp] mulx rax,r10,r10 add r14,r10 mulx r9,r11,r11 adc r15,r11 adc r9,0 imul rdx,r12 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm4,ymm4,ymm4,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm12,ymm12,ymm12,4 add r15,rax adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] dec rcx jg NEAR $L$seal_avx2_tail_512_rounds_and_3xhash dec r8 jge NEAR $L$seal_avx2_tail_512_rounds_and_2xhash vpaddd ymm3,ymm3,YMMWORD[$L$chacha20_consts] vpaddd ymm7,ymm7,YMMWORD[((160+64))+rbp] vpaddd ymm11,ymm11,YMMWORD[((160+96))+rbp] vpaddd ymm15,ymm15,YMMWORD[((160+256))+rbp] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm6,ymm6,YMMWORD[((160+64))+rbp] vpaddd ymm10,ymm10,YMMWORD[((160+96))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm5,ymm5,YMMWORD[((160+64))+rbp] vpaddd ymm9,ymm9,YMMWORD[((160+96))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,YMMWORD[((160+64))+rbp] vpaddd ymm8,ymm8,YMMWORD[((160+96))+rbp] vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vmovdqa YMMWORD[(160+128)+rbp],ymm0 vperm2i128 ymm0,ymm7,ymm3,0x02 vperm2i128 ymm7,ymm7,ymm3,0x13 vperm2i128 ymm3,ymm15,ymm11,0x02 vperm2i128 ymm11,ymm15,ymm11,0x13 vpxor ymm0,ymm0,YMMWORD[((0+0))+rsi] vpxor ymm3,ymm3,YMMWORD[((32+0))+rsi] vpxor ymm7,ymm7,YMMWORD[((64+0))+rsi] vpxor ymm11,ymm11,YMMWORD[((96+0))+rsi] vmovdqu YMMWORD[(0+0)+rdi],ymm0 vmovdqu YMMWORD[(32+0)+rdi],ymm3 vmovdqu YMMWORD[(64+0)+rdi],ymm7 vmovdqu YMMWORD[(96+0)+rdi],ymm11 vmovdqa ymm0,YMMWORD[((160+128))+rbp] vperm2i128 ymm3,ymm6,ymm2,0x02 vperm2i128 ymm6,ymm6,ymm2,0x13 vperm2i128 ymm2,ymm14,ymm10,0x02 vperm2i128 ymm10,ymm14,ymm10,0x13 vpxor ymm3,ymm3,YMMWORD[((0+128))+rsi] vpxor ymm2,ymm2,YMMWORD[((32+128))+rsi] vpxor ymm6,ymm6,YMMWORD[((64+128))+rsi] vpxor ymm10,ymm10,YMMWORD[((96+128))+rsi] vmovdqu YMMWORD[(0+128)+rdi],ymm3 vmovdqu YMMWORD[(32+128)+rdi],ymm2 vmovdqu YMMWORD[(64+128)+rdi],ymm6 vmovdqu YMMWORD[(96+128)+rdi],ymm10 vperm2i128 ymm3,ymm5,ymm1,0x02 vperm2i128 ymm5,ymm5,ymm1,0x13 vperm2i128 ymm1,ymm13,ymm9,0x02 vperm2i128 ymm9,ymm13,ymm9,0x13 vpxor ymm3,ymm3,YMMWORD[((0+256))+rsi] vpxor ymm1,ymm1,YMMWORD[((32+256))+rsi] vpxor ymm5,ymm5,YMMWORD[((64+256))+rsi] vpxor ymm9,ymm9,YMMWORD[((96+256))+rsi] vmovdqu YMMWORD[(0+256)+rdi],ymm3 vmovdqu YMMWORD[(32+256)+rdi],ymm1 vmovdqu YMMWORD[(64+256)+rdi],ymm5 vmovdqu YMMWORD[(96+256)+rdi],ymm9 vperm2i128 ymm3,ymm4,ymm0,0x13 vperm2i128 ymm0,ymm4,ymm0,0x02 vperm2i128 ymm4,ymm12,ymm8,0x02 vperm2i128 ymm12,ymm12,ymm8,0x13 vmovdqa ymm8,ymm3 mov rcx,12*32 lea rsi,[384+rsi] sub rbx,12*32 jmp NEAR $L$seal_avx2_short_hash_remainder $L$seal_avx2_320: vmovdqa ymm1,ymm0 vmovdqa ymm2,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm6,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm10,ymm8 vpaddd ymm13,ymm12,YMMWORD[$L$avx2_inc] vpaddd ymm14,ymm13,YMMWORD[$L$avx2_inc] vmovdqa ymm7,ymm4 vmovdqa ymm11,ymm8 vmovdqa YMMWORD[(160+160)+rbp],ymm12 vmovdqa YMMWORD[(160+192)+rbp],ymm13 vmovdqa YMMWORD[(160+224)+rbp],ymm14 mov r10,10 $L$seal_avx2_320_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,12 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol16] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpsrld ymm3,ymm6,20 vpslld ymm6,ymm6,12 vpxor ymm6,ymm6,ymm3 vpaddd ymm2,ymm2,ymm6 vpxor ymm14,ymm14,ymm2 vpshufb ymm14,ymm14,YMMWORD[$L$rol8] vpaddd ymm10,ymm10,ymm14 vpxor ymm6,ymm6,ymm10 vpslld ymm3,ymm6,7 vpsrld ymm6,ymm6,25 vpxor ymm6,ymm6,ymm3 vpalignr ymm14,ymm14,ymm14,4 vpalignr ymm10,ymm10,ymm10,8 vpalignr ymm6,ymm6,ymm6,12 dec r10 jne NEAR $L$seal_avx2_320_rounds vpaddd ymm0,ymm0,YMMWORD[$L$chacha20_consts] vpaddd ymm1,ymm1,YMMWORD[$L$chacha20_consts] vpaddd ymm2,ymm2,YMMWORD[$L$chacha20_consts] vpaddd ymm4,ymm4,ymm7 vpaddd ymm5,ymm5,ymm7 vpaddd ymm6,ymm6,ymm7 vpaddd ymm8,ymm8,ymm11 vpaddd ymm9,ymm9,ymm11 vpaddd ymm10,ymm10,ymm11 vpaddd ymm12,ymm12,YMMWORD[((160+160))+rbp] vpaddd ymm13,ymm13,YMMWORD[((160+192))+rbp] vpaddd ymm14,ymm14,YMMWORD[((160+224))+rbp] vperm2i128 ymm3,ymm4,ymm0,0x02 vpand ymm3,ymm3,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm3 vperm2i128 ymm0,ymm4,ymm0,0x13 vperm2i128 ymm4,ymm12,ymm8,0x13 vperm2i128 ymm8,ymm5,ymm1,0x02 vperm2i128 ymm12,ymm13,ymm9,0x02 vperm2i128 ymm1,ymm5,ymm1,0x13 vperm2i128 ymm5,ymm13,ymm9,0x13 vperm2i128 ymm9,ymm6,ymm2,0x02 vperm2i128 ymm13,ymm14,ymm10,0x02 vperm2i128 ymm2,ymm6,ymm2,0x13 vperm2i128 ymm6,ymm14,ymm10,0x13 jmp NEAR $L$seal_avx2_short $L$seal_avx2_192: vmovdqa ymm1,ymm0 vmovdqa ymm2,ymm0 vmovdqa ymm5,ymm4 vmovdqa ymm6,ymm4 vmovdqa ymm9,ymm8 vmovdqa ymm10,ymm8 vpaddd ymm13,ymm12,YMMWORD[$L$avx2_inc] vmovdqa ymm11,ymm12 vmovdqa ymm15,ymm13 mov r10,10 $L$seal_avx2_192_rounds: vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,12 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,4 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,12 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,4 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol16] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpsrld ymm3,ymm4,20 vpslld ymm4,ymm4,12 vpxor ymm4,ymm4,ymm3 vpaddd ymm0,ymm0,ymm4 vpxor ymm12,ymm12,ymm0 vpshufb ymm12,ymm12,YMMWORD[$L$rol8] vpaddd ymm8,ymm8,ymm12 vpxor ymm4,ymm4,ymm8 vpslld ymm3,ymm4,7 vpsrld ymm4,ymm4,25 vpxor ymm4,ymm4,ymm3 vpalignr ymm12,ymm12,ymm12,4 vpalignr ymm8,ymm8,ymm8,8 vpalignr ymm4,ymm4,ymm4,12 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol16] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpsrld ymm3,ymm5,20 vpslld ymm5,ymm5,12 vpxor ymm5,ymm5,ymm3 vpaddd ymm1,ymm1,ymm5 vpxor ymm13,ymm13,ymm1 vpshufb ymm13,ymm13,YMMWORD[$L$rol8] vpaddd ymm9,ymm9,ymm13 vpxor ymm5,ymm5,ymm9 vpslld ymm3,ymm5,7 vpsrld ymm5,ymm5,25 vpxor ymm5,ymm5,ymm3 vpalignr ymm13,ymm13,ymm13,4 vpalignr ymm9,ymm9,ymm9,8 vpalignr ymm5,ymm5,ymm5,12 dec r10 jne NEAR $L$seal_avx2_192_rounds vpaddd ymm0,ymm0,ymm2 vpaddd ymm1,ymm1,ymm2 vpaddd ymm4,ymm4,ymm6 vpaddd ymm5,ymm5,ymm6 vpaddd ymm8,ymm8,ymm10 vpaddd ymm9,ymm9,ymm10 vpaddd ymm12,ymm12,ymm11 vpaddd ymm13,ymm13,ymm15 vperm2i128 ymm3,ymm4,ymm0,0x02 vpand ymm3,ymm3,YMMWORD[$L$clamp] vmovdqa YMMWORD[(160+0)+rbp],ymm3 vperm2i128 ymm0,ymm4,ymm0,0x13 vperm2i128 ymm4,ymm12,ymm8,0x13 vperm2i128 ymm8,ymm5,ymm1,0x02 vperm2i128 ymm12,ymm13,ymm9,0x02 vperm2i128 ymm1,ymm5,ymm1,0x13 vperm2i128 ymm5,ymm13,ymm9,0x13 $L$seal_avx2_short: mov r8,r8 call poly_hash_ad_internal xor rcx,rcx $L$seal_avx2_short_hash_remainder: cmp rcx,16 jb NEAR $L$seal_avx2_short_loop add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 sub rcx,16 add rdi,16 jmp NEAR $L$seal_avx2_short_hash_remainder $L$seal_avx2_short_loop: cmp rbx,32 jb NEAR $L$seal_avx2_short_tail sub rbx,32 vpxor ymm0,ymm0,YMMWORD[rsi] vmovdqu YMMWORD[rdi],ymm0 lea rsi,[32+rsi] add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 add r10,QWORD[((0+16))+rdi] adc r11,QWORD[((8+16))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[32+rdi] vmovdqa ymm0,ymm4 vmovdqa ymm4,ymm8 vmovdqa ymm8,ymm12 vmovdqa ymm12,ymm1 vmovdqa ymm1,ymm5 vmovdqa ymm5,ymm9 vmovdqa ymm9,ymm13 vmovdqa ymm13,ymm2 vmovdqa ymm2,ymm6 jmp NEAR $L$seal_avx2_short_loop $L$seal_avx2_short_tail: cmp rbx,16 jb NEAR $L$seal_avx2_exit sub rbx,16 vpxor xmm3,xmm0,XMMWORD[rsi] vmovdqu XMMWORD[rdi],xmm3 lea rsi,[16+rsi] add r10,QWORD[((0+0))+rdi] adc r11,QWORD[((8+0))+rdi] adc r12,1 mov rax,QWORD[((0+160+0))+rbp] mov r15,rax mul r10 mov r13,rax mov r14,rdx mov rax,QWORD[((0+160+0))+rbp] mul r11 imul r15,r12 add r14,rax adc r15,rdx mov rax,QWORD[((8+160+0))+rbp] mov r9,rax mul r10 add r14,rax adc rdx,0 mov r10,rdx mov rax,QWORD[((8+160+0))+rbp] mul r11 add r15,rax adc rdx,0 imul r9,r12 add r15,r10 adc r9,rdx mov r10,r13 mov r11,r14 mov r12,r15 and r12,3 mov r13,r15 and r13,-4 mov r14,r9 shrd r15,r9,2 shr r9,2 add r15,r13 adc r9,r14 add r10,r15 adc r11,r9 adc r12,0 lea rdi,[16+rdi] vextracti128 xmm0,ymm0,1 $L$seal_avx2_exit: vzeroupper jmp NEAR $L$seal_sse_tail_16