svn commit: trunk/uClibc/libc/sysdeps/linux/bfin: bits

vapier at uclibc.org vapier at uclibc.org
Sat Sep 15 11:02:37 UTC 2007


Author: vapier
Date: 2007-09-15 04:02:36 -0700 (Sat, 15 Sep 2007)
New Revision: 19848

Log:
use gcc input constraints to avoid often duplicated reloads when making syscalls

Modified:
   trunk/uClibc/libc/sysdeps/linux/bfin/__longjmp.S
   trunk/uClibc/libc/sysdeps/linux/bfin/bits/syscalls.h
   trunk/uClibc/libc/sysdeps/linux/bfin/brk.c
   trunk/uClibc/libc/sysdeps/linux/bfin/clone.c


Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/bfin/__longjmp.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/bfin/__longjmp.S	2007-09-15 10:57:09 UTC (rev 19847)
+++ trunk/uClibc/libc/sysdeps/linux/bfin/__longjmp.S	2007-09-15 11:02:36 UTC (rev 19848)
@@ -98,9 +98,9 @@
 	P0 = [SP++];
 
 	CC = R0 == 0;
-	IF !CC JUMP finished;
+	IF !CC JUMP .Lfinished;
 	R0 = 1;
-finished:
+.Lfinished:
 	RTS;
 .size ___longjmp,.-___longjmp
 

Modified: trunk/uClibc/libc/sysdeps/linux/bfin/bits/syscalls.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/bfin/bits/syscalls.h	2007-09-15 10:57:09 UTC (rev 19847)
+++ trunk/uClibc/libc/sysdeps/linux/bfin/bits/syscalls.h	2007-09-15 11:02:36 UTC (rev 19848)
@@ -39,12 +39,10 @@
 type name(void) {							\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"p0 = %1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i" (__NR_##name)					\
-		: "memory","CC","R0","P0");				\
+		: "=q0" (__res)						\
+		: "qA" (__NR_##name)					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -52,14 +50,11 @@
 type name(type1 arg1) {							\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r0=%2;\n\t"						\
-		"p0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i" (__NR_##name),					\
-		  "rm" ((long)(arg1))					\
-		: "memory","CC","R0","P0");				\
+		: "=q0" (__res)						\
+		: "qA" (__NR_##name),					\
+		  "q0" ((long)(arg1))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -67,16 +62,13 @@
 type name(type1 arg1,type2 arg2) {					\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r1=%3;\n\t"						\
-		"r0=%2;\n\t"						\
-		"p0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
 		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i" (__NR_##name),					\
-		  "rm" ((long)(arg1)),					\
-		  "rm" ((long)(arg2))					\
-		: "memory","CC","R0","R1","P0");			\
+		: "=q0" (__res)						\
+		: "qA" (__NR_##name),					\
+		  "q0" ((long)(arg1)),					\
+		  "q1" ((long)(arg2))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -84,18 +76,13 @@
 type name(type1 arg1,type2 arg2,type3 arg3) {				\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r2=%4;\n\t"						\
-		"r1=%3;\n\t"						\
-		"r0=%2;\n\t"						\
-		"p0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i"   (__NR_##name),					\
-		  "rm"   ((long)(arg1)),				\
-		  "rm"   ((long)(arg2)),				\
-		  "rm"   ((long)(arg3))					\
-		: "memory","CC","R0","R1","R2","P0");			\
+		: "=q0" (__res)						\
+		: "qA"   (__NR_##name),					\
+		  "q0"   ((long)(arg1)),				\
+		  "q1"   ((long)(arg2)),				\
+		  "q2"   ((long)(arg3))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -103,20 +90,14 @@
 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {		\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r3=%5;\n\t"						\
-		"r2=%4;\n\t"						\
-		"r1=%3;\n\t"						\
-		"r0=%2;\n\t"						\
-		"p0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i"  (__NR_##name),					\
-		  "rm"  ((long)(arg1)),					\
-		  "rm"  ((long)(arg2)),					\
-		  "rm"  ((long)(arg3)),					\
-		  "rm"  ((long)(arg4))					\
-		: "memory","CC","R0","R1","R2","R3","P0");		\
+		: "=q0" (__res)						\
+		: "qA"  (__NR_##name),					\
+		  "q0"  ((long)(arg1)),					\
+		  "q1"  ((long)(arg2)),					\
+		  "q2"  ((long)(arg3)),					\
+		  "q3"  ((long)(arg4))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -124,22 +105,15 @@
 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) {	\
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r4=%6;\n\t"						\
-		"r3=%5;\n\t"						\
-		"r2=%4;\n\t"						\
-		"r1=%3;\n\t"						\
-		"r0=%2;\n\t"						\
-		"P0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i"  (__NR_##name),					\
-		  "rm"  ((long)(arg1)),					\
-		  "rm"  ((long)(arg2)),					\
-		  "rm"  ((long)(arg3)),					\
-		  "rm"  ((long)(arg4)),					\
-		  "rm"  ((long)(arg5))					\
-		: "memory","CC","R0","R1","R2","R3","R4","P0");		\
+		: "=q0" (__res)						\
+		: "qA"  (__NR_##name),					\
+		  "q0"  ((long)(arg1)),					\
+		  "q1"  ((long)(arg2)),					\
+		  "q2"  ((long)(arg3)),					\
+		  "q3"  ((long)(arg4)),					\
+		  "q4"  ((long)(arg5))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 
@@ -147,24 +121,16 @@
 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \
 	long __res;							\
 	__asm__ __volatile__ (						\
-		"r5=%7;\n\t"						\
-		"r4=%6;\n\t"						\
-		"r3=%5;\n\t"						\
-		"r2=%4;\n\t"						\
-		"r1=%3;\n\t"						\
-		"r0=%2;\n\t"						\
-		"P0=%1;\n\t"						\
 		"excpt 0;\n\t"						\
-		"%0=r0;\n\t"						\
-		: "=da" (__res)						\
-		: "i"  (__NR_##name),					\
-		  "rm"  ((long)(arg1)),					\
-		  "rm"  ((long)(arg2)),					\
-		  "rm"  ((long)(arg3)),					\
-		  "rm"  ((long)(arg4)),					\
-		  "rm"  ((long)(arg5)),					\
-		  "rm"  ((long)(arg6))					\
-		: "memory","CC","R0","R1","R2","R3","R4","R5","P0");	\
+		: "=q0" (__res)						\
+		: "qA"  (__NR_##name),					\
+		  "q0"  ((long)(arg1)),					\
+		  "q1"  ((long)(arg2)),					\
+		  "q2"  ((long)(arg3)),					\
+		  "q3"  ((long)(arg4)),					\
+		  "q4"  ((long)(arg5)),					\
+		  "q5"  ((long)(arg6))					\
+		: "memory","CC");					\
 	__syscall_return(type,__res);					\
 }
 

Modified: trunk/uClibc/libc/sysdeps/linux/bfin/brk.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/bfin/brk.c	2007-09-15 10:57:09 UTC (rev 19847)
+++ trunk/uClibc/libc/sysdeps/linux/bfin/brk.c	2007-09-15 11:02:36 UTC (rev 19848)
@@ -19,11 +19,9 @@
 
 	__asm__ __volatile__(
 		"P0 = %2;\n\t"
-		"R0 = %1;\n\t"
 		"excpt 0;\n\t"
-		"%0 = R0;\n\t"
-		: "=r"(newbrk)
-		: "r"(addr), "i" (__NR_brk): "P0" );
+		: "=q0" (newbrk)
+		: "q0" (addr), "i" (__NR_brk): "P0" );
 
     __curbrk = newbrk;
 

Modified: trunk/uClibc/libc/sysdeps/linux/bfin/clone.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/bfin/clone.c	2007-09-15 10:57:09 UTC (rev 19847)
+++ trunk/uClibc/libc/sysdeps/linux/bfin/clone.c	2007-09-15 11:02:36 UTC (rev 19848)
@@ -19,11 +19,7 @@
 
 #ifdef __BFIN_FDPIC__
 	__asm__ __volatile__ (
-			"r1 = %2;"
-			"r0 = %3;"
-			"P0 = %1;"
 			"excpt 0;"	 /*Call sys_clone*/
-			"%0  = r0;"
 			"cc = r0 == 0;"
 			"if !cc jump .Lxxx;"	/* if (rval != 0) skip to parent */
 			"r0 = %4;"
@@ -35,16 +31,12 @@
 			"p0 = %6;"
 			"excpt 0;"	/* Call sys_exit */
 			".Lxxx: nop;"
-			: "=d" (rval)
-			: "i" (__NR_clone), "a" (child_stack), "a" (flags), "a" (arg), "a" (fn), "i" (__NR_exit)
-			: "CC", "R0", "R1", "P0");
+			: "=q0" (rval)
+			: "qA" (__NR_clone), "q1" (child_stack), "q0" (flags), "a" (arg), "a" (fn), "i" (__NR_exit)
+			: "CC");
 #else
 	__asm__ __volatile__ (
-			"r1 = %2;"
-			"r0 = %3;"
-			"P0 = %1;"
 			"excpt 0;"	 /*Call sys_clone*/
-			"%0  = r0;"
 			"cc = r0 == 0;"
 			"if !cc jump .Lxxx;"	/* if (rval != 0) skip to parent */
 			"r0 = %4;"
@@ -54,9 +46,9 @@
 			"p0 = %6;"
 			"excpt 0;"	/* Call sys_exit */
 			".Lxxx: nop;"
-			: "=d" (rval)
-			: "i" (__NR_clone), "a" (child_stack), "a" (flags), "a" (arg), "a" (fn), "i" (__NR_exit)
-			: "CC", "R0", "R1", "P0");
+			: "=q0" (rval)
+			: "qA" (__NR_clone), "q1" (child_stack), "q0" (flags), "a" (arg), "a" (fn), "i" (__NR_exit)
+			: "CC");
 #endif
 
 	} else {




More information about the uClibc-cvs mailing list