This is the mail archive of the
glibc-linux@ricardo.ecn.wfu.edu
mailing list for the glibc project.
Re: Speed under gcc/glibc2 vs gcc/glibc1
- To: glibc-linux at ricardo dot ecn dot wfu dot edu
- Subject: Re: Speed under gcc/glibc2 vs gcc/glibc1
- From: David Ronis <ronis at ronispc dot chem dot mcgill dot ca>
- Date: Wed, 29 Sep 1999 13:58:17 -0400
- Reply-To: glibc-linux at ricardo dot ecn dot wfu dot edu
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