Segher Boessenkool schrieb am Die, 15 Feb 2000:
> > > > 0x805e2cc <calc_xmin+460>: fldl 0xfffffff0(%ebp)
>
> It loads from stack, offset -0x10; so it's a local variable.
>
> > --> for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ ){
>
> Don't think so, no floats involved here.
>
> Ciao,
>
> Segher
OK, it was compiled with the following options using gcc 2.95.2
CC_OPTS = -UNDEBUG -O -Wall -g -DABORTFP
and due to some instruction reordering (-O turns optimization on) this
instruction made its way there.
Attached is the assembler code of calc_xmin, search for the following:
.stabn 68,0,746,.LM303-calc_xmin
I marked the exact position where Lame throws this SIGFPE.
Robert
.stabs "calc_xmin:F(0,1)",36,0,708,calc_xmin
.stabs "xr:p(0,31)",160,0,706,8
.stabs "ratio:p(0,40)=*(67,15)",160,0,706,12
.stabs "cod_info:p(0,30)",160,0,707,16
.stabs "l3_xmin:p(0,41)=*(67,11)",160,0,707,20
.globl calc_xmin
.type calc_xmin,@function
calc_xmin:
.stabn 68,0,708,.LM273-calc_xmin
.LM273:
.stabn 68,0,709,.LM274-calc_xmin
.LM274:
.LBB45:
pushl %ebp
movl %esp,%ebp
subl $60,%esp
pushl %edi
pushl %esi
pushl %ebx
movl $0,-24(%ebp)
.stabn 68,0,712,.LM275-calc_xmin
.LM275:
cmpl $0,gf+124
je .L915
.stabn 68,0,713,.LM276-calc_xmin
.LM276:
movl 16(%ebp),%eax
movl 84(%eax),%ecx
cmpl $11,%ecx
jg .L917
movl 20(%ebp),%edi
addl $168,%edi
.p2align 4,,7
.L919:
.stabn 68,0,714,.LM277-calc_xmin
.LM277:
xorl %ebx,%ebx
leal (%ecx,%ecx,2),%eax
leal 0(,%eax,8),%esi
leal 0(,%ecx,8),%edx
.p2align 4,,7
.L923:
.stabn 68,0,715,.LM278-calc_xmin
.LM278:
leal (%esi,%ebx,8),%eax
fldl ATH_s(%edx)
fstpl (%eax,%edi)
.stabn 68,0,714,.LM279-calc_xmin
.LM279:
incl %ebx
cmpl $2,%ebx
jle .L923
.stabn 68,0,713,.LM280-calc_xmin
.LM280:
incl %ecx
cmpl $11,%ecx
jle .L919
.L917:
.stabn 68,0,716,.LM281-calc_xmin
.LM281:
xorl %ecx,%ecx
movl 16(%ebp),%edx
cmpl 80(%edx),%ecx
jae .L931
movl $ATH_l,%edx
.p2align 4,,7
.L929:
.stabn 68,0,717,.LM282-calc_xmin
.LM282:
leal 0(,%ecx,8),%eax
fldl (%eax,%edx)
movl 20(%ebp),%ebx
fstpl (%eax,%ebx)
.stabn 68,0,716,.LM283-calc_xmin
.LM283:
incl %ecx
movl 16(%ebp),%edi
cmpl 80(%edi),%ecx
jb .L929
.stabn 68,0,719,.LM284-calc_xmin
.LM284:
jmp .L931
.p2align 4,,7
.L915:
.stabn 68,0,721,.LM285-calc_xmin
.LM285:
movl 16(%ebp),%eax
movl 84(%eax),%ecx
cmpl $11,%ecx
jg .L933
flds masking_lower
flds -8(%ebp)
fldl -16(%ebp)
.p2align 4,,7
.L935:
.stabn 68,0,722,.LM286-calc_xmin
.LM286:
movl scalefac_band+92(,%ecx,4),%edx
movl %edx,-40(%ebp)
.stabn 68,0,723,.LM287-calc_xmin
.LM287:
movl scalefac_band+96(,%ecx,4),%esi
.stabn 68,0,724,.LM288-calc_xmin
.LM288:
movl %esi,%ebx
subl %edx,%ebx
movl %ebx,-20(%ebp)
.stabn 68,0,725,.LM289-calc_xmin
.LM289:
xorl %ebx,%ebx
leal (%ecx,%ecx,2),%edi
movl %edi,-28(%ebp)
movl %edi,%eax
movl %eax,-32(%ebp)
leal 0(,%ecx,8),%edx
movl %edx,-36(%ebp)
.p2align 4,,7
.L939:
.stabn 68,0,726,.LM290-calc_xmin
.LM290:
fldz
movl -40(%ebp),%edx
cmpl %esi,%edx
jge .L941
.p2align 4,,7
.L943:
.stabn 68,0,727,.LM291-calc_xmin
.LM291:
leal (%edx,%edx,2),%eax
addl %ebx,%eax
.stabn 68,0,728,.LM292-calc_xmin
.LM292:
movl 8(%ebp),%edi
fldl (%edi,%eax,8)
fmul %st(0),%st
.stabn 68,0,729,.LM293-calc_xmin
.LM293:
faddp %st,%st(1)
.stabn 68,0,726,.LM294-calc_xmin
.LM294:
incl %edx
cmpl %esi,%edx
jl .L943
.L941:
.stabn 68,0,731,.LM295-calc_xmin
.LM295:
fildl -20(%ebp)
fdivrp %st,%st(1)
.stabn 68,0,733,.LM296-calc_xmin
.LM296:
movl -28(%ebp),%eax
sall $3,%eax
leal (%eax,%ebx,8),%eax
movl %eax,-44(%ebp)
movl 12(%ebp),%edx
fldl 624(%eax,%edx)
.stabn 68,0,734,.LM297-calc_xmin
.LM297:
fldz
fucomp %st(1)
fnstsw %ax
andb $69,%ah
cmpb $64,%ah
je .L945
.stabn 68,0,735,.LM298-calc_xmin
.LM298:
fld %st(1)
movl -44(%ebp),%edi
fmull 168(%edi,%edx)
fmul %st(5),%st
fdivp %st,%st(1)
.L945:
.stabn 68,0,740,.LM299-calc_xmin
.LM299:
movl -32(%ebp),%eax
sall $3,%eax
leal (%eax,%ebx,8),%eax
movl %eax,-48(%ebp)
movl 20(%ebp),%eax
addl $168,%eax
movl %eax,-44(%ebp)
movl $ATH_s,%edx
movl -36(%ebp),%edi
fldl (%edi,%edx)
fld %st(1)
fxch %st(1)
fcom %st(2)
fnstsw %ax
andb $69,%ah
fstp %st(2)
jne .L967
fstp %st(0)
jmp .L946
.L967:
fstp %st(1)
.L946:
movl -44(%ebp),%edx
movl -48(%ebp),%edi
fstpl (%edi,%edx)
.stabn 68,0,742,.LM300-calc_xmin
.LM300:
movl $ATH_s,%eax
movl -36(%ebp),%edx
fcompl (%edx,%eax)
fnstsw %ax
andb $69,%ah
jne .L938
incl -24(%ebp)
.stabn 68,0,725,.LM301-calc_xmin
.LM301:
.L938:
incl %ebx
cmpl $2,%ebx
jle .L939
.stabn 68,0,721,.LM302-calc_xmin
.LM302:
incl %ecx
cmpl $11,%ecx
jle .L935
fstp %st(2)
fxch %st(1)
fstpl -16(%ebp)
fstps -8(%ebp)
.L933:
.stabn 68,0,746,.LM303-calc_xmin
.LM303:
xorl %ecx,%ecx
movl 16(%ebp),%ebx
cmpl 80(%ebx),%ecx
jae .L931
movl $ATH_l,%ebx
flds masking_lower
flds -8(%ebp)
fldl -16(%ebp) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.p2align 4,,7
.L954:
.stabn 68,0,747,.LM304-calc_xmin
.LM304:
movl scalefac_band(,%ecx,4),%edi
movl %edi,-40(%ebp)
.stabn 68,0,748,.LM305-calc_xmin
.LM305:
movl scalefac_band+4(,%ecx,4),%esi
.stabn 68,0,749,.LM306-calc_xmin
.LM306:
movl %esi,%eax
subl %edi,%eax
movl %eax,-20(%ebp)
.stabn 68,0,751,.LM307-calc_xmin
.LM307:
fldz
movl %edi,%edx
cmpl %esi,%edx
jge .L956
.p2align 4,,7
.L958:
.stabn 68,0,752,.LM308-calc_xmin
.LM308:
movl 8(%ebp),%edi
fldl (%edi,%edx,8)
fmul %st(0),%st
.stabn 68,0,753,.LM309-calc_xmin
.LM309:
faddp %st,%st(1)
.stabn 68,0,751,.LM310-calc_xmin
.LM310:
incl %edx
cmpl %esi,%edx
jl .L958
.L956:
.stabn 68,0,755,.LM311-calc_xmin
.LM311:
fildl -20(%ebp)
fdivrp %st,%st(1)
.stabn 68,0,757,.LM312-calc_xmin
.LM312:
leal 0(,%ecx,8),%esi
movl 12(%ebp),%eax
fldl 456(%esi,%eax)
.stabn 68,0,758,.LM313-calc_xmin
.LM313:
fldz
fucomp %st(1)
fnstsw %ax
andb $69,%ah
cmpb $64,%ah
je .L960
.stabn 68,0,759,.LM314-calc_xmin
.LM314:
fld %st(1)
movl 12(%ebp),%edx
fmull (%esi,%edx)
fmul %st(5),%st
fdivp %st,%st(1)
.L960:
.stabn 68,0,764,.LM315-calc_xmin
.LM315:
leal 0(,%ecx,8),%esi
fldl (%esi,%ebx)
fld %st(1)
fxch %st(1)
fcom %st(2)
fnstsw %ax
andb $69,%ah
fstp %st(2)
jne .L968
fstp %st(0)
jmp .L961
.L968:
fstp %st(1)
.L961:
movl 20(%ebp),%edx
fstpl (%esi,%edx)
.stabn 68,0,766,.LM316-calc_xmin
.LM316:
fcompl (%ebx,%ecx,8)
fnstsw %ax
andb $69,%ah
jne .L953
incl -24(%ebp)
.stabn 68,0,746,.LM317-calc_xmin
.LM317:
.L953:
incl %ecx
movl 16(%ebp),%edx
cmpl 80(%edx),%ecx
jb .L954
fstp %st(2)
fxch %st(1)
fstpl -16(%ebp)
fstps -8(%ebp)
.L931:
.stabn 68,0,769,.LM318-calc_xmin
.LM318:
movl -24(%ebp),%eax
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.stabn 68,0,770,.LM319-calc_xmin
.LM319:
.LBE45:
.Lfe10:
.size calc_xmin,.Lfe10-calc_xmin
.stabs "start:(0,1)",128,0,709,-40
.stabs "end:r(0,1)",64,0,709,6
.stabs "bw:(0,1)",128,0,709,-20
.stabs "sfb:r(0,1)",64,0,709,1
.stabs "l:r(0,1)",64,0,709,2
.stabs "b:r(0,1)",64,0,709,3
.stabs "ath_over:(0,1)",128,0,709,-24
.stabs "en0:r(19,2)",64,0,710,14
.stabs "xmin:r(19,2)",64,0,710,13
.stabs "ener:r(19,2)",64,0,710,11
.stabn 192,0,0,.LBB45-calc_xmin
.stabn 224,0,0,.LBE45-calc_xmin
.Lscope9:
.stabs "",36,0,0,.Lscope9-calc_xmin
.align 4
--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )