This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: problem while building arm vfp softfloat gcc


> add <addsub@eyou.com> wrote:
> > I'm building a arm-linux-gcc toolchain with soft-vfp support by
> > crosstool-0.27(Thanks to Dan). But generated code cannot execute
> > "printf("%f",1.00)" well, it will output 0.00000.
> > 
> > Then I found gcc doesn't produce right code, it uses wrong registers sequence
> > to pass float argument to function()
> 
> Richard Earnshaw wrote:
> > To the best of my knowledge the only configuration of a released version 
> > of gcc that supports soft-vfp is arm-netbsdelf.
> 
> He's using a patch that adds that, I think.

Ah!  OK, lets take a closer look at the test case.... Hmm, it's broken:

It passes a float to a function that's declared without a prototype, and 
it returns a value from a void function...

Let's fix up the problems...


$ cat foo.c
float foo(float);
int main()
{
        float i=1.0;
        foo(i);
        return 0;
}
float foo( float i )
{
        return i;
}
$ cat foo.s
main:
        @ args = 0, pretend = 0, frame = 4
        @ frame_needed = 0, uses_anonymous_args = 0
        str     lr, [sp, #-4]!
        sub     sp, sp, #4
        ldr     r3, .L2 @ float
        str     r3, [sp, #0]    @ float
        ldr     r0, [sp, #0]    @ float
        bl      foo
        mov     r3, #0
        mov     r0, r3
        add     sp, sp, #4
        ldmfd   sp!, {pc}


Yep, that looks right to me.

R.


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com


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