/* Run the C pre-processor over this file with one of the following defined
 * ELF - elf object files,
 * OUT - a.out object files,
 * BSDI - BSDI style a.out object files
 * SOL - Solaris style elf
 */

#define TYPE(a,b)       .type   a,b
#define SIZE(a,b)       .size   a,b

#if defined(OUT) || defined(BSDI)
#define bn_mul_comba8 _bn_mul_comba8
#define bn_mul_comba4 _bn_mul_comba4
#define bn_sqr_comba8 _bn_sqr_comba8
#define bn_sqr_comba4 _bn_sqr_comba4

#endif

#ifdef OUT
#define OK	1
#define ALIGN	4
#endif

#ifdef BSDI
#define OK              1
#define ALIGN           4
#undef SIZE
#undef TYPE
#define SIZE(a,b)
#define TYPE(a,b)
#endif

#if defined(ELF) || defined(SOL)
#define OK              1
#define ALIGN           16
#endif

#ifndef OK
You need to define one of
ELF - elf systems - linux-elf, NetBSD and DG-UX
OUT - a.out systems - linux-a.out and FreeBSD
SOL - solaris systems, which are elf with strange comment lines
BSDI - a.out with a very primative version of as.
#endif

/* Let the Assembler begin :-) */
	/* Don't even think of reading this code */
	/* It was automatically generated by bn-586.pl */
	/* Which is a perl program used to generate the x86 assember for */
	/* any of elf, a.out, BSDI,Win32, or Solaris */
	/* eric <eay@cryptsoft.com> */

	.file	"bn-586.s"
	.version	"01.01"
gcc2_compiled.:
.text
	.align ALIGN
.globl bn_mul_comba8
	TYPE(bn_mul_comba8,@function)
bn_mul_comba8:
	pushl	%esi
	movl	12(%esp),	%esi
	pushl	%edi
	movl	20(%esp),	%edi
	pushl	%ebp
	pushl	%ebx
	xorl	%ebx,		%ebx
	movl	(%esi),		%eax
	xorl	%ecx,		%ecx
	movl	(%edi),		%edx
	/* ################## Calculate word 0 */
	xorl	%ebp,		%ebp
	/* mul a[0]*b[0] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	(%edi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		(%eax)
	movl	4(%esi),	%eax
	/* saved r[0] */
	/* ################## Calculate word 1 */
	xorl	%ebx,		%ebx
	/* mul a[1]*b[0] */
	mull	%edx
	addl	%eax,		%ecx
	movl	(%esi),		%eax
	adcl	%edx,		%ebp
	movl	4(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[0]*b[1] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	(%edi),		%edx
	adcl	$0,		%ebx
	movl	%ecx,		4(%eax)
	movl	8(%esi),	%eax
	/* saved r[1] */
	/* ################## Calculate word 2 */
	xorl	%ecx,		%ecx
	/* mul a[2]*b[0] */
	mull	%edx
	addl	%eax,		%ebp
	movl	4(%esi),	%eax
	adcl	%edx,		%ebx
	movl	4(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[1]*b[1] */
	mull	%edx
	addl	%eax,		%ebp
	movl	(%esi),		%eax
	adcl	%edx,		%ebx
	movl	8(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[0]*b[2] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	(%edi),		%edx
	adcl	$0,		%ecx
	movl	%ebp,		8(%eax)
	movl	12(%esi),	%eax
	/* saved r[2] */
	/* ################## Calculate word 3 */
	xorl	%ebp,		%ebp
	/* mul a[3]*b[0] */
	mull	%edx
	addl	%eax,		%ebx
	movl	8(%esi),	%eax
	adcl	%edx,		%ecx
	movl	4(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[2]*b[1] */
	mull	%edx
	addl	%eax,		%ebx
	movl	4(%esi),	%eax
	adcl	%edx,		%ecx
	movl	8(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[1]*b[2] */
	mull	%edx
	addl	%eax,		%ebx
	movl	(%esi),		%eax
	adcl	%edx,		%ecx
	movl	12(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[0]*b[3] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	(%edi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		12(%eax)
	movl	16(%esi),	%eax
	/* saved r[3] */
	/* ################## Calculate word 4 */
	xorl	%ebx,		%ebx
	/* mul a[4]*b[0] */
	mull	%edx
	addl	%eax,		%ecx
	movl	12(%esi),	%eax
	adcl	%edx,		%ebp
	movl	4(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[3]*b[1] */
	mull	%edx
	addl	%eax,		%ecx
	movl	8(%esi),	%eax
	adcl	%edx,		%ebp
	movl	8(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[2]*b[2] */
	mull	%edx
	addl	%eax,		%ecx
	movl	4(%esi),	%eax
	adcl	%edx,		%ebp
	movl	12(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[1]*b[3] */
	mull	%edx
	addl	%eax,		%ecx
	movl	(%esi),		%eax
	adcl	%edx,		%ebp
	movl	16(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[0]*b[4] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	(%edi),		%edx
	adcl	$0,		%ebx
	movl	%ecx,		16(%eax)
	movl	20(%esi),	%eax
	/* saved r[4] */
	/* ################## Calculate word 5 */
	xorl	%ecx,		%ecx
	/* mul a[5]*b[0] */
	mull	%edx
	addl	%eax,		%ebp
	movl	16(%esi),	%eax
	adcl	%edx,		%ebx
	movl	4(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[4]*b[1] */
	mull	%edx
	addl	%eax,		%ebp
	movl	12(%esi),	%eax
	adcl	%edx,		%ebx
	movl	8(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[3]*b[2] */
	mull	%edx
	addl	%eax,		%ebp
	movl	8(%esi),	%eax
	adcl	%edx,		%ebx
	movl	12(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[2]*b[3] */
	mull	%edx
	addl	%eax,		%ebp
	movl	4(%esi),	%eax
	adcl	%edx,		%ebx
	movl	16(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[1]*b[4] */
	mull	%edx
	addl	%eax,		%ebp
	movl	(%esi),		%eax
	adcl	%edx,		%ebx
	movl	20(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[0]*b[5] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	(%edi),		%edx
	adcl	$0,		%ecx
	movl	%ebp,		20(%eax)
	movl	24(%esi),	%eax
	/* saved r[5] */
	/* ################## Calculate word 6 */
	xorl	%ebp,		%ebp
	/* mul a[6]*b[0] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esi),	%eax
	adcl	%edx,		%ecx
	movl	4(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[5]*b[1] */
	mull	%edx
	addl	%eax,		%ebx
	movl	16(%esi),	%eax
	adcl	%edx,		%ecx
	movl	8(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[4]*b[2] */
	mull	%edx
	addl	%eax,		%ebx
	movl	12(%esi),	%eax
	adcl	%edx,		%ecx
	movl	12(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[3]*b[3] */
	mull	%edx
	addl	%eax,		%ebx
	movl	8(%esi),	%eax
	adcl	%edx,		%ecx
	movl	16(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[2]*b[4] */
	mull	%edx
	addl	%eax,		%ebx
	movl	4(%esi),	%eax
	adcl	%edx,		%ecx
	movl	20(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[1]*b[5] */
	mull	%edx
	addl	%eax,		%ebx
	movl	(%esi),		%eax
	adcl	%edx,		%ecx
	movl	24(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[0]*b[6] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	(%edi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		24(%eax)
	movl	28(%esi),	%eax
	/* saved r[6] */
	/* ################## Calculate word 7 */
	xorl	%ebx,		%ebx
	/* mul a[7]*b[0] */
	mull	%edx
	addl	%eax,		%ecx
	movl	24(%esi),	%eax
	adcl	%edx,		%ebp
	movl	4(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[6]*b[1] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esi),	%eax
	adcl	%edx,		%ebp
	movl	8(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[5]*b[2] */
	mull	%edx
	addl	%eax,		%ecx
	movl	16(%esi),	%eax
	adcl	%edx,		%ebp
	movl	12(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[4]*b[3] */
	mull	%edx
	addl	%eax,		%ecx
	movl	12(%esi),	%eax
	adcl	%edx,		%ebp
	movl	16(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[3]*b[4] */
	mull	%edx
	addl	%eax,		%ecx
	movl	8(%esi),	%eax
	adcl	%edx,		%ebp
	movl	20(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[2]*b[5] */
	mull	%edx
	addl	%eax,		%ecx
	movl	4(%esi),	%eax
	adcl	%edx,		%ebp
	movl	24(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[1]*b[6] */
	mull	%edx
	addl	%eax,		%ecx
	movl	(%esi),		%eax
	adcl	%edx,		%ebp
	movl	28(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[0]*b[7] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	4(%edi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		28(%eax)
	movl	28(%esi),	%eax
	/* saved r[7] */
	/* ################## Calculate word 8 */
	xorl	%ecx,		%ecx
	/* mul a[7]*b[1] */
	mull	%edx
	addl	%eax,		%ebp
	movl	24(%esi),	%eax
	adcl	%edx,		%ebx
	movl	8(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[6]*b[2] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esi),	%eax
	adcl	%edx,		%ebx
	movl	12(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[5]*b[3] */
	mull	%edx
	addl	%eax,		%ebp
	movl	16(%esi),	%eax
	adcl	%edx,		%ebx
	movl	16(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[4]*b[4] */
	mull	%edx
	addl	%eax,		%ebp
	movl	12(%esi),	%eax
	adcl	%edx,		%ebx
	movl	20(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[3]*b[5] */
	mull	%edx
	addl	%eax,		%ebp
	movl	8(%esi),	%eax
	adcl	%edx,		%ebx
	movl	24(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[2]*b[6] */
	mull	%edx
	addl	%eax,		%ebp
	movl	4(%esi),	%eax
	adcl	%edx,		%ebx
	movl	28(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[1]*b[7] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	8(%edi),	%edx
	adcl	$0,		%ecx
	movl	%ebp,		32(%eax)
	movl	28(%esi),	%eax
	/* saved r[8] */
	/* ################## Calculate word 9 */
	xorl	%ebp,		%ebp
	/* mul a[7]*b[2] */
	mull	%edx
	addl	%eax,		%ebx
	movl	24(%esi),	%eax
	adcl	%edx,		%ecx
	movl	12(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[6]*b[3] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esi),	%eax
	adcl	%edx,		%ecx
	movl	16(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[5]*b[4] */
	mull	%edx
	addl	%eax,		%ebx
	movl	16(%esi),	%eax
	adcl	%edx,		%ecx
	movl	20(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[4]*b[5] */
	mull	%edx
	addl	%eax,		%ebx
	movl	12(%esi),	%eax
	adcl	%edx,		%ecx
	movl	24(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[3]*b[6] */
	mull	%edx
	addl	%eax,		%ebx
	movl	8(%esi),	%eax
	adcl	%edx,		%ecx
	movl	28(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[2]*b[7] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	12(%edi),	%edx
	adcl	$0,		%ebp
	movl	%ebx,		36(%eax)
	movl	28(%esi),	%eax
	/* saved r[9] */
	/* ################## Calculate word 10 */
	xorl	%ebx,		%ebx
	/* mul a[7]*b[3] */
	mull	%edx
	addl	%eax,		%ecx
	movl	24(%esi),	%eax
	adcl	%edx,		%ebp
	movl	16(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[6]*b[4] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esi),	%eax
	adcl	%edx,		%ebp
	movl	20(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[5]*b[5] */
	mull	%edx
	addl	%eax,		%ecx
	movl	16(%esi),	%eax
	adcl	%edx,		%ebp
	movl	24(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[4]*b[6] */
	mull	%edx
	addl	%eax,		%ecx
	movl	12(%esi),	%eax
	adcl	%edx,		%ebp
	movl	28(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[3]*b[7] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	16(%edi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		40(%eax)
	movl	28(%esi),	%eax
	/* saved r[10] */
	/* ################## Calculate word 11 */
	xorl	%ecx,		%ecx
	/* mul a[7]*b[4] */
	mull	%edx
	addl	%eax,		%ebp
	movl	24(%esi),	%eax
	adcl	%edx,		%ebx
	movl	20(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[6]*b[5] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esi),	%eax
	adcl	%edx,		%ebx
	movl	24(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[5]*b[6] */
	mull	%edx
	addl	%eax,		%ebp
	movl	16(%esi),	%eax
	adcl	%edx,		%ebx
	movl	28(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[4]*b[7] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	20(%edi),	%edx
	adcl	$0,		%ecx
	movl	%ebp,		44(%eax)
	movl	28(%esi),	%eax
	/* saved r[11] */
	/* ################## Calculate word 12 */
	xorl	%ebp,		%ebp
	/* mul a[7]*b[5] */
	mull	%edx
	addl	%eax,		%ebx
	movl	24(%esi),	%eax
	adcl	%edx,		%ecx
	movl	24(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[6]*b[6] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esi),	%eax
	adcl	%edx,		%ecx
	movl	28(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[5]*b[7] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	24(%edi),	%edx
	adcl	$0,		%ebp
	movl	%ebx,		48(%eax)
	movl	28(%esi),	%eax
	/* saved r[12] */
	/* ################## Calculate word 13 */
	xorl	%ebx,		%ebx
	/* mul a[7]*b[6] */
	mull	%edx
	addl	%eax,		%ecx
	movl	24(%esi),	%eax
	adcl	%edx,		%ebp
	movl	28(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[6]*b[7] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	28(%edi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		52(%eax)
	movl	28(%esi),	%eax
	/* saved r[13] */
	/* ################## Calculate word 14 */
	xorl	%ecx,		%ecx
	/* mul a[7]*b[7] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	adcl	$0,		%ecx
	movl	%ebp,		56(%eax)
	/* saved r[14] */
	/* save r[15] */
	movl	%ebx,		60(%eax)
	popl	%ebx
	popl	%ebp
	popl	%edi
	popl	%esi
	ret
.bn_mul_comba8_end:
	SIZE(bn_mul_comba8,.bn_mul_comba8_end-bn_mul_comba8)
.ident	"desasm.pl"
.text
	.align ALIGN
.globl bn_mul_comba4
	TYPE(bn_mul_comba4,@function)
bn_mul_comba4:
	pushl	%esi
	movl	12(%esp),	%esi
	pushl	%edi
	movl	20(%esp),	%edi
	pushl	%ebp
	pushl	%ebx
	xorl	%ebx,		%ebx
	movl	(%esi),		%eax
	xorl	%ecx,		%ecx
	movl	(%edi),		%edx
	/* ################## Calculate word 0 */
	xorl	%ebp,		%ebp
	/* mul a[0]*b[0] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	(%edi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		(%eax)
	movl	4(%esi),	%eax
	/* saved r[0] */
	/* ################## Calculate word 1 */
	xorl	%ebx,		%ebx
	/* mul a[1]*b[0] */
	mull	%edx
	addl	%eax,		%ecx
	movl	(%esi),		%eax
	adcl	%edx,		%ebp
	movl	4(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[0]*b[1] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	(%edi),		%edx
	adcl	$0,		%ebx
	movl	%ecx,		4(%eax)
	movl	8(%esi),	%eax
	/* saved r[1] */
	/* ################## Calculate word 2 */
	xorl	%ecx,		%ecx
	/* mul a[2]*b[0] */
	mull	%edx
	addl	%eax,		%ebp
	movl	4(%esi),	%eax
	adcl	%edx,		%ebx
	movl	4(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[1]*b[1] */
	mull	%edx
	addl	%eax,		%ebp
	movl	(%esi),		%eax
	adcl	%edx,		%ebx
	movl	8(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[0]*b[2] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	(%edi),		%edx
	adcl	$0,		%ecx
	movl	%ebp,		8(%eax)
	movl	12(%esi),	%eax
	/* saved r[2] */
	/* ################## Calculate word 3 */
	xorl	%ebp,		%ebp
	/* mul a[3]*b[0] */
	mull	%edx
	addl	%eax,		%ebx
	movl	8(%esi),	%eax
	adcl	%edx,		%ecx
	movl	4(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[2]*b[1] */
	mull	%edx
	addl	%eax,		%ebx
	movl	4(%esi),	%eax
	adcl	%edx,		%ecx
	movl	8(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[1]*b[2] */
	mull	%edx
	addl	%eax,		%ebx
	movl	(%esi),		%eax
	adcl	%edx,		%ecx
	movl	12(%edi),	%edx
	adcl	$0,		%ebp
	/* mul a[0]*b[3] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	movl	4(%edi),	%edx
	adcl	$0,		%ebp
	movl	%ebx,		12(%eax)
	movl	12(%esi),	%eax
	/* saved r[3] */
	/* ################## Calculate word 4 */
	xorl	%ebx,		%ebx
	/* mul a[3]*b[1] */
	mull	%edx
	addl	%eax,		%ecx
	movl	8(%esi),	%eax
	adcl	%edx,		%ebp
	movl	8(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[2]*b[2] */
	mull	%edx
	addl	%eax,		%ecx
	movl	4(%esi),	%eax
	adcl	%edx,		%ebp
	movl	12(%edi),	%edx
	adcl	$0,		%ebx
	/* mul a[1]*b[3] */
	mull	%edx
	addl	%eax,		%ecx
	movl	20(%esp),	%eax
	adcl	%edx,		%ebp
	movl	8(%edi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		16(%eax)
	movl	12(%esi),	%eax
	/* saved r[4] */
	/* ################## Calculate word 5 */
	xorl	%ecx,		%ecx
	/* mul a[3]*b[2] */
	mull	%edx
	addl	%eax,		%ebp
	movl	8(%esi),	%eax
	adcl	%edx,		%ebx
	movl	12(%edi),	%edx
	adcl	$0,		%ecx
	/* mul a[2]*b[3] */
	mull	%edx
	addl	%eax,		%ebp
	movl	20(%esp),	%eax
	adcl	%edx,		%ebx
	movl	12(%edi),	%edx
	adcl	$0,		%ecx
	movl	%ebp,		20(%eax)
	movl	12(%esi),	%eax
	/* saved r[5] */
	/* ################## Calculate word 6 */
	xorl	%ebp,		%ebp
	/* mul a[3]*b[3] */
	mull	%edx
	addl	%eax,		%ebx
	movl	20(%esp),	%eax
	adcl	%edx,		%ecx
	adcl	$0,		%ebp
	movl	%ebx,		24(%eax)
	/* saved r[6] */
	/* save r[7] */
	movl	%ecx,		28(%eax)
	popl	%ebx
	popl	%ebp
	popl	%edi
	popl	%esi
	ret
.bn_mul_comba4_end:
	SIZE(bn_mul_comba4,.bn_mul_comba4_end-bn_mul_comba4)
.ident	"desasm.pl"
.text
	.align ALIGN
.globl bn_sqr_comba8
	TYPE(bn_sqr_comba8,@function)
bn_sqr_comba8:
	pushl	%esi
	pushl	%edi
	pushl	%ebp
	pushl	%ebx
	movl	20(%esp),	%edi
	movl	24(%esp),	%esi
	xorl	%ebx,		%ebx
	xorl	%ecx,		%ecx
	movl	(%esi),		%eax
	/* ############### Calculate word 0 */
	xorl	%ebp,		%ebp
	/* sqr a[0]*a[0] */
	mull	%eax
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	(%esi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		(%edi)
	movl	4(%esi),	%eax
	/* saved r[0] */
	/* ############### Calculate word 1 */
	xorl	%ebx,		%ebx
	/* sqr a[1]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	8(%esi),	%eax
	adcl	$0,		%ebx
	movl	%ecx,		4(%edi)
	movl	(%esi),		%edx
	/* saved r[1] */
	/* ############### Calculate word 2 */
	xorl	%ecx,		%ecx
	/* sqr a[2]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	4(%esi),	%eax
	adcl	$0,		%ecx
	/* sqr a[1]*a[1] */
	mull	%eax
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	(%esi),		%edx
	adcl	$0,		%ecx
	movl	%ebp,		8(%edi)
	movl	12(%esi),	%eax
	/* saved r[2] */
	/* ############### Calculate word 3 */
	xorl	%ebp,		%ebp
	/* sqr a[3]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	8(%esi),	%eax
	adcl	$0,		%ebp
	movl	4(%esi),	%edx
	/* sqr a[2]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	16(%esi),	%eax
	adcl	$0,		%ebp
	movl	%ebx,		12(%edi)
	movl	(%esi),		%edx
	/* saved r[3] */
	/* ############### Calculate word 4 */
	xorl	%ebx,		%ebx
	/* sqr a[4]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	12(%esi),	%eax
	adcl	$0,		%ebx
	movl	4(%esi),	%edx
	/* sqr a[3]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	8(%esi),	%eax
	adcl	$0,		%ebx
	/* sqr a[2]*a[2] */
	mull	%eax
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	(%esi),		%edx
	adcl	$0,		%ebx
	movl	%ecx,		16(%edi)
	movl	20(%esi),	%eax
	/* saved r[4] */
	/* ############### Calculate word 5 */
	xorl	%ecx,		%ecx
	/* sqr a[5]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	16(%esi),	%eax
	adcl	$0,		%ecx
	movl	4(%esi),	%edx
	/* sqr a[4]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	12(%esi),	%eax
	adcl	$0,		%ecx
	movl	8(%esi),	%edx
	/* sqr a[3]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	24(%esi),	%eax
	adcl	$0,		%ecx
	movl	%ebp,		20(%edi)
	movl	(%esi),		%edx
	/* saved r[5] */
	/* ############### Calculate word 6 */
	xorl	%ebp,		%ebp
	/* sqr a[6]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	20(%esi),	%eax
	adcl	$0,		%ebp
	movl	4(%esi),	%edx
	/* sqr a[5]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	16(%esi),	%eax
	adcl	$0,		%ebp
	movl	8(%esi),	%edx
	/* sqr a[4]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	12(%esi),	%eax
	adcl	$0,		%ebp
	/* sqr a[3]*a[3] */
	mull	%eax
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	(%esi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		24(%edi)
	movl	28(%esi),	%eax
	/* saved r[6] */
	/* ############### Calculate word 7 */
	xorl	%ebx,		%ebx
	/* sqr a[7]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	24(%esi),	%eax
	adcl	$0,		%ebx
	movl	4(%esi),	%edx
	/* sqr a[6]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	20(%esi),	%eax
	adcl	$0,		%ebx
	movl	8(%esi),	%edx
	/* sqr a[5]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	16(%esi),	%eax
	adcl	$0,		%ebx
	movl	12(%esi),	%edx
	/* sqr a[4]*a[3] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	28(%esi),	%eax
	adcl	$0,		%ebx
	movl	%ecx,		28(%edi)
	movl	4(%esi),	%edx
	/* saved r[7] */
	/* ############### Calculate word 8 */
	xorl	%ecx,		%ecx
	/* sqr a[7]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	24(%esi),	%eax
	adcl	$0,		%ecx
	movl	8(%esi),	%edx
	/* sqr a[6]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	20(%esi),	%eax
	adcl	$0,		%ecx
	movl	12(%esi),	%edx
	/* sqr a[5]*a[3] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	16(%esi),	%eax
	adcl	$0,		%ecx
	/* sqr a[4]*a[4] */
	mull	%eax
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	8(%esi),	%edx
	adcl	$0,		%ecx
	movl	%ebp,		32(%edi)
	movl	28(%esi),	%eax
	/* saved r[8] */
	/* ############### Calculate word 9 */
	xorl	%ebp,		%ebp
	/* sqr a[7]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	24(%esi),	%eax
	adcl	$0,		%ebp
	movl	12(%esi),	%edx
	/* sqr a[6]*a[3] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	20(%esi),	%eax
	adcl	$0,		%ebp
	movl	16(%esi),	%edx
	/* sqr a[5]*a[4] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	28(%esi),	%eax
	adcl	$0,		%ebp
	movl	%ebx,		36(%edi)
	movl	12(%esi),	%edx
	/* saved r[9] */
	/* ############### Calculate word 10 */
	xorl	%ebx,		%ebx
	/* sqr a[7]*a[3] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	24(%esi),	%eax
	adcl	$0,		%ebx
	movl	16(%esi),	%edx
	/* sqr a[6]*a[4] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	20(%esi),	%eax
	adcl	$0,		%ebx
	/* sqr a[5]*a[5] */
	mull	%eax
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	16(%esi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		40(%edi)
	movl	28(%esi),	%eax
	/* saved r[10] */
	/* ############### Calculate word 11 */
	xorl	%ecx,		%ecx
	/* sqr a[7]*a[4] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	24(%esi),	%eax
	adcl	$0,		%ecx
	movl	20(%esi),	%edx
	/* sqr a[6]*a[5] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	28(%esi),	%eax
	adcl	$0,		%ecx
	movl	%ebp,		44(%edi)
	movl	20(%esi),	%edx
	/* saved r[11] */
	/* ############### Calculate word 12 */
	xorl	%ebp,		%ebp
	/* sqr a[7]*a[5] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	24(%esi),	%eax
	adcl	$0,		%ebp
	/* sqr a[6]*a[6] */
	mull	%eax
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	24(%esi),	%edx
	adcl	$0,		%ebp
	movl	%ebx,		48(%edi)
	movl	28(%esi),	%eax
	/* saved r[12] */
	/* ############### Calculate word 13 */
	xorl	%ebx,		%ebx
	/* sqr a[7]*a[6] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	28(%esi),	%eax
	adcl	$0,		%ebx
	movl	%ecx,		52(%edi)
	/* saved r[13] */
	/* ############### Calculate word 14 */
	xorl	%ecx,		%ecx
	/* sqr a[7]*a[7] */
	mull	%eax
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	adcl	$0,		%ecx
	movl	%ebp,		56(%edi)
	/* saved r[14] */
	movl	%ebx,		60(%edi)
	popl	%ebx
	popl	%ebp
	popl	%edi
	popl	%esi
	ret
.bn_sqr_comba8_end:
	SIZE(bn_sqr_comba8,.bn_sqr_comba8_end-bn_sqr_comba8)
.ident	"desasm.pl"
.text
	.align ALIGN
.globl bn_sqr_comba4
	TYPE(bn_sqr_comba4,@function)
bn_sqr_comba4:
	pushl	%esi
	pushl	%edi
	pushl	%ebp
	pushl	%ebx
	movl	20(%esp),	%edi
	movl	24(%esp),	%esi
	xorl	%ebx,		%ebx
	xorl	%ecx,		%ecx
	movl	(%esi),		%eax
	/* ############### Calculate word 0 */
	xorl	%ebp,		%ebp
	/* sqr a[0]*a[0] */
	mull	%eax
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	(%esi),		%edx
	adcl	$0,		%ebp
	movl	%ebx,		(%edi)
	movl	4(%esi),	%eax
	/* saved r[0] */
	/* ############### Calculate word 1 */
	xorl	%ebx,		%ebx
	/* sqr a[1]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	8(%esi),	%eax
	adcl	$0,		%ebx
	movl	%ecx,		4(%edi)
	movl	(%esi),		%edx
	/* saved r[1] */
	/* ############### Calculate word 2 */
	xorl	%ecx,		%ecx
	/* sqr a[2]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	4(%esi),	%eax
	adcl	$0,		%ecx
	/* sqr a[1]*a[1] */
	mull	%eax
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	(%esi),		%edx
	adcl	$0,		%ecx
	movl	%ebp,		8(%edi)
	movl	12(%esi),	%eax
	/* saved r[2] */
	/* ############### Calculate word 3 */
	xorl	%ebp,		%ebp
	/* sqr a[3]*a[0] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	8(%esi),	%eax
	adcl	$0,		%ebp
	movl	4(%esi),	%edx
	/* sqr a[2]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebp
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	movl	12(%esi),	%eax
	adcl	$0,		%ebp
	movl	%ebx,		12(%edi)
	movl	4(%esi),	%edx
	/* saved r[3] */
	/* ############### Calculate word 4 */
	xorl	%ebx,		%ebx
	/* sqr a[3]*a[1] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ebx
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	8(%esi),	%eax
	adcl	$0,		%ebx
	/* sqr a[2]*a[2] */
	mull	%eax
	addl	%eax,		%ecx
	adcl	%edx,		%ebp
	movl	8(%esi),	%edx
	adcl	$0,		%ebx
	movl	%ecx,		16(%edi)
	movl	12(%esi),	%eax
	/* saved r[4] */
	/* ############### Calculate word 5 */
	xorl	%ecx,		%ecx
	/* sqr a[3]*a[2] */
	mull	%edx
	addl	%eax,		%eax
	adcl	%edx,		%edx
	adcl	$0,		%ecx
	addl	%eax,		%ebp
	adcl	%edx,		%ebx
	movl	12(%esi),	%eax
	adcl	$0,		%ecx
	movl	%ebp,		20(%edi)
	/* saved r[5] */
	/* ############### Calculate word 6 */
	xorl	%ebp,		%ebp
	/* sqr a[3]*a[3] */
	mull	%eax
	addl	%eax,		%ebx
	adcl	%edx,		%ecx
	adcl	$0,		%ebp
	movl	%ebx,		24(%edi)
	/* saved r[6] */
	movl	%ecx,		28(%edi)
	popl	%ebx
	popl	%ebp
	popl	%edi
	popl	%esi
	ret
.bn_sqr_comba4_end:
	SIZE(bn_sqr_comba4,.bn_sqr_comba4_end-bn_sqr_comba4)
.ident	"desasm.pl"
