From patchwork Tue Dec 29 11:47:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huang Pei X-Patchwork-Id: 41581 X-Patchwork-Delegate: azanella@linux.vnet.ibm.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 22F623887038; Tue, 29 Dec 2020 11:48:33 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 68A923887016 for ; Tue, 29 Dec 2020 11:48:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 68A923887016 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=huangpei@loongson.cn Received: from localhost.localdomain (unknown [196.245.9.36]) by mail.loongson.cn (Coremail) with SMTP id AQAAf9Dxj8thF+tfe0YHAA--.8248S4; Tue, 29 Dec 2020 19:48:21 +0800 (CST) From: Huang Pei To: Joseph Myers Subject: [PATCH V4 2/2] mips: remove old syscall restart convention Date: Tue, 29 Dec 2020 19:47:41 +0800 Message-Id: <20201229114741.14685-3-huangpei@loongson.cn> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201229114741.14685-1-huangpei@loongson.cn> References: <20201229114741.14685-1-huangpei@loongson.cn> X-CM-TRANSID: AQAAf9Dxj8thF+tfe0YHAA--.8248S4 X-Coremail-Antispam: 1UD129KBjvAXoWfGrW8Ww47tr47Kr4UCFyDKFg_yoW8Ar48Jo Z7Xrs5Jw48Gr48CF98A3y3J39xCry2qr1rtF1DWayxZ3Wxtr4q9a48Ga9xur4fur4jgrWr Xr93K3Z5KFWYqFZxn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYA7AC8VAFwI0_Gr0_Xr1l1xkIjI8I6I8E6xAIw20EY4v20xva j40_Wr0E3s1l1IIY67AEw4v_Jr0_Jr4l82xGYIkIc2x26280x7IE14v26r15M28IrcIa0x kI8VCY1x0267AKxVWUCVW8JwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84AC jcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26F4j6r4UJw A2z4x0Y4vEx4A2jsIE14v26F4UJVW0owA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1l e2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI 8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwAC jcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lc2xSY4AK6xArMxAIw28Icx kI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2Iq xVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrwCI42 IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY 6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aV CY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUboKZJUUUUU== X-CM-SenderInfo: xkxd0whshlqz5rrqw2lrqou0/ X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Huacai Chen , Chenghua Xu , libc-alpha Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Before Linux/MIPS 2.6.36, kernel expected setting syscall number(aka "li v0, #sys_number") right precedes "syscall", so the kernel syscall restart sequence can use CP0 EPC - 4 to restart the syscall, because kernel DID NOT save v0 during syscall handling. Linux 2.6.36 canceled this restriction. See sysdeps/unix/sysv/linux/mips/{mips32,mips64}/sysdep.h Since glibc-2.24 the minimum kernel version is 3.2(much higer than 2.6.36), I think it is OK to remove the ugly register spill in syscall.S just because of the old convention This also remove the unaligned stack pointer. For consistency, it also remove all other old syscall restart sequence. --- sysdeps/unix/sysv/linux/mips/mips32/sysdep.h | 89 ++++----------- sysdeps/unix/sysv/linux/mips/mips64/syscall.S | 14 +-- sysdeps/unix/sysv/linux/mips/mips64/sysdep.h | 103 +++++------------- 3 files changed, 49 insertions(+), 157 deletions(-) diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h index 49856c3249..601bd9abc7 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h @@ -60,18 +60,7 @@ GIT repository as commit 96187fb0bc30cd7919759d371d810e928048249d, that first appeared in the 2.6.36 release. Since then the kernel has had code that reloads $v0 upon syscall restart and resumes right at the - SYSCALL instruction, so no special arrangement is needed anymore. - - For backwards compatibility with existing kernel binaries we support - the old convention by choosing the instruction preceding SYSCALL - carefully. This also means we have to force a 32-bit encoding of the - microMIPS MOVE instruction if one is used. */ - -#ifdef __mips_micromips -# define MOVE32 "move32" -#else -# define MOVE32 "move" -#endif + SYSCALL instruction, so no special arrangement is needed anymore. */ #undef INTERNAL_SYSCALL #undef INTERNAL_SYSCALL_NCS @@ -109,97 +98,75 @@ union __mips_syscall_return }) # define INTERNAL_SYSCALL_MIPS16(number, err, nr, args...) \ - internal_syscall##nr ("lw\t%0, %2\n\t", \ - "R" (number), \ - number, err, args) + internal_syscall##nr (number, err, args) #else /* !__mips16 */ # define INTERNAL_SYSCALL(name, nr, args...) \ - internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \ - "IK" (SYS_ify (name)), \ - SYS_ify (name), err, args) + internal_syscall##nr (SYS_ify (name), err, args) # define INTERNAL_SYSCALL_NCS(number, nr, args...) \ - internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \ - "r" (__s0), \ - number, err, args) + internal_syscall##nr (number, err, args) #endif /* !__mips16 */ -#define internal_syscall0(v0_init, input, number, err, dummy...) \ +#define internal_syscall0(number, err, dummy...) \ ({ \ long int _sys_result; \ \ { \ - register long int __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long int __v0 asm ("$2"); \ + register long int __v0 asm ("$2") = number; \ register long int __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set reorder" \ : "=r" (__v0), "=r" (__a3) \ - : input \ + : "r" (__v0) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall1(v0_init, input, number, err, arg1) \ +#define internal_syscall1(number, err, arg1) \ ({ \ long int _sys_result; \ \ { \ long int _arg1 = (long int) (arg1); \ - register long int __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long int __v0 asm ("$2"); \ + register long int __v0 asm ("$2") = number; \ register long int __a0 asm ("$4") = _arg1; \ register long int __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set reorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0) \ + : "r" (__v0), "r" (__a0) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall2(v0_init, input, number, err, arg1, arg2) \ +#define internal_syscall2(number, err, arg1, arg2) \ ({ \ long int _sys_result; \ \ { \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ - register long int __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long int __v0 asm ("$2"); \ + register long int __v0 asm ("$2") = number; \ register long int __a0 asm ("$4") = _arg1; \ register long int __a1 asm ("$5") = _arg2; \ register long int __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1) \ + : "r" (__v0), "r" (__a0), "r" (__a1) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall3(v0_init, input, number, err, \ - arg1, arg2, arg3) \ +#define internal_syscall3(number, err, arg1, arg2, arg3) \ ({ \ long int _sys_result; \ \ @@ -207,28 +174,22 @@ union __mips_syscall_return long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ long int _arg3 = (long int) (arg3); \ - register long int __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long int __v0 asm ("$2"); \ + register long int __v0 asm ("$2") = number; \ register long int __a0 asm ("$4") = _arg1; \ register long int __a1 asm ("$5") = _arg2; \ register long int __a2 asm ("$6") = _arg3; \ register long int __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall4(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4) \ +#define internal_syscall4(number, err, arg1, arg2, arg3, arg4) \ ({ \ long int _sys_result; \ \ @@ -237,20 +198,15 @@ union __mips_syscall_return long int _arg2 = (long int) (arg2); \ long int _arg3 = (long int) (arg3); \ long int _arg4 = (long int) (arg4); \ - register long int __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long int __v0 asm ("$2"); \ + register long int __v0 asm ("$2") = number; \ register long int __a0 asm ("$4") = _arg1; \ register long int __a1 asm ("$5") = _arg2; \ register long int __a2 asm ("$6") = _arg3; \ register long int __a3 asm ("$7") = _arg4; \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ @@ -272,8 +228,7 @@ long long int __nomips16 __mips_syscall5 (long int arg1, long int arg2, long int number); libc_hidden_proto (__mips_syscall5, nomips16) -#define internal_syscall5(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5) \ +#define internal_syscall5(number, err, arg1, arg2, arg3, arg4, arg5) \ ({ \ union __mips_syscall_return _sc_ret; \ _sc_ret.val = __mips_syscall5 ((long int) (arg1), \ @@ -291,7 +246,7 @@ long long int __nomips16 __mips_syscall6 (long int arg1, long int arg2, long int number); libc_hidden_proto (__mips_syscall6, nomips16) -#define internal_syscall6(v0_init, input, number, err, \ +#define internal_syscall6(number, err, \ arg1, arg2, arg3, arg4, arg5, arg6) \ ({ \ union __mips_syscall_return _sc_ret; \ @@ -312,7 +267,7 @@ long long int __nomips16 __mips_syscall7 (long int arg1, long int arg2, long int number); libc_hidden_proto (__mips_syscall7, nomips16) -#define internal_syscall7(v0_init, input, number, err, \ +#define internal_syscall7(number, err, \ arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ ({ \ union __mips_syscall_return _sc_ret; \ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/syscall.S b/sysdeps/unix/sysv/linux/mips/mips64/syscall.S index a9baff3c17..089524a40b 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/syscall.S +++ b/sysdeps/unix/sysv/linux/mips/mips64/syscall.S @@ -27,14 +27,9 @@ .text NESTED (syscall, SZREG, ra) - .mask 0x00010000, -SZREG + .mask 0x00000000, 0 .fmask 0x00000000, 0 - PTR_ADDIU sp, -SZREG - cfi_adjust_cfa_offset (SZREG) - REG_S s0, (sp) - cfi_rel_offset (s0, 0) - - move s0, a0 + move v0, a0 move a0, a1 /* shift arg1 - arg7. */ move a1, a2 move a2, a3 @@ -43,13 +38,8 @@ NESTED (syscall, SZREG, ra) move a5, a6 move a6, a7 - move v0, s0 /* Syscall number -> v0 */ syscall /* Do the system call. */ - REG_L s0, (sp) - cfi_restore (s0) - PTR_ADDIU sp, SZREG - cfi_adjust_cfa_offset (-SZREG) bne a3, zero, L(error) ret diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h index 73816816d5..ae38b56f1a 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h @@ -68,104 +68,74 @@ typedef long int __syscall_arg_t; GIT repository as commit 96187fb0bc30cd7919759d371d810e928048249d, that first appeared in the 2.6.36 release. Since then the kernel has had code that reloads $v0 upon syscall restart and resumes right at the - SYSCALL instruction, so no special arrangement is needed anymore. - - For backwards compatibility with existing kernel binaries we support - the old convention by choosing the instruction preceding SYSCALL - carefully. This also means we have to force a 32-bit encoding of the - microMIPS MOVE instruction if one is used. */ - -#ifdef __mips_micromips -# define MOVE32 "move32" -#else -# define MOVE32 "move" -#endif + SYSCALL instruction, so no special arrangement is needed anymore. */ #undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, nr, args...) \ - internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \ - "IK" (SYS_ify (name)), \ - 0, args) +#define INTERNAL_SYSCALL(name, nr, args...) \ + internal_syscall##nr ((SYS_ify (name)), args) #undef INTERNAL_SYSCALL_NCS #define INTERNAL_SYSCALL_NCS(number, nr, args...) \ - internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \ - "r" (__s0), \ - number, args) + internal_syscall##nr (number, args) -#define internal_syscall0(v0_init, input, number, dummy...) \ +#define internal_syscall0(number, dummy...) \ ({ \ long int _sys_result; \ \ { \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set reorder" \ : "=r" (__v0), "=r" (__a3) \ - : input \ + : "r" (__v0) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall1(v0_init, input, number, arg1) \ +#define internal_syscall1(number, arg1) \ ({ \ long int _sys_result; \ \ { \ __syscall_arg_t _arg1 = ARGIFY (arg1); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set reorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0) \ + : "r" (__v0), "r" (__a0) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall2(v0_init, input, number, arg1, arg2) \ +#define internal_syscall2(number, arg1, arg2) \ ({ \ long int _sys_result; \ \ { \ __syscall_arg_t _arg1 = ARGIFY (arg1); \ __syscall_arg_t _arg2 = ARGIFY (arg2); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a1 asm ("$5") = _arg2; \ register __syscall_arg_t __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1) \ + : "r" (__v0), "r" (__a0), "r" (__a1) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall3(v0_init, input, number, arg1, arg2, arg3) \ +#define internal_syscall3(number, arg1, arg2, arg3) \ ({ \ long int _sys_result; \ \ @@ -173,28 +143,22 @@ typedef long int __syscall_arg_t; __syscall_arg_t _arg1 = ARGIFY (arg1); \ __syscall_arg_t _arg2 = ARGIFY (arg2); \ __syscall_arg_t _arg3 = ARGIFY (arg3); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a1 asm ("$5") = _arg2; \ register __syscall_arg_t __a2 asm ("$6") = _arg3; \ register __syscall_arg_t __a3 asm ("$7"); \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall4(v0_init, input, number, arg1, arg2, arg3, \ - arg4) \ +#define internal_syscall4(number, arg1, arg2, arg3, arg4) \ ({ \ long int _sys_result; \ \ @@ -203,28 +167,22 @@ typedef long int __syscall_arg_t; __syscall_arg_t _arg2 = ARGIFY (arg2); \ __syscall_arg_t _arg3 = ARGIFY (arg3); \ __syscall_arg_t _arg4 = ARGIFY (arg4); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a1 asm ("$5") = _arg2; \ register __syscall_arg_t __a2 asm ("$6") = _arg3; \ register __syscall_arg_t __a3 asm ("$7") = _arg4; \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall5(v0_init, input, number, arg1, arg2, arg3, \ - arg4, arg5) \ +#define internal_syscall5(number, arg1, arg2, arg3, arg4, arg5) \ ({ \ long int _sys_result; \ \ @@ -234,29 +192,23 @@ typedef long int __syscall_arg_t; __syscall_arg_t _arg3 = ARGIFY (arg3); \ __syscall_arg_t _arg4 = ARGIFY (arg4); \ __syscall_arg_t _arg5 = ARGIFY (arg5); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a1 asm ("$5") = _arg2; \ register __syscall_arg_t __a2 asm ("$6") = _arg3; \ register __syscall_arg_t __a3 asm ("$7") = _arg4; \ register __syscall_arg_t __a4 asm ("$8") = _arg5; \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4) \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \ } \ _sys_result; \ }) -#define internal_syscall6(v0_init, input, number, arg1, arg2, arg3, \ - arg4, arg5, arg6) \ +#define internal_syscall6(number, arg1, arg2, arg3, arg4, arg5, arg6) \ ({ \ long int _sys_result; \ \ @@ -267,9 +219,7 @@ typedef long int __syscall_arg_t; __syscall_arg_t _arg4 = ARGIFY (arg4); \ __syscall_arg_t _arg5 = ARGIFY (arg5); \ __syscall_arg_t _arg6 = ARGIFY (arg6); \ - register __syscall_arg_t __s0 asm ("$16") __attribute__ ((unused))\ - = (number); \ - register __syscall_arg_t __v0 asm ("$2"); \ + register __syscall_arg_t __v0 asm ("$2") = number; \ register __syscall_arg_t __a0 asm ("$4") = _arg1; \ register __syscall_arg_t __a1 asm ("$5") = _arg2; \ register __syscall_arg_t __a2 asm ("$6") = _arg3; \ @@ -277,12 +227,9 @@ typedef long int __syscall_arg_t; register __syscall_arg_t __a4 asm ("$8") = _arg5; \ register __syscall_arg_t __a5 asm ("$9") = _arg6; \ __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ "syscall\n\t" \ - ".set\treorder" \ : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ + : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ "r" (__a5) \ : __SYSCALL_CLOBBERS); \ _sys_result = __a3 != 0 ? -__v0 : __v0; \