





	.file	"bn-586.s"
.text
.globl	bn_mul_add_words
.type	bn_mul_add_words,@function
.align	16
bn_mul_add_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	xorl	%esi,		%esi
	movl	20(%esp),	%edi
	movl	28(%esp),	%ecx
	movl	24(%esp),	%ebx
	andl	$4294967288,	%ecx
	movl	32(%esp),	%ebp
	pushl	%ecx
	jz	.L000maw_finish
	call	.L001PIC_me_up
.L001PIC_me_up:
	popl	%eax
	addl	$_GLOBAL_OFFSET_TABLE_+[.-.L001PIC_me_up],%eax
	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
	btl	$26,		(%eax)
	jnc	.L002maw_loop
	movd	%ebp,		%mm0
	pxor	%mm1,		%mm1
.L003maw_sse2_loop:
	movd	(%edi),		%mm3
	paddq	%mm3,		%mm1
	movd	(%ebx),		%mm2
	pmuludq	%mm0,		%mm2
	movd	4(%ebx),	%mm4
	pmuludq	%mm0,		%mm4
	movd	8(%ebx),	%mm6
	pmuludq	%mm0,		%mm6
	movd	12(%ebx),	%mm7
	pmuludq	%mm0,		%mm7
	paddq	%mm2,		%mm1
	movd	4(%edi),	%mm3
	paddq	%mm4,		%mm3
	movd	8(%edi),	%mm5
	paddq	%mm6,		%mm5
	movd	12(%edi),	%mm4
	paddq	%mm4,		%mm7
	movd	%mm1,		(%edi)
	movd	16(%ebx),	%mm2
	pmuludq	%mm0,		%mm2
	psrlq	$32,		%mm1
	movd	20(%ebx),	%mm4
	pmuludq	%mm0,		%mm4
	paddq	%mm3,		%mm1
	movd	24(%ebx),	%mm6
	pmuludq	%mm0,		%mm6
	movd	%mm1,		4(%edi)
	psrlq	$32,		%mm1
	movd	28(%ebx),	%mm3
	addl	$32,		%ebx
	pmuludq	%mm0,		%mm3
	paddq	%mm5,		%mm1
	movd	16(%edi),	%mm5
	paddq	%mm5,		%mm2
	movd	%mm1,		8(%edi)
	psrlq	$32,		%mm1
	paddq	%mm7,		%mm1
	movd	20(%edi),	%mm5
	paddq	%mm5,		%mm4
	movd	%mm1,		12(%edi)
	psrlq	$32,		%mm1
	paddq	%mm2,		%mm1
	movd	24(%edi),	%mm5
	paddq	%mm5,		%mm6
	movd	%mm1,		16(%edi)
	psrlq	$32,		%mm1
	paddq	%mm4,		%mm1
	movd	28(%edi),	%mm5
	paddq	%mm5,		%mm3
	movd	%mm1,		20(%edi)
	psrlq	$32,		%mm1
	paddq	%mm6,		%mm1
	movd	%mm1,		24(%edi)
	psrlq	$32,		%mm1
	paddq	%mm3,		%mm1
	movd	%mm1,		28(%edi)
	addl	$32,		%edi
	psrlq	$32,		%mm1
	subl	$8,		%ecx
	jnz	.L003maw_sse2_loop
	movd	%mm1,		%esi
	emms
	jmp	.L000maw_finish
.L002maw_loop:
	movl	%ecx,		(%esp)

	movl	(%ebx),		%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	(%edi),		%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		(%edi)
	movl	%edx,		%esi

	movl	4(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	4(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		4(%edi)
	movl	%edx,		%esi

	movl	8(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	8(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		8(%edi)
	movl	%edx,		%esi

	movl	12(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	12(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		12(%edi)
	movl	%edx,		%esi

	movl	16(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	16(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		16(%edi)
	movl	%edx,		%esi

	movl	20(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	20(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		20(%edi)
	movl	%edx,		%esi

	movl	24(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	24(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		24(%edi)
	movl	%edx,		%esi

	movl	28(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	28(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		28(%edi)
	movl	%edx,		%esi

	movl	(%esp),		%ecx
	addl	$32,		%ebx
	addl	$32,		%edi
	subl	$8,		%ecx
	jnz	.L002maw_loop
.L000maw_finish:
	movl	32(%esp),	%ecx
	andl	$7,		%ecx
	jnz	.L004maw_finish2
	jmp	.L005maw_end
.align 16
.L004maw_finish2:

	movl	(%ebx),		%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	(%edi),		%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	4(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	4(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		4(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	8(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	8(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		8(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	12(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	12(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		12(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	16(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	16(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		16(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	20(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	20(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	decl	%ecx
	movl	%eax,		20(%edi)
	movl	%edx,		%esi
	jz	.L005maw_end

	movl	24(%ebx),	%eax
	mull	%ebp
	addl	%esi,		%eax
	movl	24(%edi),	%esi
	adcl	$0,		%edx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		24(%edi)
	movl	%edx,		%esi
.L005maw_end:
	movl	%esi,		%eax
	popl	%ecx
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_mul_add_words_end:
.size	bn_mul_add_words,.L_bn_mul_add_words_end-bn_mul_add_words
.ident	"bn_mul_add_words"
.text
.globl	bn_mul_words
.type	bn_mul_words,@function
.align	16
bn_mul_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	xorl	%esi,		%esi
	movl	20(%esp),	%edi
	movl	24(%esp),	%ebx
	movl	28(%esp),	%ebp
	movl	32(%esp),	%ecx
	andl	$4294967288,	%ebp
	jz	.L006mw_finish
.L007mw_loop:

	movl	(%ebx),		%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		(%edi)
	movl	%edx,		%esi

	movl	4(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		4(%edi)
	movl	%edx,		%esi

	movl	8(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		8(%edi)
	movl	%edx,		%esi

	movl	12(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		12(%edi)
	movl	%edx,		%esi

	movl	16(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		16(%edi)
	movl	%edx,		%esi

	movl	20(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		20(%edi)
	movl	%edx,		%esi

	movl	24(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		24(%edi)
	movl	%edx,		%esi

	movl	28(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		28(%edi)
	movl	%edx,		%esi

	addl	$32,		%ebx
	addl	$32,		%edi
	subl	$8,		%ebp
	jz	.L006mw_finish
	jmp	.L007mw_loop
.L006mw_finish:
	movl	28(%esp),	%ebp
	andl	$7,		%ebp
	jnz	.L008mw_finish2
	jmp	.L009mw_end
.align 16
.L008mw_finish2:

	movl	(%ebx),		%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	4(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		4(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	8(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		8(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	12(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		12(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	16(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		16(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	20(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		20(%edi)
	movl	%edx,		%esi
	decl	%ebp
	jz	.L009mw_end

	movl	24(%ebx),	%eax
	mull	%ecx
	addl	%esi,		%eax
	adcl	$0,		%edx
	movl	%eax,		24(%edi)
	movl	%edx,		%esi
.L009mw_end:
	movl	%esi,		%eax
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_mul_words_end:
.size	bn_mul_words,.L_bn_mul_words_end-bn_mul_words
.ident	"bn_mul_words"
.text
.globl	bn_sqr_words
.type	bn_sqr_words,@function
.align	16
bn_sqr_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	movl	20(%esp),	%esi
	movl	24(%esp),	%edi
	movl	28(%esp),	%ebx
	andl	$4294967288,	%ebx
	jz	.L010sw_finish
.L011sw_loop:

	movl	(%edi),		%eax
	mull	%eax
	movl	%eax,		(%esi)
	movl	%edx,		4(%esi)

	movl	4(%edi),	%eax
	mull	%eax
	movl	%eax,		8(%esi)
	movl	%edx,		12(%esi)

	movl	8(%edi),	%eax
	mull	%eax
	movl	%eax,		16(%esi)
	movl	%edx,		20(%esi)

	movl	12(%edi),	%eax
	mull	%eax
	movl	%eax,		24(%esi)
	movl	%edx,		28(%esi)

	movl	16(%edi),	%eax
	mull	%eax
	movl	%eax,		32(%esi)
	movl	%edx,		36(%esi)

	movl	20(%edi),	%eax
	mull	%eax
	movl	%eax,		40(%esi)
	movl	%edx,		44(%esi)

	movl	24(%edi),	%eax
	mull	%eax
	movl	%eax,		48(%esi)
	movl	%edx,		52(%esi)

	movl	28(%edi),	%eax
	mull	%eax
	movl	%eax,		56(%esi)
	movl	%edx,		60(%esi)

	addl	$32,		%edi
	addl	$64,		%esi
	subl	$8,		%ebx
	jnz	.L011sw_loop
.L010sw_finish:
	movl	28(%esp),	%ebx
	andl	$7,		%ebx
	jz	.L012sw_end

	movl	(%edi),		%eax
	mull	%eax
	movl	%eax,		(%esi)
	decl	%ebx
	movl	%edx,		4(%esi)
	jz	.L012sw_end

	movl	4(%edi),	%eax
	mull	%eax
	movl	%eax,		8(%esi)
	decl	%ebx
	movl	%edx,		12(%esi)
	jz	.L012sw_end

	movl	8(%edi),	%eax
	mull	%eax
	movl	%eax,		16(%esi)
	decl	%ebx
	movl	%edx,		20(%esi)
	jz	.L012sw_end

	movl	12(%edi),	%eax
	mull	%eax
	movl	%eax,		24(%esi)
	decl	%ebx
	movl	%edx,		28(%esi)
	jz	.L012sw_end

	movl	16(%edi),	%eax
	mull	%eax
	movl	%eax,		32(%esi)
	decl	%ebx
	movl	%edx,		36(%esi)
	jz	.L012sw_end

	movl	20(%edi),	%eax
	mull	%eax
	movl	%eax,		40(%esi)
	decl	%ebx
	movl	%edx,		44(%esi)
	jz	.L012sw_end

	movl	24(%edi),	%eax
	mull	%eax
	movl	%eax,		48(%esi)
	movl	%edx,		52(%esi)
.L012sw_end:
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_sqr_words_end:
.size	bn_sqr_words,.L_bn_sqr_words_end-bn_sqr_words
.ident	"bn_sqr_words"
.text
.globl	bn_div_words
.type	bn_div_words,@function
.align	16
bn_div_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi

	movl	20(%esp),	%edx
	movl	24(%esp),	%eax
	movl	28(%esp),	%ebx
	divl	%ebx
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_div_words_end:
.size	bn_div_words,.L_bn_div_words_end-bn_div_words
.ident	"bn_div_words"
.text
.globl	bn_add_words
.type	bn_add_words,@function
.align	16
bn_add_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	movl	20(%esp),	%ebx
	movl	24(%esp),	%esi
	movl	28(%esp),	%edi
	movl	32(%esp),	%ebp
	xorl	%eax,		%eax
	andl	$4294967288,	%ebp
	jz	.L013aw_finish
.L014aw_loop:

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)

	movl	4(%esi),	%ecx
	movl	4(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		4(%ebx)

	movl	8(%esi),	%ecx
	movl	8(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		8(%ebx)

	movl	12(%esi),	%ecx
	movl	12(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		12(%ebx)

	movl	16(%esi),	%ecx
	movl	16(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		16(%ebx)

	movl	20(%esi),	%ecx
	movl	20(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		20(%ebx)

	movl	24(%esi),	%ecx
	movl	24(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)

	movl	28(%esi),	%ecx
	movl	28(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		28(%ebx)

	addl	$32,		%esi
	addl	$32,		%edi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L014aw_loop
.L013aw_finish:
	movl	32(%esp),	%ebp
	andl	$7,		%ebp
	jz	.L015aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		(%ebx)
	jz	.L015aw_end

	movl	4(%esi),	%ecx
	movl	4(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		4(%ebx)
	jz	.L015aw_end

	movl	8(%esi),	%ecx
	movl	8(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		8(%ebx)
	jz	.L015aw_end

	movl	12(%esi),	%ecx
	movl	12(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		12(%ebx)
	jz	.L015aw_end

	movl	16(%esi),	%ecx
	movl	16(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		16(%ebx)
	jz	.L015aw_end

	movl	20(%esi),	%ecx
	movl	20(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		20(%ebx)
	jz	.L015aw_end

	movl	24(%esi),	%ecx
	movl	24(%edi),	%edx
	addl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	addl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)
.L015aw_end:
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_add_words_end:
.size	bn_add_words,.L_bn_add_words_end-bn_add_words
.ident	"bn_add_words"
.text
.globl	bn_sub_words
.type	bn_sub_words,@function
.align	16
bn_sub_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	movl	20(%esp),	%ebx
	movl	24(%esp),	%esi
	movl	28(%esp),	%edi
	movl	32(%esp),	%ebp
	xorl	%eax,		%eax
	andl	$4294967288,	%ebp
	jz	.L016aw_finish
.L017aw_loop:

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)

	movl	4(%esi),	%ecx
	movl	4(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		4(%ebx)

	movl	8(%esi),	%ecx
	movl	8(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		8(%ebx)

	movl	12(%esi),	%ecx
	movl	12(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		12(%ebx)

	movl	16(%esi),	%ecx
	movl	16(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		16(%ebx)

	movl	20(%esi),	%ecx
	movl	20(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		20(%ebx)

	movl	24(%esi),	%ecx
	movl	24(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)

	movl	28(%esi),	%ecx
	movl	28(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		28(%ebx)

	addl	$32,		%esi
	addl	$32,		%edi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L017aw_loop
.L016aw_finish:
	movl	32(%esp),	%ebp
	andl	$7,		%ebp
	jz	.L018aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		(%ebx)
	jz	.L018aw_end

	movl	4(%esi),	%ecx
	movl	4(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		4(%ebx)
	jz	.L018aw_end

	movl	8(%esi),	%ecx
	movl	8(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		8(%ebx)
	jz	.L018aw_end

	movl	12(%esi),	%ecx
	movl	12(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		12(%ebx)
	jz	.L018aw_end

	movl	16(%esi),	%ecx
	movl	16(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		16(%ebx)
	jz	.L018aw_end

	movl	20(%esi),	%ecx
	movl	20(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		20(%ebx)
	jz	.L018aw_end

	movl	24(%esi),	%ecx
	movl	24(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)
.L018aw_end:
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_sub_words_end:
.size	bn_sub_words,.L_bn_sub_words_end-bn_sub_words
.ident	"bn_sub_words"
.text
.globl	bn_sub_part_words
.type	bn_sub_part_words,@function
.align	16
bn_sub_part_words:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi


	movl	20(%esp),	%ebx
	movl	24(%esp),	%esi
	movl	28(%esp),	%edi
	movl	32(%esp),	%ebp
	xorl	%eax,		%eax
	andl	$4294967288,	%ebp
	jz	.L019aw_finish
.L020aw_loop:

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)

	movl	4(%esi),	%ecx
	movl	4(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		4(%ebx)

	movl	8(%esi),	%ecx
	movl	8(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		8(%ebx)

	movl	12(%esi),	%ecx
	movl	12(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		12(%ebx)

	movl	16(%esi),	%ecx
	movl	16(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		16(%ebx)

	movl	20(%esi),	%ecx
	movl	20(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		20(%ebx)

	movl	24(%esi),	%ecx
	movl	24(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)

	movl	28(%esi),	%ecx
	movl	28(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		28(%ebx)

	addl	$32,		%esi
	addl	$32,		%edi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L020aw_loop
.L019aw_finish:
	movl	32(%esp),	%ebp
	andl	$7,		%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
	decl	%ebp
	jz	.L021aw_end

	movl	(%esi),		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)
	addl	$4,		%esi
	addl	$4,		%edi
	addl	$4,		%ebx
.L021aw_end:
	cmpl	$0,		36(%esp)
	je	.L022pw_end
	movl	36(%esp),	%ebp
	cmpl	$0,		%ebp
	je	.L022pw_end
	jge	.L023pw_pos

	movl	$0,		%edx
	subl	%ebp,		%edx
	movl	%edx,		%ebp
	andl	$4294967288,	%ebp
	jz	.L024pw_neg_finish
.L025pw_neg_loop:

	movl	$0,		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		(%ebx)

	movl	$0,		%ecx
	movl	4(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		4(%ebx)

	movl	$0,		%ecx
	movl	8(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		8(%ebx)

	movl	$0,		%ecx
	movl	12(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		12(%ebx)

	movl	$0,		%ecx
	movl	16(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		16(%ebx)

	movl	$0,		%ecx
	movl	20(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		20(%ebx)

	movl	$0,		%ecx
	movl	24(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)

	movl	$0,		%ecx
	movl	28(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		28(%ebx)

	addl	$32,		%edi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L025pw_neg_loop
.L024pw_neg_finish:
	movl	36(%esp),	%edx
	movl	$0,		%ebp
	subl	%edx,		%ebp
	andl	$7,		%ebp
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	(%edi),		%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	4(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		4(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	8(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		8(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	12(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		12(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	16(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		16(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	20(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	decl	%ebp
	movl	%ecx,		20(%ebx)
	jz	.L022pw_end

	movl	$0,		%ecx
	movl	24(%edi),	%edx
	subl	%eax,		%ecx
	movl	$0,		%eax
	adcl	%eax,		%eax
	subl	%edx,		%ecx
	adcl	$0,		%eax
	movl	%ecx,		24(%ebx)
	jmp	.L022pw_end
.L023pw_pos:
	andl	$4294967288,	%ebp
	jz	.L026pw_pos_finish
.L027pw_pos_loop:

	movl	(%esi),		%ecx
	subl	%eax,		%ecx
	movl	%ecx,		(%ebx)
	jnc	.L028pw_nc0

	movl	4(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		4(%ebx)
	jnc	.L029pw_nc1

	movl	8(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		8(%ebx)
	jnc	.L030pw_nc2

	movl	12(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		12(%ebx)
	jnc	.L031pw_nc3

	movl	16(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		16(%ebx)
	jnc	.L032pw_nc4

	movl	20(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		20(%ebx)
	jnc	.L033pw_nc5

	movl	24(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		24(%ebx)
	jnc	.L034pw_nc6

	movl	28(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		28(%ebx)
	jnc	.L035pw_nc7

	addl	$32,		%esi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L027pw_pos_loop
.L026pw_pos_finish:
	movl	36(%esp),	%ebp
	andl	$7,		%ebp
	jz	.L022pw_end

	movl	(%esi),		%ecx
	subl	%eax,		%ecx
	movl	%ecx,		(%ebx)
	jnc	.L036pw_tail_nc0
	decl	%ebp
	jz	.L022pw_end

	movl	4(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		4(%ebx)
	jnc	.L037pw_tail_nc1
	decl	%ebp
	jz	.L022pw_end

	movl	8(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		8(%ebx)
	jnc	.L038pw_tail_nc2
	decl	%ebp
	jz	.L022pw_end

	movl	12(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		12(%ebx)
	jnc	.L039pw_tail_nc3
	decl	%ebp
	jz	.L022pw_end

	movl	16(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		16(%ebx)
	jnc	.L040pw_tail_nc4
	decl	%ebp
	jz	.L022pw_end

	movl	20(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		20(%ebx)
	jnc	.L041pw_tail_nc5
	decl	%ebp
	jz	.L022pw_end

	movl	24(%esi),	%ecx
	subl	%eax,		%ecx
	movl	%ecx,		24(%ebx)
	jnc	.L042pw_tail_nc6
	movl	$1,		%eax
	jmp	.L022pw_end
.L043pw_nc_loop:
	movl	(%esi),		%ecx
	movl	%ecx,		(%ebx)
.L028pw_nc0:
	movl	4(%esi),	%ecx
	movl	%ecx,		4(%ebx)
.L029pw_nc1:
	movl	8(%esi),	%ecx
	movl	%ecx,		8(%ebx)
.L030pw_nc2:
	movl	12(%esi),	%ecx
	movl	%ecx,		12(%ebx)
.L031pw_nc3:
	movl	16(%esi),	%ecx
	movl	%ecx,		16(%ebx)
.L032pw_nc4:
	movl	20(%esi),	%ecx
	movl	%ecx,		20(%ebx)
.L033pw_nc5:
	movl	24(%esi),	%ecx
	movl	%ecx,		24(%ebx)
.L034pw_nc6:
	movl	28(%esi),	%ecx
	movl	%ecx,		28(%ebx)
.L035pw_nc7:

	addl	$32,		%esi
	addl	$32,		%ebx
	subl	$8,		%ebp
	jnz	.L043pw_nc_loop
	movl	36(%esp),	%ebp
	andl	$7,		%ebp
	jz	.L044pw_nc_end
	movl	(%esi),		%ecx
	movl	%ecx,		(%ebx)
.L036pw_tail_nc0:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	4(%esi),	%ecx
	movl	%ecx,		4(%ebx)
.L037pw_tail_nc1:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	8(%esi),	%ecx
	movl	%ecx,		8(%ebx)
.L038pw_tail_nc2:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	12(%esi),	%ecx
	movl	%ecx,		12(%ebx)
.L039pw_tail_nc3:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	16(%esi),	%ecx
	movl	%ecx,		16(%ebx)
.L040pw_tail_nc4:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	20(%esi),	%ecx
	movl	%ecx,		20(%ebx)
.L041pw_tail_nc5:
	decl	%ebp
	jz	.L044pw_nc_end
	movl	24(%esi),	%ecx
	movl	%ecx,		24(%ebx)
.L042pw_tail_nc6:
.L044pw_nc_end:
	movl	$0,		%eax
.L022pw_end:
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.L_bn_sub_part_words_end:
.size	bn_sub_part_words,.L_bn_sub_part_words_end-bn_sub_part_words
.ident	"bn_sub_part_words"

.section	.bss
.comm	OPENSSL_ia32cap_P,4,4
