summary refs log tree commit diff
path: root/ports
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@systemhalted.org>2012-10-29 23:04:43 -0400
committerCarlos O'Donell <carlos@systemhalted.org>2012-10-29 23:11:06 -0400
commit4ebdb0102714696914e9425bf2e4c40666ee9beb (patch)
treed8274b221b3f08ae4c13cb5a1ed85027a1e843b2 /ports
parentf0b8ce0c73a9871c3f90c575c0c8f8c1048371e3 (diff)
downloadglibc-4ebdb0102714696914e9425bf2e4c40666ee9beb.tar.gz
glibc-4ebdb0102714696914e9425bf2e4c40666ee9beb.tar.xz
glibc-4ebdb0102714696914e9425bf2e4c40666ee9beb.zip
hppa: Optimize syscall sequence.
We remove an extraneous nop from the syscall sequence.
No DO_CALL* may end in an instruction with a delay slot.
Diffstat (limited to 'ports')
-rw-r--r--ports/ChangeLog.hppa6
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/sysdep.h14
2 files changed, 10 insertions, 10 deletions
diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa
index 62f41477ee..6d5d5a33c1 100644
--- a/ports/ChangeLog.hppa
+++ b/ports/ChangeLog.hppa
@@ -1,5 +1,11 @@
 2012-10-29  Carlos O'Donell  <carlos@systemhalted.org>
 
+	* sysdeps/unix/sysv/linux/hppa/sysdep.h: Don't include sys/syscall.h.
+	Document nop removal.
+	(PSEUDO): Remove nop.
+	(PSEUDO_NOERRNO): Likeise.
+	(PSEUDO_ERRVAL): Likewise.
+
 	* sysdeps/unix/sysv/linux/hppa/sysdep.h: Remove trailing whitespace.
 
 2012-10-26  Andreas Jaeger  <aj@suse.de>
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h b/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
index 9ef8b50303..5c0db64b7e 100644
--- a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
+++ b/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
@@ -20,7 +20,6 @@
 
 #include <asm/unistd.h>
 #include <sysdeps/generic/sysdep.h>
-#include <sys/syscall.h>
 
 /* In order to get __set_errno() definition in INLINE_SYSCALL.  */
 #ifndef __ASSEMBLER__
@@ -168,9 +167,7 @@
    which means
 	ENTRY(name)
 	DO_CALL(...)
-	nop
-	bv 0(2)
-	nop
+	bv,n 0(2)
 */
 
 #define	PSEUDO(name, syscall_name, args)			\
@@ -178,8 +175,7 @@
   /* If necc. load args from stack */		ASM_LINE_SEP	\
   DOARGS_##args					ASM_LINE_SEP	\
   DO_CALL (syscall_name, args)			ASM_LINE_SEP	\
-  UNDOARGS_##args				ASM_LINE_SEP	\
-  nop						ASM_LINE_SEP
+  UNDOARGS_##args				ASM_LINE_SEP
 
 #define ret \
   /* Return value set by ERRNO code */		ASM_LINE_SEP	\
@@ -194,8 +190,7 @@
   ENTRY_LEAF (name)				ASM_LINE_SEP	\
   DOARGS_##args					ASM_LINE_SEP	\
   DO_CALL_NOERRNO (syscall_name, args)		ASM_LINE_SEP	\
-  UNDOARGS_##args				ASM_LINE_SEP	\
-  nop						ASM_LINE_SEP
+  UNDOARGS_##args				ASM_LINE_SEP
 
 #define ret_NOERRNO ret
 
@@ -209,8 +204,7 @@
   ENTRY_LEAF (name)				ASM_LINE_SEP	\
   DOARGS_##args					ASM_LINE_SEP	\
   DO_CALL_ERRVAL (syscall_name, args)		ASM_LINE_SEP	\
-  UNDOARGS_##args				ASM_LINE_SEP	\
-  nop						ASM_LINE_SEP
+  UNDOARGS_##args				ASM_LINE_SEP
 
 #define ret_ERRVAL ret