This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/19571] floating point registers not preserved during function call
- From: "rearnsha at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Jan 2005 10:36:37 -0000
- Subject: [Bug target/19571] floating point registers not preserved during function call
- References: <20050121234646.19571.jack@cs.york.ac.uk>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From rearnsha at gcc dot gnu dot org 2005-01-22 10:36 -------
The code generated looks correct to me.
The generated assembler that you've give for __cos is clearly saving and
restoring f4-f7.
__cos:
// Saves the integer registers
ca4c: e92d4070 stmdb sp!, {r4, r5, r6, lr}
// Does some processing that does not involve floating point
ca50: e3c02102 bic r2, r0, #-2147483648 ; 0x80000000
ca54: e35205f9 cmp r2, #1044381696 ; 0x3e400000
ca58: e1a05001 mov r5, r1
ca5c: e1a04000 mov r4, r0
// Sets f0: OK, since f0 is call-clobbered.
ca60: be008189 mvfltd f0, #1.0
// This instruction saves 4 floating point registers, starting with f4 on the stack
ca64: ed2d420c sfm f4, 4, [sp, #-48]!
... // Rest of function
// And this instruction loads them back again.
ccec: ecbd420c lfm f4, 4, [sp], #48
ccf0: e8bd8070 ldmia sp!, {r4, r5, r6, pc}
As far as I can see this is the only exit point from the generated code.
I think you need to check that the floating point emulator in your kernel is
functioning correctly. Particularly for lfm/sfm.
R.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19571