From addb5f3176382693f987f0f44f3708f610d2e984 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 12 Jan 2003 19:29:11 +0000 Subject: Update. 2002-01-09 Richard Henderson * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Assume only ret follows pseudo, and thus avoid branch-to-branch in cancel case. Use SYSCALL_ERROR_LABEL. --- .../sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'linuxthreads/sysdeps/unix') diff --git a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h index 18ea29c49f..083db2f39a 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h @@ -33,6 +33,9 @@ # define PSEUDO_PROF # endif +/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END + besides "ret". */ + # undef PSEUDO # define PSEUDO(name, syscall_name, args) \ .globl name; \ @@ -47,7 +50,7 @@ __LABEL(name) \ bne t0, $pseudo_cancel; \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ - bne a3, $syscall_error; \ + bne a3, SYSCALL_ERROR_LABEL; \ __LABEL($pseudo_ret) \ .subsection 2; \ __LABEL($pseudo_cancel) \ @@ -59,13 +62,17 @@ __LABEL($pseudo_cancel) \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ stq v0, 8(sp); \ - stq a3, 16(sp); \ + bne a3, $multi_error; \ + CDISABLE; \ + ldq ra, 0(sp); \ + ldq v0, 8(sp); \ + addq sp, 64, sp; \ + ret; \ +__LABEL($multi_error) \ CDISABLE; \ ldq ra, 0(sp); \ ldq v0, 8(sp); \ - ldq a3, 16(sp); \ addq sp, 64, sp; \ - beq a3, $pseudo_ret; \ __LABEL($syscall_error) \ SYSCALL_ERROR_HANDLER; \ END(name); \ -- cgit v1.2.3