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