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/ )

Reply via email to