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;				\
