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]

ARM: Code generation problem w/double return values (Netwinder FPE)


Hello again,

I am getting much closer to a solution.  I have one problem remaining,
which is that the wrong code is being generated to handle double return
values.  I have a working case using the self-hosted gcc on the
netwinder I have used to make the following comparison.

Here is the test code:

 val = 10.0;
 printf("val = %g\n", val);
 result = log(val);

Here is the assembler code the netwinder generates:

        bl      log
        stfd    f0, [sp, #-8]!
        ldmfd   sp!, {r3, r4}
        str     r3, [fp, #-32]
        str     r4, [fp, #-28]

This code works correctly on the netwinder and produces the desired
results. 

Next, here is the code that my "broken" arm-elf-linux-as generates
(hosted on x86linux):

        bl      log
        mov     r2, r1
        mov     r1, r0
        mvn     r3, #15
        sub     r0, fp, #16
        add     r3, r0, r3

So it appears that the arm-elf-linux-as is generating code that returns
the double return value from the wrong place.  Presumably, the
arm-elf-linux-as cross-compiler/assembler should generate the same
assembler code as the first snippet, right??

What should my configuration settings be for gcc/gas in my
cross-compiler build be to get this correct?

Please advise - I'm now VERY close... I think ;-)

TIA,
craig vanderborgh
voxware incorporated




------
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]