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


> sorry for my testcase, I had rewriten it to easy to understand, but on the
> contrary...
> Here is my true test case using printf:
> ----main.c
> #include <stdio.h>
> #include <stdlib.h>
> 
> int main()
> {
>         float i=1.0;
>         printf("%f",i);
>         return 0;
> }
> ----main.c
> 
> here is generated by arm-linux-gcc -S main.c -o main.s
> ----main.s
> <sniz>
> main:
>           @ args = 0, pretend = 0, frame = 4
>           @ frame_needed = 1, uses_anonymous_args = 0
>           mov     ip, sp
>           stmfd   sp!, {r4, fp, ip, lr, pc}
>           sub     fp, ip, #4
>           sub     sp, sp, #4
>           ldr     r3, .L2 @ float
>           str     r3, [fp, #-20]  @ float
>           ldr     r0, [fp, #-20]  @ float
>           bl      __extendsfdf2
>           mov     r4, r1
>           mov     r3, r0
>           ldr     r0, .L2+4
>           mov     r2, r4
>           mov     r1, r3
>           bl      printf
>           mov     r3, #0
>           mov     r0, r3
> <sniz>
> -----main.s
> 
> if I arm-linux-gcc main.s -o test
> then execute test on pxa board, it will output: -1.999744
> 
> but if I modified the two lines before "bl printf" in main.s to:
> mov	r2, r3
> mov	r3, r4
> then compile main.s and execute,
> it will print right result: 1.00000
> 
> so conclusion:
> my toolchain must has a problem of float param passing, seemly related to
> float word order. so I want to dig into my gcc source tree to find where is
> responsible for generating this wrong asm code.
> I hope this time it's clearer :)
> 
> and Dan, I think the most recently snapshot ptxdist still has this problem
> :(

The code above is correct.  You should not be doing a word order swap 
before the call to printf.

So I think the problem must be in your printf library function (or a 
subroutine of that).  Two possibilities here:

1) The library was compiled without soft-vfp (it for traditional FPA 
format floats).
2) The library needs porting to support soft-vfp (there will probably be 
#ifdef __arm__ somewhere in the library, where the code will then assume 
that you have FPA format floats).

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]