This is the mail archive of the newlib@sourceware.cygnus.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

mn10200/mn10300/AM33: minor space savings


This patch reduces the jmp_buf size to its minimum on mn10200 and
mn10300, and uses post-increment addressing modes on AM33, when saving
and restoring extended registers, which reduces the code size.  Ok to
install?

Index: newlib/ChangeLog
by  Alexandre Oliva  <aoliva@cygnus.com>

	* libc/include/machine/setjmp.h (_JBLEN, mn10200, mn10300):
	Set to 6.
	(_JBLEN, AM33): Reset to 10.
	* libc/machine/mn10300/setjmp.S (setjmp, longjmp): Use
	post-increment when it is worth it, spacewise.

Index: newlib/libc/include/machine/setjmp.h
===================================================================
RCS file: /cvs/cvsfiles/devo/newlib/libc/include/machine/setjmp.h,v
retrieving revision 1.56
diff -u -r1.56 setjmp.h
--- newlib/libc/include/machine/setjmp.h	1999/11/18 22:34:25	1.56
+++ newlib/libc/include/machine/setjmp.h	2000/04/26 05:38:28
@@ -108,8 +108,11 @@
 #endif
 
 #if defined(__mn10300__) || defined(__mn10200__)
-/* A guess */
+#define _JBLEN 6
+#ifdef __AM33__
+#undef _JBLEN
 #define _JBLEN 10
+#endif
 #endif
 
 #ifdef __v850
Index: newlib/libc/machine/mn10300/setjmp.S
===================================================================
RCS file: /cvs/cvsfiles/devo/newlib/libc/machine/mn10300/setjmp.S,v
retrieving revision 1.5
diff -u -r1.5 setjmp.S
--- newlib/libc/machine/mn10300/setjmp.S	1999/12/02 00:41:13	1.5
+++ newlib/libc/machine/mn10300/setjmp.S	2000/04/26 05:38:29
@@ -17,10 +17,11 @@
 	mov sp,a1
 	mov a1,(20,a0)
 #ifdef __AM33__
-	mov r4,(24,a0)
-	mov r5,(28,a0)
-	mov r6,(32,a0)
-	mov r7,(36,a0)
+	add 24,a0
+	mov r4,(a0+)
+	mov r5,(a0+)
+	mov r6,(a0+)
+	mov r7,(a0+)
 #endif
         sub d0,d0
 	rets
@@ -37,10 +38,11 @@
 	mov (20,a0),a1
 	mov a1,sp
 #ifdef __AM33__
-	mov (24,a0),r4
-	mov (28,a0),r5
-	mov (32,a0),r6
-	mov (36,a0),r7
+	add 24,a0
+	mov (a0+),r4
+	mov (a0+),r5
+	mov (a0+),r6
+	mov (a0+),r7
 #endif
 	cmp 0,d1
 	bne L1

-- 
Alexandre Oliva    Enjoy Guaranį, see http://www.ic.unicamp.br/~oliva/
Cygnus Solutions, a Red Hat company        aoliva@{redhat, cygnus}.com
Free Software Developer and Evangelist    CS PhD student at IC-Unicamp
oliva@{lsd.ic.unicamp.br, gnu.org}   Write to mailing lists, not to me

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]