| ; This file is generated from a similarly-named Perl script in the BoringSSL | 
 | ; source tree. Do not edit by hand. | 
 |  | 
 | %ifdef BORINGSSL_PREFIX | 
 | %include "boringssl_prefix_symbols_nasm.inc" | 
 | %endif | 
 | %ifidn __OUTPUT_FORMAT__, win32 | 
 | %ifidn __OUTPUT_FORMAT__,obj | 
 | section	code	use32 class=code align=64 | 
 | %elifidn __OUTPUT_FORMAT__,win32 | 
 | $@feat.00 equ 1 | 
 | section	.text	code align=64 | 
 | %else | 
 | section	.text	code | 
 | %endif | 
 | global	_ChaCha20_ctr32_nohw | 
 | align	16 | 
 | _ChaCha20_ctr32_nohw: | 
 | L$_ChaCha20_ctr32_nohw_begin: | 
 | 	push	ebp | 
 | 	push	ebx | 
 | 	push	esi | 
 | 	push	edi | 
 | 	mov	esi,DWORD [32+esp] | 
 | 	mov	edi,DWORD [36+esp] | 
 | 	sub	esp,132 | 
 | 	mov	eax,DWORD [esi] | 
 | 	mov	ebx,DWORD [4+esi] | 
 | 	mov	ecx,DWORD [8+esi] | 
 | 	mov	edx,DWORD [12+esi] | 
 | 	mov	DWORD [80+esp],eax | 
 | 	mov	DWORD [84+esp],ebx | 
 | 	mov	DWORD [88+esp],ecx | 
 | 	mov	DWORD [92+esp],edx | 
 | 	mov	eax,DWORD [16+esi] | 
 | 	mov	ebx,DWORD [20+esi] | 
 | 	mov	ecx,DWORD [24+esi] | 
 | 	mov	edx,DWORD [28+esi] | 
 | 	mov	DWORD [96+esp],eax | 
 | 	mov	DWORD [100+esp],ebx | 
 | 	mov	DWORD [104+esp],ecx | 
 | 	mov	DWORD [108+esp],edx | 
 | 	mov	eax,DWORD [edi] | 
 | 	mov	ebx,DWORD [4+edi] | 
 | 	mov	ecx,DWORD [8+edi] | 
 | 	mov	edx,DWORD [12+edi] | 
 | 	sub	eax,1 | 
 | 	mov	DWORD [112+esp],eax | 
 | 	mov	DWORD [116+esp],ebx | 
 | 	mov	DWORD [120+esp],ecx | 
 | 	mov	DWORD [124+esp],edx | 
 | 	jmp	NEAR L$000entry | 
 | align	16 | 
 | L$001outer_loop: | 
 | 	mov	DWORD [156+esp],ebx | 
 | 	mov	DWORD [152+esp],eax | 
 | 	mov	DWORD [160+esp],ecx | 
 | L$000entry: | 
 | 	mov	eax,1634760805 | 
 | 	mov	DWORD [4+esp],857760878 | 
 | 	mov	DWORD [8+esp],2036477234 | 
 | 	mov	DWORD [12+esp],1797285236 | 
 | 	mov	ebx,DWORD [84+esp] | 
 | 	mov	ebp,DWORD [88+esp] | 
 | 	mov	ecx,DWORD [104+esp] | 
 | 	mov	esi,DWORD [108+esp] | 
 | 	mov	edx,DWORD [116+esp] | 
 | 	mov	edi,DWORD [120+esp] | 
 | 	mov	DWORD [20+esp],ebx | 
 | 	mov	DWORD [24+esp],ebp | 
 | 	mov	DWORD [40+esp],ecx | 
 | 	mov	DWORD [44+esp],esi | 
 | 	mov	DWORD [52+esp],edx | 
 | 	mov	DWORD [56+esp],edi | 
 | 	mov	ebx,DWORD [92+esp] | 
 | 	mov	edi,DWORD [124+esp] | 
 | 	mov	edx,DWORD [112+esp] | 
 | 	mov	ebp,DWORD [80+esp] | 
 | 	mov	ecx,DWORD [96+esp] | 
 | 	mov	esi,DWORD [100+esp] | 
 | 	add	edx,1 | 
 | 	mov	DWORD [28+esp],ebx | 
 | 	mov	DWORD [60+esp],edi | 
 | 	mov	DWORD [112+esp],edx | 
 | 	mov	ebx,10 | 
 | 	jmp	NEAR L$002loop | 
 | align	16 | 
 | L$002loop: | 
 | 	add	eax,ebp | 
 | 	mov	DWORD [128+esp],ebx | 
 | 	mov	ebx,ebp | 
 | 	xor	edx,eax | 
 | 	rol	edx,16 | 
 | 	add	ecx,edx | 
 | 	xor	ebx,ecx | 
 | 	mov	edi,DWORD [52+esp] | 
 | 	rol	ebx,12 | 
 | 	mov	ebp,DWORD [20+esp] | 
 | 	add	eax,ebx | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [esp],eax | 
 | 	rol	edx,8 | 
 | 	mov	eax,DWORD [4+esp] | 
 | 	add	ecx,edx | 
 | 	mov	DWORD [48+esp],edx | 
 | 	xor	ebx,ecx | 
 | 	add	eax,ebp | 
 | 	rol	ebx,7 | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [32+esp],ecx | 
 | 	rol	edi,16 | 
 | 	mov	DWORD [16+esp],ebx | 
 | 	add	esi,edi | 
 | 	mov	ecx,DWORD [40+esp] | 
 | 	xor	ebp,esi | 
 | 	mov	edx,DWORD [56+esp] | 
 | 	rol	ebp,12 | 
 | 	mov	ebx,DWORD [24+esp] | 
 | 	add	eax,ebp | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [4+esp],eax | 
 | 	rol	edi,8 | 
 | 	mov	eax,DWORD [8+esp] | 
 | 	add	esi,edi | 
 | 	mov	DWORD [52+esp],edi | 
 | 	xor	ebp,esi | 
 | 	add	eax,ebx | 
 | 	rol	ebp,7 | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [36+esp],esi | 
 | 	rol	edx,16 | 
 | 	mov	DWORD [20+esp],ebp | 
 | 	add	ecx,edx | 
 | 	mov	esi,DWORD [44+esp] | 
 | 	xor	ebx,ecx | 
 | 	mov	edi,DWORD [60+esp] | 
 | 	rol	ebx,12 | 
 | 	mov	ebp,DWORD [28+esp] | 
 | 	add	eax,ebx | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [8+esp],eax | 
 | 	rol	edx,8 | 
 | 	mov	eax,DWORD [12+esp] | 
 | 	add	ecx,edx | 
 | 	mov	DWORD [56+esp],edx | 
 | 	xor	ebx,ecx | 
 | 	add	eax,ebp | 
 | 	rol	ebx,7 | 
 | 	xor	edi,eax | 
 | 	rol	edi,16 | 
 | 	mov	DWORD [24+esp],ebx | 
 | 	add	esi,edi | 
 | 	xor	ebp,esi | 
 | 	rol	ebp,12 | 
 | 	mov	ebx,DWORD [20+esp] | 
 | 	add	eax,ebp | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [12+esp],eax | 
 | 	rol	edi,8 | 
 | 	mov	eax,DWORD [esp] | 
 | 	add	esi,edi | 
 | 	mov	edx,edi | 
 | 	xor	ebp,esi | 
 | 	add	eax,ebx | 
 | 	rol	ebp,7 | 
 | 	xor	edx,eax | 
 | 	rol	edx,16 | 
 | 	mov	DWORD [28+esp],ebp | 
 | 	add	ecx,edx | 
 | 	xor	ebx,ecx | 
 | 	mov	edi,DWORD [48+esp] | 
 | 	rol	ebx,12 | 
 | 	mov	ebp,DWORD [24+esp] | 
 | 	add	eax,ebx | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [esp],eax | 
 | 	rol	edx,8 | 
 | 	mov	eax,DWORD [4+esp] | 
 | 	add	ecx,edx | 
 | 	mov	DWORD [60+esp],edx | 
 | 	xor	ebx,ecx | 
 | 	add	eax,ebp | 
 | 	rol	ebx,7 | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [40+esp],ecx | 
 | 	rol	edi,16 | 
 | 	mov	DWORD [20+esp],ebx | 
 | 	add	esi,edi | 
 | 	mov	ecx,DWORD [32+esp] | 
 | 	xor	ebp,esi | 
 | 	mov	edx,DWORD [52+esp] | 
 | 	rol	ebp,12 | 
 | 	mov	ebx,DWORD [28+esp] | 
 | 	add	eax,ebp | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [4+esp],eax | 
 | 	rol	edi,8 | 
 | 	mov	eax,DWORD [8+esp] | 
 | 	add	esi,edi | 
 | 	mov	DWORD [48+esp],edi | 
 | 	xor	ebp,esi | 
 | 	add	eax,ebx | 
 | 	rol	ebp,7 | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [44+esp],esi | 
 | 	rol	edx,16 | 
 | 	mov	DWORD [24+esp],ebp | 
 | 	add	ecx,edx | 
 | 	mov	esi,DWORD [36+esp] | 
 | 	xor	ebx,ecx | 
 | 	mov	edi,DWORD [56+esp] | 
 | 	rol	ebx,12 | 
 | 	mov	ebp,DWORD [16+esp] | 
 | 	add	eax,ebx | 
 | 	xor	edx,eax | 
 | 	mov	DWORD [8+esp],eax | 
 | 	rol	edx,8 | 
 | 	mov	eax,DWORD [12+esp] | 
 | 	add	ecx,edx | 
 | 	mov	DWORD [52+esp],edx | 
 | 	xor	ebx,ecx | 
 | 	add	eax,ebp | 
 | 	rol	ebx,7 | 
 | 	xor	edi,eax | 
 | 	rol	edi,16 | 
 | 	mov	DWORD [28+esp],ebx | 
 | 	add	esi,edi | 
 | 	xor	ebp,esi | 
 | 	mov	edx,DWORD [48+esp] | 
 | 	rol	ebp,12 | 
 | 	mov	ebx,DWORD [128+esp] | 
 | 	add	eax,ebp | 
 | 	xor	edi,eax | 
 | 	mov	DWORD [12+esp],eax | 
 | 	rol	edi,8 | 
 | 	mov	eax,DWORD [esp] | 
 | 	add	esi,edi | 
 | 	mov	DWORD [56+esp],edi | 
 | 	xor	ebp,esi | 
 | 	rol	ebp,7 | 
 | 	dec	ebx | 
 | 	jnz	NEAR L$002loop | 
 | 	mov	ebx,DWORD [160+esp] | 
 | 	add	eax,1634760805 | 
 | 	add	ebp,DWORD [80+esp] | 
 | 	add	ecx,DWORD [96+esp] | 
 | 	add	esi,DWORD [100+esp] | 
 | 	cmp	ebx,64 | 
 | 	jb	NEAR L$003tail | 
 | 	mov	ebx,DWORD [156+esp] | 
 | 	add	edx,DWORD [112+esp] | 
 | 	add	edi,DWORD [120+esp] | 
 | 	xor	eax,DWORD [ebx] | 
 | 	xor	ebp,DWORD [16+ebx] | 
 | 	mov	DWORD [esp],eax | 
 | 	mov	eax,DWORD [152+esp] | 
 | 	xor	ecx,DWORD [32+ebx] | 
 | 	xor	esi,DWORD [36+ebx] | 
 | 	xor	edx,DWORD [48+ebx] | 
 | 	xor	edi,DWORD [56+ebx] | 
 | 	mov	DWORD [16+eax],ebp | 
 | 	mov	DWORD [32+eax],ecx | 
 | 	mov	DWORD [36+eax],esi | 
 | 	mov	DWORD [48+eax],edx | 
 | 	mov	DWORD [56+eax],edi | 
 | 	mov	ebp,DWORD [4+esp] | 
 | 	mov	ecx,DWORD [8+esp] | 
 | 	mov	esi,DWORD [12+esp] | 
 | 	mov	edx,DWORD [20+esp] | 
 | 	mov	edi,DWORD [24+esp] | 
 | 	add	ebp,857760878 | 
 | 	add	ecx,2036477234 | 
 | 	add	esi,1797285236 | 
 | 	add	edx,DWORD [84+esp] | 
 | 	add	edi,DWORD [88+esp] | 
 | 	xor	ebp,DWORD [4+ebx] | 
 | 	xor	ecx,DWORD [8+ebx] | 
 | 	xor	esi,DWORD [12+ebx] | 
 | 	xor	edx,DWORD [20+ebx] | 
 | 	xor	edi,DWORD [24+ebx] | 
 | 	mov	DWORD [4+eax],ebp | 
 | 	mov	DWORD [8+eax],ecx | 
 | 	mov	DWORD [12+eax],esi | 
 | 	mov	DWORD [20+eax],edx | 
 | 	mov	DWORD [24+eax],edi | 
 | 	mov	ebp,DWORD [28+esp] | 
 | 	mov	ecx,DWORD [40+esp] | 
 | 	mov	esi,DWORD [44+esp] | 
 | 	mov	edx,DWORD [52+esp] | 
 | 	mov	edi,DWORD [60+esp] | 
 | 	add	ebp,DWORD [92+esp] | 
 | 	add	ecx,DWORD [104+esp] | 
 | 	add	esi,DWORD [108+esp] | 
 | 	add	edx,DWORD [116+esp] | 
 | 	add	edi,DWORD [124+esp] | 
 | 	xor	ebp,DWORD [28+ebx] | 
 | 	xor	ecx,DWORD [40+ebx] | 
 | 	xor	esi,DWORD [44+ebx] | 
 | 	xor	edx,DWORD [52+ebx] | 
 | 	xor	edi,DWORD [60+ebx] | 
 | 	lea	ebx,[64+ebx] | 
 | 	mov	DWORD [28+eax],ebp | 
 | 	mov	ebp,DWORD [esp] | 
 | 	mov	DWORD [40+eax],ecx | 
 | 	mov	ecx,DWORD [160+esp] | 
 | 	mov	DWORD [44+eax],esi | 
 | 	mov	DWORD [52+eax],edx | 
 | 	mov	DWORD [60+eax],edi | 
 | 	mov	DWORD [eax],ebp | 
 | 	lea	eax,[64+eax] | 
 | 	sub	ecx,64 | 
 | 	jnz	NEAR L$001outer_loop | 
 | 	jmp	NEAR L$004done | 
 | L$003tail: | 
 | 	add	edx,DWORD [112+esp] | 
 | 	add	edi,DWORD [120+esp] | 
 | 	mov	DWORD [esp],eax | 
 | 	mov	DWORD [16+esp],ebp | 
 | 	mov	DWORD [32+esp],ecx | 
 | 	mov	DWORD [36+esp],esi | 
 | 	mov	DWORD [48+esp],edx | 
 | 	mov	DWORD [56+esp],edi | 
 | 	mov	ebp,DWORD [4+esp] | 
 | 	mov	ecx,DWORD [8+esp] | 
 | 	mov	esi,DWORD [12+esp] | 
 | 	mov	edx,DWORD [20+esp] | 
 | 	mov	edi,DWORD [24+esp] | 
 | 	add	ebp,857760878 | 
 | 	add	ecx,2036477234 | 
 | 	add	esi,1797285236 | 
 | 	add	edx,DWORD [84+esp] | 
 | 	add	edi,DWORD [88+esp] | 
 | 	mov	DWORD [4+esp],ebp | 
 | 	mov	DWORD [8+esp],ecx | 
 | 	mov	DWORD [12+esp],esi | 
 | 	mov	DWORD [20+esp],edx | 
 | 	mov	DWORD [24+esp],edi | 
 | 	mov	ebp,DWORD [28+esp] | 
 | 	mov	ecx,DWORD [40+esp] | 
 | 	mov	esi,DWORD [44+esp] | 
 | 	mov	edx,DWORD [52+esp] | 
 | 	mov	edi,DWORD [60+esp] | 
 | 	add	ebp,DWORD [92+esp] | 
 | 	add	ecx,DWORD [104+esp] | 
 | 	add	esi,DWORD [108+esp] | 
 | 	add	edx,DWORD [116+esp] | 
 | 	add	edi,DWORD [124+esp] | 
 | 	mov	DWORD [28+esp],ebp | 
 | 	mov	ebp,DWORD [156+esp] | 
 | 	mov	DWORD [40+esp],ecx | 
 | 	mov	ecx,DWORD [152+esp] | 
 | 	mov	DWORD [44+esp],esi | 
 | 	xor	esi,esi | 
 | 	mov	DWORD [52+esp],edx | 
 | 	mov	DWORD [60+esp],edi | 
 | 	xor	eax,eax | 
 | 	xor	edx,edx | 
 | L$005tail_loop: | 
 | 	mov	al,BYTE [ebp*1+esi] | 
 | 	mov	dl,BYTE [esi*1+esp] | 
 | 	lea	esi,[1+esi] | 
 | 	xor	al,dl | 
 | 	mov	BYTE [esi*1+ecx-1],al | 
 | 	dec	ebx | 
 | 	jnz	NEAR L$005tail_loop | 
 | L$004done: | 
 | 	add	esp,132 | 
 | 	pop	edi | 
 | 	pop	esi | 
 | 	pop	ebx | 
 | 	pop	ebp | 
 | 	ret | 
 | global	_ChaCha20_ctr32_ssse3 | 
 | align	16 | 
 | _ChaCha20_ctr32_ssse3: | 
 | L$_ChaCha20_ctr32_ssse3_begin: | 
 | 	push	ebp | 
 | 	push	ebx | 
 | 	push	esi | 
 | 	push	edi | 
 | 	call	L$pic_point | 
 | L$pic_point: | 
 | 	pop	eax | 
 | 	mov	edi,DWORD [20+esp] | 
 | 	mov	esi,DWORD [24+esp] | 
 | 	mov	ecx,DWORD [28+esp] | 
 | 	mov	edx,DWORD [32+esp] | 
 | 	mov	ebx,DWORD [36+esp] | 
 | 	mov	ebp,esp | 
 | 	sub	esp,524 | 
 | 	and	esp,-64 | 
 | 	mov	DWORD [512+esp],ebp | 
 | 	lea	eax,[(L$ssse3_data-L$pic_point)+eax] | 
 | 	movdqu	xmm3,[ebx] | 
 | 	cmp	ecx,256 | 
 | 	jb	NEAR L$0061x | 
 | 	mov	DWORD [516+esp],edx | 
 | 	mov	DWORD [520+esp],ebx | 
 | 	sub	ecx,256 | 
 | 	lea	ebp,[384+esp] | 
 | 	movdqu	xmm7,[edx] | 
 | 	pshufd	xmm0,xmm3,0 | 
 | 	pshufd	xmm1,xmm3,85 | 
 | 	pshufd	xmm2,xmm3,170 | 
 | 	pshufd	xmm3,xmm3,255 | 
 | 	paddd	xmm0,[48+eax] | 
 | 	pshufd	xmm4,xmm7,0 | 
 | 	pshufd	xmm5,xmm7,85 | 
 | 	psubd	xmm0,[64+eax] | 
 | 	pshufd	xmm6,xmm7,170 | 
 | 	pshufd	xmm7,xmm7,255 | 
 | 	movdqa	[64+ebp],xmm0 | 
 | 	movdqa	[80+ebp],xmm1 | 
 | 	movdqa	[96+ebp],xmm2 | 
 | 	movdqa	[112+ebp],xmm3 | 
 | 	movdqu	xmm3,[16+edx] | 
 | 	movdqa	[ebp-64],xmm4 | 
 | 	movdqa	[ebp-48],xmm5 | 
 | 	movdqa	[ebp-32],xmm6 | 
 | 	movdqa	[ebp-16],xmm7 | 
 | 	movdqa	xmm7,[32+eax] | 
 | 	lea	ebx,[128+esp] | 
 | 	pshufd	xmm0,xmm3,0 | 
 | 	pshufd	xmm1,xmm3,85 | 
 | 	pshufd	xmm2,xmm3,170 | 
 | 	pshufd	xmm3,xmm3,255 | 
 | 	pshufd	xmm4,xmm7,0 | 
 | 	pshufd	xmm5,xmm7,85 | 
 | 	pshufd	xmm6,xmm7,170 | 
 | 	pshufd	xmm7,xmm7,255 | 
 | 	movdqa	[ebp],xmm0 | 
 | 	movdqa	[16+ebp],xmm1 | 
 | 	movdqa	[32+ebp],xmm2 | 
 | 	movdqa	[48+ebp],xmm3 | 
 | 	movdqa	[ebp-128],xmm4 | 
 | 	movdqa	[ebp-112],xmm5 | 
 | 	movdqa	[ebp-96],xmm6 | 
 | 	movdqa	[ebp-80],xmm7 | 
 | 	lea	esi,[128+esi] | 
 | 	lea	edi,[128+edi] | 
 | 	jmp	NEAR L$007outer_loop | 
 | align	16 | 
 | L$007outer_loop: | 
 | 	movdqa	xmm1,[ebp-112] | 
 | 	movdqa	xmm2,[ebp-96] | 
 | 	movdqa	xmm3,[ebp-80] | 
 | 	movdqa	xmm5,[ebp-48] | 
 | 	movdqa	xmm6,[ebp-32] | 
 | 	movdqa	xmm7,[ebp-16] | 
 | 	movdqa	[ebx-112],xmm1 | 
 | 	movdqa	[ebx-96],xmm2 | 
 | 	movdqa	[ebx-80],xmm3 | 
 | 	movdqa	[ebx-48],xmm5 | 
 | 	movdqa	[ebx-32],xmm6 | 
 | 	movdqa	[ebx-16],xmm7 | 
 | 	movdqa	xmm2,[32+ebp] | 
 | 	movdqa	xmm3,[48+ebp] | 
 | 	movdqa	xmm4,[64+ebp] | 
 | 	movdqa	xmm5,[80+ebp] | 
 | 	movdqa	xmm6,[96+ebp] | 
 | 	movdqa	xmm7,[112+ebp] | 
 | 	paddd	xmm4,[64+eax] | 
 | 	movdqa	[32+ebx],xmm2 | 
 | 	movdqa	[48+ebx],xmm3 | 
 | 	movdqa	[64+ebx],xmm4 | 
 | 	movdqa	[80+ebx],xmm5 | 
 | 	movdqa	[96+ebx],xmm6 | 
 | 	movdqa	[112+ebx],xmm7 | 
 | 	movdqa	[64+ebp],xmm4 | 
 | 	movdqa	xmm0,[ebp-128] | 
 | 	movdqa	xmm6,xmm4 | 
 | 	movdqa	xmm3,[ebp-64] | 
 | 	movdqa	xmm4,[ebp] | 
 | 	movdqa	xmm5,[16+ebp] | 
 | 	mov	edx,10 | 
 | 	nop | 
 | align	16 | 
 | L$008loop: | 
 | 	paddd	xmm0,xmm3 | 
 | 	movdqa	xmm2,xmm3 | 
 | 	pxor	xmm6,xmm0 | 
 | 	pshufb	xmm6,[eax] | 
 | 	paddd	xmm4,xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	movdqa	xmm3,[ebx-48] | 
 | 	movdqa	xmm1,xmm2 | 
 | 	pslld	xmm2,12 | 
 | 	psrld	xmm1,20 | 
 | 	por	xmm2,xmm1 | 
 | 	movdqa	xmm1,[ebx-112] | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm7,[80+ebx] | 
 | 	pxor	xmm6,xmm0 | 
 | 	movdqa	[ebx-128],xmm0 | 
 | 	pshufb	xmm6,[16+eax] | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	[64+ebx],xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm0,xmm2 | 
 | 	pslld	xmm2,7 | 
 | 	psrld	xmm0,25 | 
 | 	pxor	xmm7,xmm1 | 
 | 	por	xmm2,xmm0 | 
 | 	movdqa	[ebx],xmm4 | 
 | 	pshufb	xmm7,[eax] | 
 | 	movdqa	[ebx-64],xmm2 | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	xmm4,[32+ebx] | 
 | 	pxor	xmm3,xmm5 | 
 | 	movdqa	xmm2,[ebx-32] | 
 | 	movdqa	xmm0,xmm3 | 
 | 	pslld	xmm3,12 | 
 | 	psrld	xmm0,20 | 
 | 	por	xmm3,xmm0 | 
 | 	movdqa	xmm0,[ebx-96] | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm6,[96+ebx] | 
 | 	pxor	xmm7,xmm1 | 
 | 	movdqa	[ebx-112],xmm1 | 
 | 	pshufb	xmm7,[16+eax] | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	[80+ebx],xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm1,xmm3 | 
 | 	pslld	xmm3,7 | 
 | 	psrld	xmm1,25 | 
 | 	pxor	xmm6,xmm0 | 
 | 	por	xmm3,xmm1 | 
 | 	movdqa	[16+ebx],xmm5 | 
 | 	pshufb	xmm6,[eax] | 
 | 	movdqa	[ebx-48],xmm3 | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	xmm5,[48+ebx] | 
 | 	pxor	xmm2,xmm4 | 
 | 	movdqa	xmm3,[ebx-16] | 
 | 	movdqa	xmm1,xmm2 | 
 | 	pslld	xmm2,12 | 
 | 	psrld	xmm1,20 | 
 | 	por	xmm2,xmm1 | 
 | 	movdqa	xmm1,[ebx-80] | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm7,[112+ebx] | 
 | 	pxor	xmm6,xmm0 | 
 | 	movdqa	[ebx-96],xmm0 | 
 | 	pshufb	xmm6,[16+eax] | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	[96+ebx],xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm0,xmm2 | 
 | 	pslld	xmm2,7 | 
 | 	psrld	xmm0,25 | 
 | 	pxor	xmm7,xmm1 | 
 | 	por	xmm2,xmm0 | 
 | 	pshufb	xmm7,[eax] | 
 | 	movdqa	[ebx-32],xmm2 | 
 | 	paddd	xmm5,xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	movdqa	xmm2,[ebx-48] | 
 | 	movdqa	xmm0,xmm3 | 
 | 	pslld	xmm3,12 | 
 | 	psrld	xmm0,20 | 
 | 	por	xmm3,xmm0 | 
 | 	movdqa	xmm0,[ebx-128] | 
 | 	paddd	xmm1,xmm3 | 
 | 	pxor	xmm7,xmm1 | 
 | 	movdqa	[ebx-80],xmm1 | 
 | 	pshufb	xmm7,[16+eax] | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	xmm6,xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm1,xmm3 | 
 | 	pslld	xmm3,7 | 
 | 	psrld	xmm1,25 | 
 | 	pxor	xmm6,xmm0 | 
 | 	por	xmm3,xmm1 | 
 | 	pshufb	xmm6,[eax] | 
 | 	movdqa	[ebx-16],xmm3 | 
 | 	paddd	xmm4,xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	movdqa	xmm3,[ebx-32] | 
 | 	movdqa	xmm1,xmm2 | 
 | 	pslld	xmm2,12 | 
 | 	psrld	xmm1,20 | 
 | 	por	xmm2,xmm1 | 
 | 	movdqa	xmm1,[ebx-112] | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm7,[64+ebx] | 
 | 	pxor	xmm6,xmm0 | 
 | 	movdqa	[ebx-128],xmm0 | 
 | 	pshufb	xmm6,[16+eax] | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	[112+ebx],xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm0,xmm2 | 
 | 	pslld	xmm2,7 | 
 | 	psrld	xmm0,25 | 
 | 	pxor	xmm7,xmm1 | 
 | 	por	xmm2,xmm0 | 
 | 	movdqa	[32+ebx],xmm4 | 
 | 	pshufb	xmm7,[eax] | 
 | 	movdqa	[ebx-48],xmm2 | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	xmm4,[ebx] | 
 | 	pxor	xmm3,xmm5 | 
 | 	movdqa	xmm2,[ebx-16] | 
 | 	movdqa	xmm0,xmm3 | 
 | 	pslld	xmm3,12 | 
 | 	psrld	xmm0,20 | 
 | 	por	xmm3,xmm0 | 
 | 	movdqa	xmm0,[ebx-96] | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm6,[80+ebx] | 
 | 	pxor	xmm7,xmm1 | 
 | 	movdqa	[ebx-112],xmm1 | 
 | 	pshufb	xmm7,[16+eax] | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	[64+ebx],xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm1,xmm3 | 
 | 	pslld	xmm3,7 | 
 | 	psrld	xmm1,25 | 
 | 	pxor	xmm6,xmm0 | 
 | 	por	xmm3,xmm1 | 
 | 	movdqa	[48+ebx],xmm5 | 
 | 	pshufb	xmm6,[eax] | 
 | 	movdqa	[ebx-32],xmm3 | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	xmm5,[16+ebx] | 
 | 	pxor	xmm2,xmm4 | 
 | 	movdqa	xmm3,[ebx-64] | 
 | 	movdqa	xmm1,xmm2 | 
 | 	pslld	xmm2,12 | 
 | 	psrld	xmm1,20 | 
 | 	por	xmm2,xmm1 | 
 | 	movdqa	xmm1,[ebx-80] | 
 | 	paddd	xmm0,xmm2 | 
 | 	movdqa	xmm7,[96+ebx] | 
 | 	pxor	xmm6,xmm0 | 
 | 	movdqa	[ebx-96],xmm0 | 
 | 	pshufb	xmm6,[16+eax] | 
 | 	paddd	xmm4,xmm6 | 
 | 	movdqa	[80+ebx],xmm6 | 
 | 	pxor	xmm2,xmm4 | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm0,xmm2 | 
 | 	pslld	xmm2,7 | 
 | 	psrld	xmm0,25 | 
 | 	pxor	xmm7,xmm1 | 
 | 	por	xmm2,xmm0 | 
 | 	pshufb	xmm7,[eax] | 
 | 	movdqa	[ebx-16],xmm2 | 
 | 	paddd	xmm5,xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	movdqa	xmm0,xmm3 | 
 | 	pslld	xmm3,12 | 
 | 	psrld	xmm0,20 | 
 | 	por	xmm3,xmm0 | 
 | 	movdqa	xmm0,[ebx-128] | 
 | 	paddd	xmm1,xmm3 | 
 | 	movdqa	xmm6,[64+ebx] | 
 | 	pxor	xmm7,xmm1 | 
 | 	movdqa	[ebx-80],xmm1 | 
 | 	pshufb	xmm7,[16+eax] | 
 | 	paddd	xmm5,xmm7 | 
 | 	movdqa	[96+ebx],xmm7 | 
 | 	pxor	xmm3,xmm5 | 
 | 	movdqa	xmm1,xmm3 | 
 | 	pslld	xmm3,7 | 
 | 	psrld	xmm1,25 | 
 | 	por	xmm3,xmm1 | 
 | 	dec	edx | 
 | 	jnz	NEAR L$008loop | 
 | 	movdqa	[ebx-64],xmm3 | 
 | 	movdqa	[ebx],xmm4 | 
 | 	movdqa	[16+ebx],xmm5 | 
 | 	movdqa	[64+ebx],xmm6 | 
 | 	movdqa	[96+ebx],xmm7 | 
 | 	movdqa	xmm1,[ebx-112] | 
 | 	movdqa	xmm2,[ebx-96] | 
 | 	movdqa	xmm3,[ebx-80] | 
 | 	paddd	xmm0,[ebp-128] | 
 | 	paddd	xmm1,[ebp-112] | 
 | 	paddd	xmm2,[ebp-96] | 
 | 	paddd	xmm3,[ebp-80] | 
 | 	movdqa	xmm6,xmm0 | 
 | 	punpckldq	xmm0,xmm1 | 
 | 	movdqa	xmm7,xmm2 | 
 | 	punpckldq	xmm2,xmm3 | 
 | 	punpckhdq	xmm6,xmm1 | 
 | 	punpckhdq	xmm7,xmm3 | 
 | 	movdqa	xmm1,xmm0 | 
 | 	punpcklqdq	xmm0,xmm2 | 
 | 	movdqa	xmm3,xmm6 | 
 | 	punpcklqdq	xmm6,xmm7 | 
 | 	punpckhqdq	xmm1,xmm2 | 
 | 	punpckhqdq	xmm3,xmm7 | 
 | 	movdqu	xmm4,[esi-128] | 
 | 	movdqu	xmm5,[esi-64] | 
 | 	movdqu	xmm2,[esi] | 
 | 	movdqu	xmm7,[64+esi] | 
 | 	lea	esi,[16+esi] | 
 | 	pxor	xmm4,xmm0 | 
 | 	movdqa	xmm0,[ebx-64] | 
 | 	pxor	xmm5,xmm1 | 
 | 	movdqa	xmm1,[ebx-48] | 
 | 	pxor	xmm6,xmm2 | 
 | 	movdqa	xmm2,[ebx-32] | 
 | 	pxor	xmm7,xmm3 | 
 | 	movdqa	xmm3,[ebx-16] | 
 | 	movdqu	[edi-128],xmm4 | 
 | 	movdqu	[edi-64],xmm5 | 
 | 	movdqu	[edi],xmm6 | 
 | 	movdqu	[64+edi],xmm7 | 
 | 	lea	edi,[16+edi] | 
 | 	paddd	xmm0,[ebp-64] | 
 | 	paddd	xmm1,[ebp-48] | 
 | 	paddd	xmm2,[ebp-32] | 
 | 	paddd	xmm3,[ebp-16] | 
 | 	movdqa	xmm6,xmm0 | 
 | 	punpckldq	xmm0,xmm1 | 
 | 	movdqa	xmm7,xmm2 | 
 | 	punpckldq	xmm2,xmm3 | 
 | 	punpckhdq	xmm6,xmm1 | 
 | 	punpckhdq	xmm7,xmm3 | 
 | 	movdqa	xmm1,xmm0 | 
 | 	punpcklqdq	xmm0,xmm2 | 
 | 	movdqa	xmm3,xmm6 | 
 | 	punpcklqdq	xmm6,xmm7 | 
 | 	punpckhqdq	xmm1,xmm2 | 
 | 	punpckhqdq	xmm3,xmm7 | 
 | 	movdqu	xmm4,[esi-128] | 
 | 	movdqu	xmm5,[esi-64] | 
 | 	movdqu	xmm2,[esi] | 
 | 	movdqu	xmm7,[64+esi] | 
 | 	lea	esi,[16+esi] | 
 | 	pxor	xmm4,xmm0 | 
 | 	movdqa	xmm0,[ebx] | 
 | 	pxor	xmm5,xmm1 | 
 | 	movdqa	xmm1,[16+ebx] | 
 | 	pxor	xmm6,xmm2 | 
 | 	movdqa	xmm2,[32+ebx] | 
 | 	pxor	xmm7,xmm3 | 
 | 	movdqa	xmm3,[48+ebx] | 
 | 	movdqu	[edi-128],xmm4 | 
 | 	movdqu	[edi-64],xmm5 | 
 | 	movdqu	[edi],xmm6 | 
 | 	movdqu	[64+edi],xmm7 | 
 | 	lea	edi,[16+edi] | 
 | 	paddd	xmm0,[ebp] | 
 | 	paddd	xmm1,[16+ebp] | 
 | 	paddd	xmm2,[32+ebp] | 
 | 	paddd	xmm3,[48+ebp] | 
 | 	movdqa	xmm6,xmm0 | 
 | 	punpckldq	xmm0,xmm1 | 
 | 	movdqa	xmm7,xmm2 | 
 | 	punpckldq	xmm2,xmm3 | 
 | 	punpckhdq	xmm6,xmm1 | 
 | 	punpckhdq	xmm7,xmm3 | 
 | 	movdqa	xmm1,xmm0 | 
 | 	punpcklqdq	xmm0,xmm2 | 
 | 	movdqa	xmm3,xmm6 | 
 | 	punpcklqdq	xmm6,xmm7 | 
 | 	punpckhqdq	xmm1,xmm2 | 
 | 	punpckhqdq	xmm3,xmm7 | 
 | 	movdqu	xmm4,[esi-128] | 
 | 	movdqu	xmm5,[esi-64] | 
 | 	movdqu	xmm2,[esi] | 
 | 	movdqu	xmm7,[64+esi] | 
 | 	lea	esi,[16+esi] | 
 | 	pxor	xmm4,xmm0 | 
 | 	movdqa	xmm0,[64+ebx] | 
 | 	pxor	xmm5,xmm1 | 
 | 	movdqa	xmm1,[80+ebx] | 
 | 	pxor	xmm6,xmm2 | 
 | 	movdqa	xmm2,[96+ebx] | 
 | 	pxor	xmm7,xmm3 | 
 | 	movdqa	xmm3,[112+ebx] | 
 | 	movdqu	[edi-128],xmm4 | 
 | 	movdqu	[edi-64],xmm5 | 
 | 	movdqu	[edi],xmm6 | 
 | 	movdqu	[64+edi],xmm7 | 
 | 	lea	edi,[16+edi] | 
 | 	paddd	xmm0,[64+ebp] | 
 | 	paddd	xmm1,[80+ebp] | 
 | 	paddd	xmm2,[96+ebp] | 
 | 	paddd	xmm3,[112+ebp] | 
 | 	movdqa	xmm6,xmm0 | 
 | 	punpckldq	xmm0,xmm1 | 
 | 	movdqa	xmm7,xmm2 | 
 | 	punpckldq	xmm2,xmm3 | 
 | 	punpckhdq	xmm6,xmm1 | 
 | 	punpckhdq	xmm7,xmm3 | 
 | 	movdqa	xmm1,xmm0 | 
 | 	punpcklqdq	xmm0,xmm2 | 
 | 	movdqa	xmm3,xmm6 | 
 | 	punpcklqdq	xmm6,xmm7 | 
 | 	punpckhqdq	xmm1,xmm2 | 
 | 	punpckhqdq	xmm3,xmm7 | 
 | 	movdqu	xmm4,[esi-128] | 
 | 	movdqu	xmm5,[esi-64] | 
 | 	movdqu	xmm2,[esi] | 
 | 	movdqu	xmm7,[64+esi] | 
 | 	lea	esi,[208+esi] | 
 | 	pxor	xmm4,xmm0 | 
 | 	pxor	xmm5,xmm1 | 
 | 	pxor	xmm6,xmm2 | 
 | 	pxor	xmm7,xmm3 | 
 | 	movdqu	[edi-128],xmm4 | 
 | 	movdqu	[edi-64],xmm5 | 
 | 	movdqu	[edi],xmm6 | 
 | 	movdqu	[64+edi],xmm7 | 
 | 	lea	edi,[208+edi] | 
 | 	sub	ecx,256 | 
 | 	jnc	NEAR L$007outer_loop | 
 | 	add	ecx,256 | 
 | 	jz	NEAR L$009done | 
 | 	mov	ebx,DWORD [520+esp] | 
 | 	lea	esi,[esi-128] | 
 | 	mov	edx,DWORD [516+esp] | 
 | 	lea	edi,[edi-128] | 
 | 	movd	xmm2,DWORD [64+ebp] | 
 | 	movdqu	xmm3,[ebx] | 
 | 	paddd	xmm2,[96+eax] | 
 | 	pand	xmm3,[112+eax] | 
 | 	por	xmm3,xmm2 | 
 | L$0061x: | 
 | 	movdqa	xmm0,[32+eax] | 
 | 	movdqu	xmm1,[edx] | 
 | 	movdqu	xmm2,[16+edx] | 
 | 	movdqa	xmm6,[eax] | 
 | 	movdqa	xmm7,[16+eax] | 
 | 	mov	DWORD [48+esp],ebp | 
 | 	movdqa	[esp],xmm0 | 
 | 	movdqa	[16+esp],xmm1 | 
 | 	movdqa	[32+esp],xmm2 | 
 | 	movdqa	[48+esp],xmm3 | 
 | 	mov	edx,10 | 
 | 	jmp	NEAR L$010loop1x | 
 | align	16 | 
 | L$011outer1x: | 
 | 	movdqa	xmm3,[80+eax] | 
 | 	movdqa	xmm0,[esp] | 
 | 	movdqa	xmm1,[16+esp] | 
 | 	movdqa	xmm2,[32+esp] | 
 | 	paddd	xmm3,[48+esp] | 
 | 	mov	edx,10 | 
 | 	movdqa	[48+esp],xmm3 | 
 | 	jmp	NEAR L$010loop1x | 
 | align	16 | 
 | L$010loop1x: | 
 | 	paddd	xmm0,xmm1 | 
 | 	pxor	xmm3,xmm0 | 
 | db	102,15,56,0,222 | 
 | 	paddd	xmm2,xmm3 | 
 | 	pxor	xmm1,xmm2 | 
 | 	movdqa	xmm4,xmm1 | 
 | 	psrld	xmm1,20 | 
 | 	pslld	xmm4,12 | 
 | 	por	xmm1,xmm4 | 
 | 	paddd	xmm0,xmm1 | 
 | 	pxor	xmm3,xmm0 | 
 | db	102,15,56,0,223 | 
 | 	paddd	xmm2,xmm3 | 
 | 	pxor	xmm1,xmm2 | 
 | 	movdqa	xmm4,xmm1 | 
 | 	psrld	xmm1,25 | 
 | 	pslld	xmm4,7 | 
 | 	por	xmm1,xmm4 | 
 | 	pshufd	xmm2,xmm2,78 | 
 | 	pshufd	xmm1,xmm1,57 | 
 | 	pshufd	xmm3,xmm3,147 | 
 | 	nop | 
 | 	paddd	xmm0,xmm1 | 
 | 	pxor	xmm3,xmm0 | 
 | db	102,15,56,0,222 | 
 | 	paddd	xmm2,xmm3 | 
 | 	pxor	xmm1,xmm2 | 
 | 	movdqa	xmm4,xmm1 | 
 | 	psrld	xmm1,20 | 
 | 	pslld	xmm4,12 | 
 | 	por	xmm1,xmm4 | 
 | 	paddd	xmm0,xmm1 | 
 | 	pxor	xmm3,xmm0 | 
 | db	102,15,56,0,223 | 
 | 	paddd	xmm2,xmm3 | 
 | 	pxor	xmm1,xmm2 | 
 | 	movdqa	xmm4,xmm1 | 
 | 	psrld	xmm1,25 | 
 | 	pslld	xmm4,7 | 
 | 	por	xmm1,xmm4 | 
 | 	pshufd	xmm2,xmm2,78 | 
 | 	pshufd	xmm1,xmm1,147 | 
 | 	pshufd	xmm3,xmm3,57 | 
 | 	dec	edx | 
 | 	jnz	NEAR L$010loop1x | 
 | 	paddd	xmm0,[esp] | 
 | 	paddd	xmm1,[16+esp] | 
 | 	paddd	xmm2,[32+esp] | 
 | 	paddd	xmm3,[48+esp] | 
 | 	cmp	ecx,64 | 
 | 	jb	NEAR L$012tail | 
 | 	movdqu	xmm4,[esi] | 
 | 	movdqu	xmm5,[16+esi] | 
 | 	pxor	xmm0,xmm4 | 
 | 	movdqu	xmm4,[32+esi] | 
 | 	pxor	xmm1,xmm5 | 
 | 	movdqu	xmm5,[48+esi] | 
 | 	pxor	xmm2,xmm4 | 
 | 	pxor	xmm3,xmm5 | 
 | 	lea	esi,[64+esi] | 
 | 	movdqu	[edi],xmm0 | 
 | 	movdqu	[16+edi],xmm1 | 
 | 	movdqu	[32+edi],xmm2 | 
 | 	movdqu	[48+edi],xmm3 | 
 | 	lea	edi,[64+edi] | 
 | 	sub	ecx,64 | 
 | 	jnz	NEAR L$011outer1x | 
 | 	jmp	NEAR L$009done | 
 | L$012tail: | 
 | 	movdqa	[esp],xmm0 | 
 | 	movdqa	[16+esp],xmm1 | 
 | 	movdqa	[32+esp],xmm2 | 
 | 	movdqa	[48+esp],xmm3 | 
 | 	xor	eax,eax | 
 | 	xor	edx,edx | 
 | 	xor	ebp,ebp | 
 | L$013tail_loop: | 
 | 	mov	al,BYTE [ebp*1+esp] | 
 | 	mov	dl,BYTE [ebp*1+esi] | 
 | 	lea	ebp,[1+ebp] | 
 | 	xor	al,dl | 
 | 	mov	BYTE [ebp*1+edi-1],al | 
 | 	dec	ecx | 
 | 	jnz	NEAR L$013tail_loop | 
 | L$009done: | 
 | 	mov	esp,DWORD [512+esp] | 
 | 	pop	edi | 
 | 	pop	esi | 
 | 	pop	ebx | 
 | 	pop	ebp | 
 | 	ret | 
 | align	64 | 
 | L$ssse3_data: | 
 | db	2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13 | 
 | db	3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14 | 
 | dd	1634760805,857760878,2036477234,1797285236 | 
 | dd	0,1,2,3 | 
 | dd	4,4,4,4 | 
 | dd	1,0,0,0 | 
 | dd	4,0,0,0 | 
 | dd	0,-1,-1,-1 | 
 | align	64 | 
 | db	67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54 | 
 | db	44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32 | 
 | db	60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111 | 
 | db	114,103,62,0 | 
 | %else | 
 | ; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 | 
 | ret | 
 | %endif |