This is the mail archive of the glibc-linux@ricardo.ecn.wfu.edu mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Speed under gcc/glibc2 vs gcc/glibc1



I'm in the process of upgrading my system from libc5->glibc2 (as the
primary library).  I've noticed that apps compiled with the new
includes/libs (gcc-2.95.1 on a Linux-2.2.12, i586) run much slower.
One example of this is a number-crunging code that runs 20% slower in
the glibc2 environment.  I compiled with

	 CFLAGS=--O3 -march=pentium -ffast-math -funroll-loops
	    -fomit-frame-pointer -fforce-mem -fforce-addr

The code is fairly simple, and gprof shows that 90% of the time is
spent in one function.  However, when I look at the assembly output
(of which I'm basically ignorant), I only see a single call, a call to
exp, in the faster libc5 version.  I've appended the assembler output
below and would very much appreciate anyone who can tell me what's
going on.  It's clearly not the library directly.

David

The GLIBC1 and GLIBC2 assembly dumps of the key function follow

====================GLIBC1=======================================

	.type	 do_hydrocarbon_move,@function
do_hydrocarbon_move:
	movl seed,%eax
	subl $572,%esp
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	pushl %ebp
	pushl %edi
	pushl %esi
	pushl %ebx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	movl %edx,%ebx
	shrl $18,%ebx
	movl %ebx,%edx
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	subl %edx,%eax
	movl %eax,%edx
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	subl %eax,%ecx
	movl %ecx,%eax
	xorl %edx,%edx
	movl %eax,192(%esp)
	movl %edx,196(%esp)
	fildll 192(%esp)
	movl %ecx,seed
	movl nrigid,%ecx
	movl nmonomer,%eax
	fmull .LC9
	subl %ecx,%eax
	movl %eax,184(%esp)
	movl %edx,188(%esp)
	fildll 184(%esp)
	fmulp %st,%st(1)
	leal 512(%esp),%esi
	leal 416(%esp),%edi
	fldl SIN_120
	fstl mdihedral.90+8
	fstl dihedral.89+24
	fchs
	fxch %st(1)
	fnstcw 182(%esp)
	movw 182(%esp),%bx
	orw $3072,%bx
	movw %bx,180(%esp)
	fldcw 180(%esp)
	fistpll 184(%esp)
	movl 184(%esp),%eax
	movl 188(%esp),%edx
	fldcw 182(%esp)
	movl %esi,84(%esp)
	movl %edi,92(%esp)
	fstl mdihedral.90+24
	fstpl dihedral.89+8
	addl %ecx,%eax
	movl last_monomer.91,%ecx
	movl %eax,144(%esp)
	cmpl %ecx,%eax
	jbe .L94
	leal 1(%ecx),%ebp
	cmpl %eax,%ebp
	ja .L94
	movl new_monomer,%eax
	movl monomer,%edx
	movl %eax,140(%esp)
	leal 0(,%ebp,8),%eax
	subl %ebp,%eax
	leal 0(,%eax,8),%ebx
	movl %eax,32(%esp)
	movl 144(%esp),%eax
	movl %edx,136(%esp)
	movl %ebx,36(%esp)
	incl %eax
	movl %eax,%edx
	subl %ebp,%edx
	andl $1,%edx
	cmpl %eax,%ebp
	jge .L309
	testl %edx,%edx
	je .L98
.L309:
	movl 136(%esp),%edi
	movl 36(%esp),%eax
	movl 140(%esp),%edx
	leal 16(%eax,%edi),%esi
	leal 16(%eax,%edx),%edi
	fldl (%esi)
	fstpl (%edi)
	fldl 8(%esi)
	fstpl 8(%edi)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 136(%esp),%ebx
	leal 2(%ecx),%ebp
	fldl 48(%ebx,%eax)
	fstpl 48(%edx,%eax)
	addl $56,%eax
	movl %eax,36(%esp)
	addl $7,32(%esp)
	cmpl 144(%esp),%ebp
	ja .L94
	.p2align 4,,7
.L98:
	movl 32(%esp),%eax
	movl 140(%esp),%edx
	movl 136(%esp),%esi
	sall $3,%eax
	addl $16,%edx
	addl $16,%esi
	movl %esi,20(%esp)
	addl %eax,%esi
	leal (%edx,%eax),%edi
	fldl (%esi)
	fstpl (%edi)
	fldl 8(%esi)
	fstpl 8(%edi)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 36(%esp),%edi
	movl 136(%esp),%eax
	movl 140(%esp),%ecx
	fldl 48(%eax,%edi)
	fstpl 48(%ecx,%edi)
	movl 32(%esp),%ebx
	movl %edi,%ecx
	addl $56,%ecx
	leal 56(,%ebx,8),%eax
	addl %eax,%edx
	addl 20(%esp),%eax
	movl %eax,%esi
	movl %edx,%edi
	fldl (%eax)
	fstpl (%edx)
	fldl 8(%eax)
	fstpl 8(%edx)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 136(%esp),%esi
	movl 140(%esp),%edi
	addl $14,%ebx
	addl $2,%ebp
	fldl 48(%esi,%ecx)
	fstpl 48(%edi,%ecx)
	addl $112,36(%esp)
	movl %ebx,32(%esp)
	cmpl 144(%esp),%ebp
	jbe .L98
	.p2align 4,,7
.L94:
	movl 144(%esp),%eax
	movl 144(%esp),%edx
	decl %edx
	movl %edx,68(%esp)
	movl monomer,%edx
	movl %eax,last_monomer.91
	sall $3,%eax
	subl 144(%esp),%eax
	leal (%edx,%eax,8),%ecx
	addl $-40,%edx
	leal (%edx,%eax,8),%eax
	movl %eax,%edx
	fldl 16(%ecx)
	fsubl (%eax)
	fld %st(0)
	fmul %st(1),%st
	fxch %st(1)
	movl 84(%esp),%ebx
	fstpl (%ebx)
	fldl 24(%ecx)
	fsubl 8(%eax)
	fstl 8(%ebx)
	fmul %st(0),%st
	faddp %st,%st(1)
	fldl 32(%ecx)
	fsubl 16(%edx)
	fstl 16(%ebx)
	fmul %st(0),%st
	faddp %st,%st(1)
	fsqrt
	movl seed,%eax
	fdivrl 528(%esp)
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	fstl 528(%esp)
	fstl ry.87+64
	fstl ry.87
	fmul %st(0),%st
	fld1
	fld %st(0)
	fldl 512(%esp)
	fldl 520(%esp)
	fxch %st(2)
	movl %edx,%ebx
	fsubp %st,%st(4)
	shrl $18,%ebx
	movl %ebx,%edx
	fld %st(0)
	fmul %st(0),%st
	fxch %st(4)
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	fsqrt
	fstl ry.87+48
	fchs
	subl %edx,%eax
	movl %eax,%edx
	fstpl ry.87+16
	fld %st(1)
	fmul %st(0),%st
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	movl %ecx,%edx
	faddp %st,%st(4)
	subl %eax,%edx
	movl %edx,seed
	fldz
	fucomp %st(4)
	fnstsw %ax
	andb $69,%ah
	cmpb $64,%ah
	je .L316
	fxch %st(3)
	fsqrt
	fdivrp %st,%st(2)
	fxch %st(2)
	fmul %st(1),%st
	fstl rz.88+32
	fstpl rz.88
	fmulp %st,%st(1)
	leal 320(%esp),%edx
	movl %edx,132(%esp)
	xorl %eax,%eax
	fstl rz.88+8
	fchs
	leal 224(%esp),%ecx
	movl %ecx,76(%esp)
	fstpl rz.88+24
	.p2align 4,,7
.L113:
	xorl %ebp,%ebp
	leal 1(%eax),%ebx
	movl %ebx,80(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebx
	.p2align 4,,7
.L116:
	leal 0(,%ebp,8),%ecx
	leal (%ebx,%ecx),%eax
	addl 132(%esp),%eax
	leal rz.88(%ecx),%esi
	movl %esi,40(%esp)
	leal ry.87(%ebx),%edx
	movl %edx,%edi
	fldl ry.87(%ebx)
	fmull rz.88(%ecx)
	fstl (%eax)
	movl 40(%esp),%ecx
	fldl 8(%edx)
	fmull 24(%ecx)
	faddp %st,%st(1)
	fstl (%eax)
	fldl 16(%edi)
	fmull 48(%esi)
	faddp %st,%st(1)
	fstpl (%eax)
	incl %ebp
	cmpl $2,%ebp
	jle .L116
	movl 80(%esp),%eax
	cmpl $2,%eax
	jle .L113
	cmpl $885937,seed
	jbe .L127
	xorl %eax,%eax
	.p2align 4,,7
.L130:
	xorl %edi,%edi
	leal 1(%eax),%ebx
	movl %ebx,72(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebp
	.p2align 4,,7
.L133:
	leal 0(,%edi,8),%eax
	leal (%ebp,%eax),%edx
	addl 76(%esp),%edx
	leal 320(%esp,%eax),%eax
	leal dihedral.89(%ebp),%ecx
	movl %ecx,%esi
	movl $0,(%edx)
	movl $0,4(%edx)
	movl %eax,24(%esp)
	fldl dihedral.89(%ebp)
	fmull (%eax)
	fstl (%edx)
	fldl 8(%ecx)
	fmull 24(%eax)
	faddp %st,%st(1)
	fstl (%edx)
	movl 24(%esp),%eax
	fldl 16(%esi)
	fmull 48(%eax)
	faddp %st,%st(1)
	fstpl (%edx)
	incl %edi
	cmpl $2,%edi
	jle .L133
	movl 72(%esp),%eax
	cmpl $2,%eax
	jle .L130
	jmp .L144
	.p2align 4,,7
.L127:
	xorl %eax,%eax
	.p2align 4,,7
.L147:
	xorl %edi,%edi
	leal 1(%eax),%edx
	movl %edx,60(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebp
	.p2align 4,,7
.L150:
	leal 0(,%edi,8),%eax
	leal (%ebp,%eax),%edx
	addl 76(%esp),%edx
	leal 320(%esp,%eax),%eax
	leal mdihedral.90(%ebp),%ecx
	movl %ecx,%esi
	movl $0,(%edx)
	movl $0,4(%edx)
	movl %eax,28(%esp)
	fldl mdihedral.90(%ebp)
	fmull (%eax)
	fstl (%edx)
	fldl 8(%ecx)
	fmull 24(%eax)
	faddp %st,%st(1)
	fstl (%edx)
	movl 28(%esp),%ecx
	fldl 16(%esi)
	fmull 48(%ecx)
	faddp %st,%st(1)
	fstpl (%edx)
	incl %edi
	cmpl $2,%edi
	jle .L150
	movl 60(%esp),%eax
	cmpl $2,%eax
	jle .L147
	.p2align 4,,7
.L144:
	movl 92(%esp),%ebx
	movl 76(%esp),%esi
	xorl %ebp,%ebp
	movl %ebx,128(%esp)
	movl $0,48(%esp)
	movl $0,44(%esp)
	leal 320(%esp),%edi
	.p2align 4,,7
.L164:
	movl 48(%esp),%ecx
	movl 44(%esp),%eax
	xorl %edx,%edx
	addl 128(%esp),%eax
	xorl %ebx,%ebx
	.p2align 4,,7
.L168:
	movl $0,(%eax)
	movl $0,4(%eax)
	fldl (%ecx,%edi)
	fmull (%ebx,%esi)
	fstl (%eax)
	fldl 24(%edi,%ecx)
	fmull 24(%esi,%ebx)
	faddp %st,%st(1)
	fstl (%eax)
	fldl 48(%edi,%ecx)
	fmull 48(%esi,%ebx)
	faddp %st,%st(1)
	fstpl (%eax)
	addl $8,%eax
	addl $8,%ebx
	incl %edx
	cmpl $2,%edx
	jbe .L168
	addl $8,48(%esp)
	addl $24,44(%esp)
	incl %ebp
	cmpl $2,%ebp
	jbe .L164
	jmp .L176
.L316:
	fstp %st(0)
	fstp %st(0)
	fstp %st(0)
	fstp %st(0)
	cmpl $885937,%edx
	jbe .L177
	movl 92(%esp),%esi
	fldl dihedral.89
	fstpl (%esi)
	fldl dihedral.89+8
	fstpl 8(%esi)
	fldl dihedral.89+16
	fstpl 16(%esi)
	fldl dihedral.89+24
	fstpl 24(%esi)
	fldl dihedral.89+32
	fstpl 32(%esi)
	fldl dihedral.89+40
	fstpl 40(%esi)
	fldl dihedral.89+48
	fstpl 48(%esi)
	fldl dihedral.89+56
	fstpl 56(%esi)
	fldl dihedral.89+64
	fstpl 64(%esi)
	jmp .L176
	.p2align 4,,7
.L177:
	movl 92(%esp),%edi
	fldl mdihedral.90
	fstpl (%edi)
	fldl mdihedral.90+8
	fstpl 8(%edi)
	fldl mdihedral.90+16
	fstpl 16(%edi)
	fldl mdihedral.90+24
	fstpl 24(%edi)
	fldl mdihedral.90+32
	fstpl 32(%edi)
	fldl mdihedral.90+40
	fstpl 40(%edi)
	fldl mdihedral.90+48
	fstpl 48(%edi)
	fldl mdihedral.90+56
	fstpl 56(%edi)
	fldl mdihedral.90+64
	fstpl 64(%edi)
	.p2align 4,,7
.L176:
	movl 84(%esp),%eax
	movl monomer,%edx
	movl %eax,124(%esp)
	movl 68(%esp),%eax
	movl 68(%esp),%ebx
	movl 92(%esp),%esi
	xorl %ebp,%ebp
	movl %edx,120(%esp)
	sall $3,%eax
	subl 68(%esp),%eax
	leal 16(%edx,%eax,8),%ecx
	movl %ecx,116(%esp)
	addl $2,%ebx
	movl %ebx,64(%esp)
	leal 0(,%eax,8),%eax
	movl %eax,52(%esp)
	.p2align 4,,7
.L202:
	movl 124(%esp),%ecx
	movl 116(%esp),%edi
	leal 0(,%ebp,8),%eax
	addl %eax,%ecx
	leal (%ebp,%ebp,2),%edx
	sall $3,%edx
	fldl (%eax,%edi)
	fstl (%ecx)
	movl 120(%esp),%ebx
	movl 52(%esp),%edi
	leal 16(%edi,%ebx),%eax
	movl %eax,%edi
	fldl (%edx,%esi)
	fmull (%eax)
	fsubrp %st,%st(1)
	fstl (%ecx)
	fldl 8(%esi,%edx)
	fmull 8(%eax)
	fsubrp %st,%st(1)
	fstl (%ecx)
	fldl 16(%esi,%edx)
	fmull 16(%edi)
	fsubrp %st,%st(1)
	movl $3,%edx
	fstpl (%ecx)
	incl %ebp
	cmpl $2,%ebp
	jbe .L202
	movl 64(%esp),%ebp
	cmpl nmonomer,%ebp
	ja .L210
	movl new_monomer,%eax
	movl monomer,%ecx
	movl %eax,112(%esp)
	leal 464(%esp),%edx
	movl %edx,88(%esp)
	movl %ecx,108(%esp)
	addl $16,%ecx
	movl %ecx,56(%esp)
	.p2align 4,,7
.L212:
	movl 112(%esp),%ebx
	leal 0(,%ebp,8),%eax
	movl %eax,%edx
	subl %ebp,%edx
	leal (%ebx,%edx,8),%ecx
	movl %eax,%ebx
	fldl 528(%esp)
	fstl 32(%ecx)
	movl 108(%esp),%eax
	addl $16,%eax
	leal (%eax,%edx,8),%edx
	movl %edx,%eax
	movl 88(%esp),%esi
	fldl (%esi)
	fmull (%edx)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldl 8(%esi)
	fmull 8(%edx)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldl 16(%esi)
	fmull 16(%eax)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldz
	fcomp %st(1)
	fnstsw %ax
	andb $69,%ah
	je .L317
	cmpl $2,plate_type
	jne .L318
	fcompl plate_gap
	fnstsw %ax
	andb $69,%ah
	decb %ah
	cmpb $64,%ah
	jb .L218
	jmp .L219
.L317:
	fstp %st(0)
	.p2align 4,,7
.L219:
	incl fail_core
	jmp .L92
.L318:
	fstp %st(0)
	.p2align 4,,7
.L218:
	movl 112(%esp),%ecx
	movl %ebx,%edx
	subl %ebp,%edx
	leal 0(,%edx,8),%eax
	leal (%ecx,%eax),%esi
	fldl 512(%esp)
	fstpl 16(%esi)
	fldl 520(%esp)
	fstpl 24(%esi)
	movl 56(%esp),%ebx
	leal 440(%esp),%edi
	addl new_monomer,%eax
	leal (%ebx,%edx,8),%edx
	movl %edx,%ecx
	movl 92(%esp),%ebx
	fldl (%ebx)
	fmull (%edx)
	faddl 16(%eax)
	fstl 16(%eax)
	fldl 440(%esp)
	fmull (%edx)
	faddl 24(%eax)
	addl $8,%edx
	fstl 24(%eax)
	fldl 8(%ebx)
	fmull (%edx)
	faddp %st,%st(2)
	fxch %st(1)
	fstl 16(%eax)
	fldl 8(%edi)
	fmull (%edx)
	faddp %st,%st(2)
	fxch %st(1)
	fstl 24(%eax)
	fldl 16(%ebx)
	fmull 16(%ecx)
	faddp %st,%st(2)
	fxch %st(1)
	fstpl 16(%eax)
	fldl 16(%edi)
	fmull 16(%ecx)
	faddp %st,%st(1)
	fstpl 24(%eax)
	fldl 32(%esi)
	fmull inverse_grid_spacing
	fnstcw 182(%esp)
	movw 182(%esp),%di
	orw $3072,%di
	movw %di,180(%esp)
	fldcw 180(%esp)
	fistpll 184(%esp)
	movl 184(%esp),%eax
	movl 188(%esp),%edx
	fldcw 182(%esp)
	movl %eax,%edx
	leal 0(,%edx,8),%eax
	addl steric_potential,%eax
	fldl -8(%esi)
	faddl (%eax)
	incl %ebp
	fstpl 48(%esi)
	cmpl nmonomer,%ebp
	jbe .L212
	.p2align 4,,7
.L210:
	movl nmonomer,%ecx
	sall $3,%ecx
	subl nmonomer,%ecx
	sall $3,%ecx
	movl %ecx,%eax
	addl new_monomer,%eax
	sall $3,%edx
	fldl 32(%eax)
	fsubl -24(%eax)
	addl electric_field,%edx
	fmull (%edx)
	fmull 40(%eax)
	fsubrl 48(%eax)
	addl monomer,%ecx
	fstl 48(%eax)
	fsubl 48(%ecx)
	fldz
	fcomp %st(1)
	fnstsw %ax
	andb $5,%ah
	je .L319
	movl seed,%eax
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	movl %edx,%ebx
	shrl $18,%ebx
	movl %ebx,%edx
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	subl %edx,%eax
	movl %eax,%edx
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	subl %eax,%ecx
	movl %ecx,%eax
	xorl %edx,%edx
	movl %eax,148(%esp)
	movl %edx,152(%esp)
	fildll 148(%esp)
	fmull .LC9
	fxch %st(1)
	fchs
	fxch %st(1)
	movl %ecx,seed
	fstpl 96(%esp)
	addl $-8,%esp
	subl $8,%esp
	fstpl (%esp)
	call exp
	addl $16,%esp
	fcompl 96(%esp)
	fnstsw %ax
	andb $5,%ah
	je .L226
	incl fail_swap
	jmp .L92
.L319:
	fstp %st(0)
	.p2align 4,,7
.L226:
	movl new_monomer,%edx
	movl monomer,%eax
	movl %eax,new_monomer
	movl %edx,monomer
.L92:
	popl %ebx
	popl %esi
	popl %edi
	popl %ebp
	addl $572,%esp
	ret

====================GLIBC2=============================================

	.type	 do_hydrocarbon_move,@function
do_hydrocarbon_move:
	movl seed,%eax
	subl $588,%esp
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	pushl %ebp
	pushl %edi
	pushl %esi
	pushl %ebx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	movl %edx,%ebx
	shrl $18,%ebx
	movl %ebx,%edx
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	subl %edx,%eax
	movl %eax,%edx
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	subl %eax,%ecx
	movl %ecx,%eax
	xorl %edx,%edx
	movl %eax,208(%esp)
	movl %edx,212(%esp)
	fildll 208(%esp)
	movl %ecx,seed
	movl nrigid,%ecx
	movl nmonomer,%eax
	fmull .LC55
	subl %ecx,%eax
	movl %eax,200(%esp)
	movl %edx,204(%esp)
	fildll 200(%esp)
	fmulp %st,%st(1)
	leal 528(%esp),%esi
	leal 432(%esp),%edi
	fldl SIN_120
	fstl mdihedral.444+8
	fstl dihedral.443+24
	fchs
	fxch %st(1)
	fnstcw 198(%esp)
	movw 198(%esp),%bx
	orw $3072,%bx
	movw %bx,196(%esp)
	fldcw 196(%esp)
	fistpll 200(%esp)
	movl 200(%esp),%eax
	movl 204(%esp),%edx
	fldcw 198(%esp)
	movl %esi,80(%esp)
	movl %edi,88(%esp)
	fstl mdihedral.444+24
	fstpl dihedral.443+8
	addl %ecx,%eax
	movl last_monomer.445,%ecx
	movl %eax,128(%esp)
	cmpl %ecx,%eax
	jbe .L545
	leal 1(%ecx),%ebp
	cmpl %eax,%ebp
	ja .L545
	movl new_monomer,%eax
	movl monomer,%edx
	movl %eax,124(%esp)
	leal 0(,%ebp,8),%eax
	subl %ebp,%eax
	leal 0(,%eax,8),%ebx
	movl %eax,28(%esp)
	movl 128(%esp),%eax
	movl %edx,120(%esp)
	movl %ebx,32(%esp)
	incl %eax
	movl %eax,%edx
	subl %ebp,%edx
	andl $1,%edx
	cmpl %eax,%ebp
	jge .L764
	testl %edx,%edx
	je .L549
.L764:
	movl 120(%esp),%edi
	movl 32(%esp),%eax
	movl 124(%esp),%edx
	leal 16(%eax,%edi),%esi
	leal 16(%eax,%edx),%edi
	fldl (%esi)
	fstpl (%edi)
	fldl 8(%esi)
	fstpl 8(%edi)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 120(%esp),%ebx
	leal 2(%ecx),%ebp
	fldl 48(%ebx,%eax)
	fstpl 48(%edx,%eax)
	addl $56,%eax
	movl %eax,32(%esp)
	addl $7,28(%esp)
	cmpl 128(%esp),%ebp
	ja .L545
	.p2align 4,,7
.L549:
	movl 28(%esp),%eax
	movl 124(%esp),%edx
	movl 120(%esp),%esi
	sall $3,%eax
	addl $16,%edx
	addl $16,%esi
	movl %esi,16(%esp)
	addl %eax,%esi
	leal (%edx,%eax),%edi
	fldl (%esi)
	fstpl (%edi)
	fldl 8(%esi)
	fstpl 8(%edi)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 32(%esp),%edi
	movl 120(%esp),%eax
	movl 124(%esp),%ecx
	fldl 48(%eax,%edi)
	fstpl 48(%ecx,%edi)
	movl 28(%esp),%ebx
	movl %edi,%ecx
	addl $56,%ecx
	leal 56(,%ebx,8),%eax
	addl %eax,%edx
	addl 16(%esp),%eax
	movl %eax,%esi
	movl %edx,%edi
	fldl (%eax)
	fstpl (%edx)
	fldl 8(%eax)
	fstpl 8(%edx)
	fldl 16(%esi)
	fstpl 16(%edi)
	movl 120(%esp),%esi
	movl 124(%esp),%edi
	addl $14,%ebx
	addl $2,%ebp
	fldl 48(%esi,%ecx)
	fstpl 48(%edi,%ecx)
	addl $112,32(%esp)
	movl %ebx,28(%esp)
	cmpl 128(%esp),%ebp
	jbe .L549
	.p2align 4,,7
.L545:
	movl 128(%esp),%eax
	movl 128(%esp),%edx
	decl %edx
	movl %edx,64(%esp)
	movl monomer,%edx
	movl %eax,last_monomer.445
	sall $3,%eax
	subl 128(%esp),%eax
	leal (%edx,%eax,8),%ecx
	addl $-40,%edx
	leal (%edx,%eax,8),%eax
	movl %eax,%edx
	fldl 16(%ecx)
	fsubl (%eax)
	fld %st(0)
	fmul %st(1),%st
	fxch %st(1)
	movl 80(%esp),%ebx
	fstpl (%ebx)
	fldl 24(%ecx)
	fsubl 8(%eax)
	fstl 8(%ebx)
	fmul %st(0),%st
	faddp %st,%st(1)
	fldl 32(%ecx)
	fsubl 16(%edx)
	fstl 16(%ebx)
	fmul %st(0),%st
	faddp %st,%st(1)
#APP
	fsqrt
#NO_APP
	fldl 544(%esp)
	fdivp %st,%st(1)
	fstl 544(%esp)
	fstl ry.441+64
	fstl ry.441
	fmul %st(0),%st
	fld1
	fld %st(0)
	fsubp %st,%st(2)
	fxch %st(1)
#APP
	fsqrt
#NO_APP
	fldl 528(%esp)
	fld %st(0)
	fmul %st(0),%st
	fxch %st(2)
	fstl ry.441+48
	fchs
	movl seed,%eax
	fldl 536(%esp)
	fxch %st(1)
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	fstpl ry.441+16
	fld %st(0)
	fmul %st(0),%st
	faddp %st,%st(3)
	fldz
	movl %edx,%ebx
	shrl $18,%ebx
	movl %ebx,%edx
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	subl %edx,%eax
	movl %eax,%edx
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	movl %ecx,%edx
	subl %eax,%edx
	movl %edx,seed
	fucomp %st(3)
	fnstsw %ax
	andb $69,%ah
	cmpb $64,%ah
	je .L771
	fxch %st(2)
#APP
	fsqrt
#NO_APP
	fdivrp %st,%st(3)
	fmul %st(2),%st
	fstl rz.442+32
	fstpl rz.442
	fmulp %st,%st(1)
	leal 336(%esp),%edx
	movl %edx,116(%esp)
	xorl %eax,%eax
	fstl rz.442+8
	fchs
	leal 240(%esp),%ecx
	movl %ecx,72(%esp)
	fstpl rz.442+24
	.p2align 4,,7
.L567:
	xorl %ebp,%ebp
	leal 1(%eax),%ebx
	movl %ebx,76(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebx
	.p2align 4,,7
.L570:
	leal 0(,%ebp,8),%ecx
	leal (%ebx,%ecx),%eax
	addl 116(%esp),%eax
	leal rz.442(%ecx),%esi
	movl %esi,36(%esp)
	leal ry.441(%ebx),%edx
	movl %edx,%edi
	fldl ry.441(%ebx)
	fmull rz.442(%ecx)
	fstl (%eax)
	movl 36(%esp),%ecx
	fldl 8(%edx)
	fmull 24(%ecx)
	faddp %st,%st(1)
	fstl (%eax)
	fldl 16(%edi)
	fmull 48(%esi)
	faddp %st,%st(1)
	fstpl (%eax)
	incl %ebp
	cmpl $2,%ebp
	jle .L570
	movl 76(%esp),%eax
	cmpl $2,%eax
	jle .L567
	cmpl $885937,seed
	jbe .L581
	xorl %eax,%eax
	.p2align 4,,7
.L584:
	xorl %edi,%edi
	leal 1(%eax),%ebx
	movl %ebx,68(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebp
	.p2align 4,,7
.L587:
	leal 0(,%edi,8),%eax
	leal (%ebp,%eax),%edx
	addl 72(%esp),%edx
	leal 336(%esp,%eax),%eax
	leal dihedral.443(%ebp),%ecx
	movl %ecx,%esi
	movl $0,(%edx)
	movl $0,4(%edx)
	movl %eax,20(%esp)
	fldl dihedral.443(%ebp)
	fmull (%eax)
	fstl (%edx)
	fldl 8(%ecx)
	fmull 24(%eax)
	faddp %st,%st(1)
	fstl (%edx)
	movl 20(%esp),%eax
	fldl 16(%esi)
	fmull 48(%eax)
	faddp %st,%st(1)
	fstpl (%edx)
	incl %edi
	cmpl $2,%edi
	jle .L587
	movl 68(%esp),%eax
	cmpl $2,%eax
	jle .L584
	jmp .L598
	.p2align 4,,7
.L581:
	xorl %eax,%eax
	.p2align 4,,7
.L601:
	xorl %edi,%edi
	leal 1(%eax),%edx
	movl %edx,56(%esp)
	leal (%eax,%eax,2),%eax
	leal 0(,%eax,8),%ebp
	.p2align 4,,7
.L604:
	leal 0(,%edi,8),%eax
	leal (%ebp,%eax),%edx
	addl 72(%esp),%edx
	leal 336(%esp,%eax),%eax
	leal mdihedral.444(%ebp),%ecx
	movl %ecx,%esi
	movl $0,(%edx)
	movl $0,4(%edx)
	movl %eax,24(%esp)
	fldl mdihedral.444(%ebp)
	fmull (%eax)
	fstl (%edx)
	fldl 8(%ecx)
	fmull 24(%eax)
	faddp %st,%st(1)
	fstl (%edx)
	movl 24(%esp),%ecx
	fldl 16(%esi)
	fmull 48(%ecx)
	faddp %st,%st(1)
	fstpl (%edx)
	incl %edi
	cmpl $2,%edi
	jle .L604
	movl 56(%esp),%eax
	cmpl $2,%eax
	jle .L601
	.p2align 4,,7
.L598:
	movl 88(%esp),%ebx
	movl 72(%esp),%esi
	xorl %ebp,%ebp
	movl %ebx,112(%esp)
	movl $0,44(%esp)
	movl $0,40(%esp)
	leal 336(%esp),%edi
	.p2align 4,,7
.L618:
	movl 44(%esp),%ecx
	movl 40(%esp),%eax
	xorl %edx,%edx
	addl 112(%esp),%eax
	xorl %ebx,%ebx
	.p2align 4,,7
.L622:
	movl $0,(%eax)
	movl $0,4(%eax)
	fldl (%ecx,%edi)
	fmull (%ebx,%esi)
	fstl (%eax)
	fldl 24(%edi,%ecx)
	fmull 24(%esi,%ebx)
	faddp %st,%st(1)
	fstl (%eax)
	fldl 48(%edi,%ecx)
	fmull 48(%esi,%ebx)
	faddp %st,%st(1)
	fstpl (%eax)
	addl $8,%eax
	addl $8,%ebx
	incl %edx
	cmpl $2,%edx
	jbe .L622
	addl $8,44(%esp)
	addl $24,40(%esp)
	incl %ebp
	cmpl $2,%ebp
	jbe .L618
	jmp .L630
.L771:
	fstp %st(0)
	fstp %st(0)
	fstp %st(0)
	fstp %st(0)
	cmpl $885937,%edx
	jbe .L631
	movl 88(%esp),%esi
	fldl dihedral.443
	fstpl (%esi)
	fldl dihedral.443+8
	fstpl 8(%esi)
	fldl dihedral.443+16
	fstpl 16(%esi)
	fldl dihedral.443+24
	fstpl 24(%esi)
	fldl dihedral.443+32
	fstpl 32(%esi)
	fldl dihedral.443+40
	fstpl 40(%esi)
	fldl dihedral.443+48
	fstpl 48(%esi)
	fldl dihedral.443+56
	fstpl 56(%esi)
	fldl dihedral.443+64
	fstpl 64(%esi)
	jmp .L630
	.p2align 4,,7
.L631:
	movl 88(%esp),%edi
	fldl mdihedral.444
	fstpl (%edi)
	fldl mdihedral.444+8
	fstpl 8(%edi)
	fldl mdihedral.444+16
	fstpl 16(%edi)
	fldl mdihedral.444+24
	fstpl 24(%edi)
	fldl mdihedral.444+32
	fstpl 32(%edi)
	fldl mdihedral.444+40
	fstpl 40(%edi)
	fldl mdihedral.444+48
	fstpl 48(%edi)
	fldl mdihedral.444+56
	fstpl 56(%edi)
	fldl mdihedral.444+64
	fstpl 64(%edi)
	.p2align 4,,7
.L630:
	movl 80(%esp),%eax
	movl monomer,%edx
	movl %eax,108(%esp)
	movl 64(%esp),%eax
	movl 64(%esp),%ebx
	movl 88(%esp),%esi
	xorl %ebp,%ebp
	movl %edx,104(%esp)
	sall $3,%eax
	subl 64(%esp),%eax
	leal 16(%edx,%eax,8),%ecx
	movl %ecx,100(%esp)
	addl $2,%ebx
	movl %ebx,60(%esp)
	leal 0(,%eax,8),%eax
	movl %eax,48(%esp)
	.p2align 4,,7
.L656:
	movl 108(%esp),%ecx
	movl 100(%esp),%edi
	leal 0(,%ebp,8),%eax
	addl %eax,%ecx
	leal (%ebp,%ebp,2),%edx
	sall $3,%edx
	fldl (%eax,%edi)
	fstl (%ecx)
	movl 104(%esp),%ebx
	movl 48(%esp),%edi
	leal 16(%edi,%ebx),%eax
	movl %eax,%edi
	fldl (%edx,%esi)
	fmull (%eax)
	fsubrp %st,%st(1)
	fstl (%ecx)
	fldl 8(%esi,%edx)
	fmull 8(%eax)
	fsubrp %st,%st(1)
	fstl (%ecx)
	fldl 16(%esi,%edx)
	fmull 16(%edi)
	fsubrp %st,%st(1)
	movl $3,%edx
	fstpl (%ecx)
	incl %ebp
	cmpl $2,%ebp
	jbe .L656
	movl 60(%esp),%ebp
	cmpl nmonomer,%ebp
	ja .L664
	movl new_monomer,%eax
	movl monomer,%ecx
	movl %eax,96(%esp)
	leal 480(%esp),%edx
	movl %edx,84(%esp)
	movl %ecx,92(%esp)
	addl $16,%ecx
	movl %ecx,52(%esp)
	.p2align 4,,7
.L666:
	movl 96(%esp),%ebx
	leal 0(,%ebp,8),%eax
	movl %eax,%edx
	subl %ebp,%edx
	leal (%ebx,%edx,8),%ecx
	movl %eax,%ebx
	fldl 544(%esp)
	fstl 32(%ecx)
	movl 92(%esp),%eax
	addl $16,%eax
	leal (%eax,%edx,8),%edx
	movl %edx,%eax
	movl 84(%esp),%esi
	fldl (%esi)
	fmull (%edx)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldl 8(%esi)
	fmull 8(%edx)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldl 16(%esi)
	fmull 16(%eax)
	faddp %st,%st(1)
	fstl 32(%ecx)
	fldz
	fcomp %st(1)
	fnstsw %ax
	andb $69,%ah
	je .L772
	cmpl $2,plate_type
	jne .L773
	fcompl plate_gap
	fnstsw %ax
	andb $69,%ah
	decb %ah
	cmpb $64,%ah
	jb .L672
	jmp .L673
.L772:
	fstp %st(0)
	.p2align 4,,7
.L673:
	incl fail_core
	jmp .L543
.L773:
	fstp %st(0)
	.p2align 4,,7
.L672:
	movl 96(%esp),%ecx
	movl %ebx,%edx
	subl %ebp,%edx
	leal 0(,%edx,8),%eax
	leal (%ecx,%eax),%esi
	fldl 528(%esp)
	fstpl 16(%esi)
	fldl 536(%esp)
	fstpl 24(%esi)
	movl 52(%esp),%ebx
	leal 456(%esp),%edi
	addl new_monomer,%eax
	leal (%ebx,%edx,8),%edx
	movl %edx,%ecx
	movl 88(%esp),%ebx
	fldl (%ebx)
	fmull (%edx)
	faddl 16(%eax)
	fstl 16(%eax)
	fldl 456(%esp)
	fmull (%edx)
	faddl 24(%eax)
	addl $8,%edx
	fstl 24(%eax)
	fldl 8(%ebx)
	fmull (%edx)
	faddp %st,%st(2)
	fxch %st(1)
	fstl 16(%eax)
	fldl 8(%edi)
	fmull (%edx)
	faddp %st,%st(2)
	fxch %st(1)
	fstl 24(%eax)
	fldl 16(%ebx)
	fmull 16(%ecx)
	faddp %st,%st(2)
	fxch %st(1)
	fstpl 16(%eax)
	fldl 16(%edi)
	fmull 16(%ecx)
	faddp %st,%st(1)
	fstpl 24(%eax)
	fldl 32(%esi)
	fmull inverse_grid_spacing
	fnstcw 198(%esp)
	movw 198(%esp),%di
	orw $3072,%di
	movw %di,196(%esp)
	fldcw 196(%esp)
	fistpll 200(%esp)
	movl 200(%esp),%eax
	movl 204(%esp),%edx
	fldcw 198(%esp)
	movl %eax,%edx
	leal 0(,%edx,8),%eax
	addl steric_potential,%eax
	fldl -8(%esi)
	faddl (%eax)
	incl %ebp
	fstpl 48(%esi)
	cmpl nmonomer,%ebp
	jbe .L666
	.p2align 4,,7
.L664:
	movl nmonomer,%ecx
	sall $3,%ecx
	subl nmonomer,%ecx
	sall $3,%ecx
	movl %ecx,%eax
	addl new_monomer,%eax
	sall $3,%edx
	fldl 32(%eax)
	fsubl -24(%eax)
	addl electric_field,%edx
	fmull (%edx)
	fmull 40(%eax)
	fsubrl 48(%eax)
	addl monomer,%ecx
	fstl 48(%eax)
	fsubl 48(%ecx)
	fldz
	fcomp %st(1)
	fnstsw %ax
	andb $5,%ah
	je .L774
	movl seed,%eax
	leal (%eax,%eax,8),%ecx
	leal (%eax,%ecx,2),%ecx
	sall $3,%ecx
	subl %eax,%ecx
	sall $4,%ecx
	addl $374441,%ecx
	movl $635428519,%ebx
	movl %ebx,%eax
	mull %ecx
	fchs
	movl %edx,%ebx
	shrl $18,%ebx
	movl %ebx,%edx
	sall $5,%edx
	subl %ebx,%edx
	leal (%ebx,%edx,4),%edx
	movl %edx,%eax
	sall $4,%eax
	subl %edx,%eax
	movl %eax,%edx
	sall $4,%edx
	subl %eax,%edx
	movl %edx,%eax
	sall $6,%eax
	subl %edx,%eax
	subl %eax,%ecx
	movl %ecx,%eax
	xorl %edx,%edx
	movl %eax,164(%esp)
	movl %edx,168(%esp)
	fildll 164(%esp)
	movl %ecx,seed
	fmull .LC55
	fxch %st(1)
#APP
	fldl2e			# e^x = 2^(x * log2(e))
	fmul	%st(1)		# x * log2(e)
	fst	%st(1)
	frndint			# int(x * log2(e))
	fxch
	fsub	%st(1)		# fract(x * log2(e))
	f2xm1			# 2^(fract(x * log2(e))) - 1
	
#NO_APP
	fld1
	faddp %st,%st(1)
#APP
	fscale
#NO_APP
	fstp %st(1)
	fstpl 132(%esp)
	fldl 132(%esp)
	fcompp
	fnstsw %ax
	andb $5,%ah
	je .L680
	incl fail_swap
	jmp .L543
.L774:
	fstp %st(0)
	.p2align 4,,7
.L680:
	movl new_monomer,%edx
	movl monomer,%eax
	movl %eax,new_monomer
	movl %edx,monomer
.L543:
	popl %ebx
	popl %esi
	popl %edi
	popl %ebp
	addl $588,%esp
	ret

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]