svn commit: trunk/uClibc/libc/sysdeps/linux/arm: bits
kraj at uclibc.org
kraj at uclibc.org
Thu Aug 31 19:49:17 UTC 2006
Author: kraj
Date: 2006-08-31 12:49:16 -0700 (Thu, 31 Aug 2006)
New Revision: 16022
Log:
Fix from Joseph Myers: Save and restore iWMMXt registers in ARM setjmp/longjmp
Modified:
trunk/uClibc/libc/sysdeps/linux/arm/__longjmp.S
trunk/uClibc/libc/sysdeps/linux/arm/bits/setjmp.h
trunk/uClibc/libc/sysdeps/linux/arm/setjmp.S
Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/arm/__longjmp.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/arm/__longjmp.S 2006-08-31 11:39:36 UTC (rev 16021)
+++ trunk/uClibc/libc/sysdeps/linux/arm/__longjmp.S 2006-08-31 19:49:16 UTC (rev 16022)
@@ -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
Modified: trunk/uClibc/libc/sysdeps/linux/arm/bits/setjmp.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/arm/bits/setjmp.h 2006-08-31 11:39:36 UTC (rev 16021)
+++ trunk/uClibc/libc/sysdeps/linux/arm/bits/setjmp.h 2006-08-31 19:49:16 UTC (rev 16022)
@@ -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];
Modified: trunk/uClibc/libc/sysdeps/linux/arm/setjmp.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/arm/setjmp.S 2006-08-31 11:39:36 UTC (rev 16021)
+++ trunk/uClibc/libc/sysdeps/linux/arm/setjmp.S 2006-08-31 19:49:16 UTC (rev 16022)
@@ -53,6 +53,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__
More information about the uClibc-cvs
mailing list