OSDN Git Service

Patch by Joseph S. Myers to add support for ARM EABI
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / arm / setjmp.S
index 4048d79..4ee22fc 100644 (file)
 .type __sigsetjmp,%function
 .align 4
 __sigsetjmp:
+       mov     ip, r0
+
        /* Save registers */
+       stmia   ip!, {v1-v6, sl, fp, sp, lr}
 #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
-# ifdef __MAVERICK__
-       cfstrd  mvd4,  [r0], #8 ; nop
-       cfstrd  mvd5,  [r0], #8 ; nop
-       cfstrd  mvd6,  [r0], #8 ; nop
-       cfstrd  mvd7,  [r0], #8 ; nop
-       cfstrd  mvd8,  [r0], #8 ; nop
-       cfstrd  mvd9,  [r0], #8 ; nop
-       cfstrd  mvd10, [r0], #8 ; nop
-       cfstrd  mvd11, [r0], #8 ; nop
-       cfstrd  mvd12, [r0], #8 ; nop
-       cfstrd  mvd13, [r0], #8 ; nop
-       cfstrd  mvd14, [r0], #8 ; nop
-       cfstrd  mvd15, [r0], #8
-# else
-       sfmea   f4, 4, [r0]!
-# endif
-#else
-# ifdef __MAVERICK__
-       add     r0, r0, #96             /* skip the FP registers */
+# ifdef __VFP_FP__
+       /* Store the VFP registers.  */
+       /* Following instruction is fstmiax ip!, {d8-d15}.  */
+       stc     p11, cr8, [r12], #68
+       /* Store the floating-point status register.  */
+       /* Following instruction is fmrx r2, fpscr.  */
+       mrc     p10, 7, r2, cr1, cr0, 0
+       str     r2, [ip], #4
+# elif defined __MAVERICK__
+       cfstrd  mvd4,  [ip], #8 ; nop
+       cfstrd  mvd5,  [ip], #8 ; nop
+       cfstrd  mvd6,  [ip], #8 ; nop
+       cfstrd  mvd7,  [ip], #8 ; nop
+       cfstrd  mvd8,  [ip], #8 ; nop
+       cfstrd  mvd9,  [ip], #8 ; nop
+       cfstrd  mvd10, [ip], #8 ; nop
+       cfstrd  mvd11, [ip], #8 ; nop
+       cfstrd  mvd12, [ip], #8 ; nop
+       cfstrd  mvd13, [ip], #8 ; nop
+       cfstrd  mvd14, [ip], #8 ; nop
+       cfstrd  mvd15, [ip], #8
 # else
-       add     r0, r0, #48             /* skip the FP registers */
+       sfmea   f4, 4, [ip]!
 # endif
 #endif
-       stmia   r0, {v1-v6, sl, fp, sp, lr}
-
-       /* Restore pointer to jmp_buf */
-#ifdef __MAVERICK__
-       sub     r0, r0, #96
-#else
-       sub     r0, r0, #48
-#endif
 
        /* Make a tail call to __sigjmp_save; it takes the same args.  */
 #ifdef __PIC__