	.file	"bn_mulw.c"
	.version	"01.01"
gcc2_compiled.:
.text
	.align 16
.globl bn_mul_add_word
	.type	 bn_mul_add_word,@function
bn_mul_add_word:
	pushl %ebp
	pushl %edi
	pushl %esi
	pushl %ebx

	# ax		L(t)
	# dx		H(t)
	# bx		a
	# cx		w
	# di		r
	# si		c
	# bp		num
	xorl %esi,%esi		# c=0
	movl 20(%esp),%edi	# r => edi
	movl 24(%esp),%ebx	# a => exb
	movl 32(%esp),%ecx	# w => ecx
	movl 28(%esp),%ebp	# num => ebp

	shrl $2,%ebp		# num/4
	je .L910

	.align 4
.L110:
	# Round 1
	movl %ecx,%eax		# w => eax
	mull (%ebx)		# w * *a 
	addl (%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+= carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)

	# Round 2
	movl %ecx,%eax		# w => eax
	mull 4(%ebx)		# w * *a 
	addl 4(%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+= carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,4(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)

	# Round 3
	movl %ecx,%eax		# w => eax
	mull 8(%ebx)		# w * *a 
	addl 8(%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+=carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,8(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)

	# Round 4
	movl %ecx,%eax		# w => eax
	mull 12(%ebx)		# w * *a 
	addl 12(%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+=carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,12(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)

	addl $16,%ebx		# a+=4 (4 words)
	addl $16,%edi		# r+=4 (4 words)

	decl %ebp		# --num
	je .L910
	jmp .L110
	.align 4
.L910:
	movl 28(%esp),%ebp	# num => ebp
	andl $3,%ebp
	je .L111

	# Round 1
	movl %ecx,%eax		# w => eax
	mull (%ebx)		# w * *a 
	addl (%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+=carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L111

	# Round 2
	movl %ecx,%eax		# w => eax
	mull 4(%ebx)		# w * *a 
	addl 4(%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+=carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,4(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L111

	# Round 3
	movl %ecx,%eax		# w => eax
	mull 8(%ebx)		# w * *a 
	addl 8(%edi),%eax	# *r+=L(t)
	adcl $0,%edx		# H(t)+=carry
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,8(%edi)	# *r+=L(t)
	movl %edx,%esi		# c=H(t)

	.align 4
.L111:
	movl %esi,%eax		# return(c)
	popl %ebx
	popl %esi
	popl %edi
	popl %ebp
	ret
.Lfe1:
	.size	 bn_mul_add_word,.Lfe1-bn_mul_add_word
	.align 16
.globl bn_mul_word
	.type	 bn_mul_word,@function
bn_mul_word:
	pushl %ebp
	pushl %edi
	pushl %esi
	pushl %ebx

	# ax		L(t)
	# dx		H(t)
	# bx		a
	# cx		w
	# di		r
	# num		bp
	# si		c
	xorl %esi,%esi		# c=0
	movl 20(%esp),%edi	# r => edi
	movl 24(%esp),%ebx	# a => exb
	movl 28(%esp),%ebp	# num => bp
	movl 32(%esp),%ecx	# w => ecx

	.align 4
.L210:
	movl %ecx,%eax		# w => eax
	mull (%ebx)		# w * *a 
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,(%edi)	# *r=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L211

	movl %ecx,%eax		# w => eax
	mull 4(%ebx)		# w * *a 
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,4(%edi)	# *r=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L211

	movl %ecx,%eax		# w => eax
	mull 8(%ebx)		# w * *a 
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,8(%edi)	# *r=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L211

	movl %ecx,%eax		# w => eax
	mull 12(%ebx)		# w * *a 
	addl %esi,%eax		# L(t)+=c
	adcl $0,%edx		# H(t)+=carry
	movl %eax,12(%edi)	# *r=L(t)
	movl %edx,%esi		# c=H(t)
	decl %ebp		# --num
	je .L211

	addl $16,%ebx		# a+=4 (4 words)
	addl $16,%edi		# r+=4 (4 words)

	jmp .L210
	.align 16
.L211:
	movl %esi,%eax		# return(c)
	popl %ebx
	popl %esi
	popl %edi
	popl %ebp
	ret
.Lfe2:
	.size	 bn_mul_word,.Lfe2-bn_mul_word

	.align 16
.globl bn_sqr_words
	.type	 bn_sqr_words,@function
bn_sqr_words:
	pushl %edi
	pushl %esi
	pushl %ebx
	movl 16(%esp),%esi	# r
	movl 20(%esp),%edi	# a
	movl 24(%esp),%ebx	# n
	.align 4
	shrl $2,%ebx
	jz .L99
.L28:
	movl (%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,(%esi)	# put low into return addr
	movl %edx,4(%esi)	# put high into return addr

	movl 4(%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,8(%esi)	# put low into return addr
	movl %edx,12(%esi)	# put high into return addr

	movl 8(%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,16(%esi)	# put low into return addr
	movl %edx,20(%esi)	# put high into return addr

	movl 12(%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,24(%esi)	# put low into return addr
	movl %edx,28(%esi)	# put high into return addr

	addl $16,%edi
	addl $32,%esi
	decl %ebx		# n-=4;
	jz .L99
	jmp .L28
	.align 16
.L99:
	movl 24(%esp),%ebx	# n
	andl $3,%ebx
	jz .L29
	movl (%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,(%esi)	# put low into return addr
	movl %edx,4(%esi)	# put high into return addr
	decl %ebx		# n--;
	jz .L29
	movl 4(%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,8(%esi)	# put low into return addr
	movl %edx,12(%esi)	# put high into return addr
	decl %ebx		# n--;
	jz .L29
	movl 8(%edi),%eax	# get a
	mull %eax		# a*a
	movl %eax,16(%esi)	# put low into return addr
	movl %edx,20(%esi)	# put high into return addr

.L29:
	popl %ebx
	popl %esi
	popl %edi
	ret
.Lfe3:
	.size	 bn_sqr_words,.Lfe3-bn_sqr_words

	.align 16
.globl bn_div64
	.type	 bn_div64,@function
bn_div64:
	movl 4(%esp),%edx	# a
	movl 8(%esp),%eax	# b
	divl 12(%esp)		# ab/c
	ret
.Lfe4:
	.size	 bn_div64,.Lfe4-bn_div64
	.ident	"GCC: (GNU) 2.6.3"
