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