[patch] ARM setjmp/longjmp fix for iWMMXt
Joseph S. Myers
joseph at codesourcery.com
Fri Aug 11 10:18:08 UTC 2006
This patch makes the ARM setjmp/longjmp save and restore iWMMXt registers.
Index: libc/sysdeps/linux/arm/setjmp.S
===================================================================
--- libc/sysdeps/linux/arm/setjmp.S (revision 15800)
+++ libc/sysdeps/linux/arm/setjmp.S (working copy)
@@ -56,6 +56,16 @@
sfmea f4, 4, [ip]!
# endif
#endif
+#ifdef __IWMMXT__
+ /* Save the call-preserved iWMMXt registers. */
+ /* Following instructions are wstrd wr10, [ip], #8 (etc.) */
+ stcl p1, cr10, [r12], #8
+ stcl p1, cr11, [r12], #8
+ stcl p1, cr12, [r12], #8
+ stcl p1, cr13, [r12], #8
+ stcl p1, cr14, [r12], #8
+ stcl p1, cr15, [r12], #8
+#endif
/* Make a tail call to __sigjmp_save; it takes the same args. */
#ifdef __PIC__
Index: libc/sysdeps/linux/arm/bits/setjmp.h
===================================================================
--- libc/sysdeps/linux/arm/bits/setjmp.h (revision 15800)
+++ libc/sysdeps/linux/arm/bits/setjmp.h (working copy)
@@ -35,7 +35,7 @@
are occupied by v1-v6, sl, fp, sp, pc, d8-d15, and fpscr. (Note
that d8-15 require 17 words, due to the use of fstmx.) */
typedef int __jmp_buf[64] __attribute__((aligned (8)));
-#elif defined __MAVERICK__
+#elif defined __MAVERICK__ || defined __IWMMXT__
typedef int __jmp_buf[34];
#else
typedef int __jmp_buf[22];
Index: libc/sysdeps/linux/arm/__longjmp.S
===================================================================
--- libc/sysdeps/linux/arm/__longjmp.S (revision 15800)
+++ libc/sysdeps/linux/arm/__longjmp.S (working copy)
@@ -60,6 +60,16 @@
lfmfd f4, 4, [ip] ! /* load the floating point regs */
# endif
#endif
+#ifdef __IWMMXT__
+ /* Restore the call-preserved iWMMXt registers. */
+ /* Following instructions are wldrd wr10, [ip], #8 (etc.) */
+ ldcl p1, cr10, [r12], #8
+ ldcl p1, cr11, [r12], #8
+ ldcl p1, cr12, [r12], #8
+ ldcl p1, cr13, [r12], #8
+ ldcl p1, cr14, [r12], #8
+ ldcl p1, cr15, [r12], #8
+#endif
#if defined(__USE_BX__)
bx lr
--
Joseph S. Myers
joseph at codesourcery.com
More information about the uClibc
mailing list