Merge "arm syscall : for eabi call_default don't use stack"
diff --git a/libc/arch-arm/syscalls/__brk.S b/libc/arch-arm/syscalls/__brk.S
index a0854a0..e4fcab0 100644
--- a/libc/arch-arm/syscalls/__brk.S
+++ b/libc/arch-arm/syscalls/__brk.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__brk)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_brk
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__fcntl.S b/libc/arch-arm/syscalls/__fcntl.S
index 067ee9a..ee82ef1 100644
--- a/libc/arch-arm/syscalls/__fcntl.S
+++ b/libc/arch-arm/syscalls/__fcntl.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__fcntl)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fcntl
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__fcntl64.S b/libc/arch-arm/syscalls/__fcntl64.S
index 3d39567..96cc16b 100644
--- a/libc/arch-arm/syscalls/__fcntl64.S
+++ b/libc/arch-arm/syscalls/__fcntl64.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__fcntl64)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fcntl64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__fork.S b/libc/arch-arm/syscalls/__fork.S
index 6cf08ad..9df9702 100644
--- a/libc/arch-arm/syscalls/__fork.S
+++ b/libc/arch-arm/syscalls/__fork.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__fork)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fork
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__fstatfs64.S b/libc/arch-arm/syscalls/__fstatfs64.S
index e8aa2f4..6e90214 100644
--- a/libc/arch-arm/syscalls/__fstatfs64.S
+++ b/libc/arch-arm/syscalls/__fstatfs64.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__fstatfs64)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fstatfs64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__getcpu.S b/libc/arch-arm/syscalls/__getcpu.S
index 78271eb..7976b06 100644
--- a/libc/arch-arm/syscalls/__getcpu.S
+++ b/libc/arch-arm/syscalls/__getcpu.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__getcpu)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getcpu
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__getcwd.S b/libc/arch-arm/syscalls/__getcwd.S
index e09a484..6fc2d64 100644
--- a/libc/arch-arm/syscalls/__getcwd.S
+++ b/libc/arch-arm/syscalls/__getcwd.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__getcwd)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getcwd
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__getpriority.S b/libc/arch-arm/syscalls/__getpriority.S
index 30e335c..6fb2a43 100644
--- a/libc/arch-arm/syscalls/__getpriority.S
+++ b/libc/arch-arm/syscalls/__getpriority.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__getpriority)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getpriority
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__ioctl.S b/libc/arch-arm/syscalls/__ioctl.S
index 554809f..56fd607 100644
--- a/libc/arch-arm/syscalls/__ioctl.S
+++ b/libc/arch-arm/syscalls/__ioctl.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__ioctl)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ioctl
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__open.S b/libc/arch-arm/syscalls/__open.S
index be2f4bf..589d5ad 100644
--- a/libc/arch-arm/syscalls/__open.S
+++ b/libc/arch-arm/syscalls/__open.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__open)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_open
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__openat.S b/libc/arch-arm/syscalls/__openat.S
index 4d91780..10c30d3 100644
--- a/libc/arch-arm/syscalls/__openat.S
+++ b/libc/arch-arm/syscalls/__openat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__openat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_openat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__ptrace.S b/libc/arch-arm/syscalls/__ptrace.S
index 04e0a30..72acd70 100644
--- a/libc/arch-arm/syscalls/__ptrace.S
+++ b/libc/arch-arm/syscalls/__ptrace.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__ptrace)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ptrace
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__reboot.S b/libc/arch-arm/syscalls/__reboot.S
index e75df45..07898a0 100644
--- a/libc/arch-arm/syscalls/__reboot.S
+++ b/libc/arch-arm/syscalls/__reboot.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__reboot)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_reboot
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__rt_sigaction.S b/libc/arch-arm/syscalls/__rt_sigaction.S
index 57a3149..31d4c1e 100644
--- a/libc/arch-arm/syscalls/__rt_sigaction.S
+++ b/libc/arch-arm/syscalls/__rt_sigaction.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__rt_sigaction)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_rt_sigaction
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__rt_sigprocmask.S b/libc/arch-arm/syscalls/__rt_sigprocmask.S
index 8220825..640a7ee 100644
--- a/libc/arch-arm/syscalls/__rt_sigprocmask.S
+++ b/libc/arch-arm/syscalls/__rt_sigprocmask.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__rt_sigprocmask)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_rt_sigprocmask
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__rt_sigtimedwait.S b/libc/arch-arm/syscalls/__rt_sigtimedwait.S
index bce63ed..ad725af 100644
--- a/libc/arch-arm/syscalls/__rt_sigtimedwait.S
+++ b/libc/arch-arm/syscalls/__rt_sigtimedwait.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__rt_sigtimedwait)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_rt_sigtimedwait
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__sched_getaffinity.S b/libc/arch-arm/syscalls/__sched_getaffinity.S
index bdd4517..bee1674 100644
--- a/libc/arch-arm/syscalls/__sched_getaffinity.S
+++ b/libc/arch-arm/syscalls/__sched_getaffinity.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__sched_getaffinity)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_getaffinity
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__set_tls.S b/libc/arch-arm/syscalls/__set_tls.S
index cf5d6b6..3039b35 100644
--- a/libc/arch-arm/syscalls/__set_tls.S
+++ b/libc/arch-arm/syscalls/__set_tls.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__set_tls)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ARM_set_tls
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__setresuid.S b/libc/arch-arm/syscalls/__setresuid.S
index d5053ba..1877bbf 100644
--- a/libc/arch-arm/syscalls/__setresuid.S
+++ b/libc/arch-arm/syscalls/__setresuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__setresuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setresuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__setreuid.S b/libc/arch-arm/syscalls/__setreuid.S
index 9cd51f6..2129cb2 100644
--- a/libc/arch-arm/syscalls/__setreuid.S
+++ b/libc/arch-arm/syscalls/__setreuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__setreuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setreuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__setuid.S b/libc/arch-arm/syscalls/__setuid.S
index 88dc58e..9df2f89 100644
--- a/libc/arch-arm/syscalls/__setuid.S
+++ b/libc/arch-arm/syscalls/__setuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__setuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__sigsuspend.S b/libc/arch-arm/syscalls/__sigsuspend.S
index 1ececb7..8f1ff55 100644
--- a/libc/arch-arm/syscalls/__sigsuspend.S
+++ b/libc/arch-arm/syscalls/__sigsuspend.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__sigsuspend)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sigsuspend
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__statfs64.S b/libc/arch-arm/syscalls/__statfs64.S
index 4afef71..f8d63a3 100644
--- a/libc/arch-arm/syscalls/__statfs64.S
+++ b/libc/arch-arm/syscalls/__statfs64.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__statfs64)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_statfs64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__syslog.S b/libc/arch-arm/syscalls/__syslog.S
index 6dbe745..8ad0271 100644
--- a/libc/arch-arm/syscalls/__syslog.S
+++ b/libc/arch-arm/syscalls/__syslog.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__syslog)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_syslog
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__timer_create.S b/libc/arch-arm/syscalls/__timer_create.S
index c547137..fcb4e3f 100644
--- a/libc/arch-arm/syscalls/__timer_create.S
+++ b/libc/arch-arm/syscalls/__timer_create.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__timer_create)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_timer_create
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__timer_delete.S b/libc/arch-arm/syscalls/__timer_delete.S
index ca2e0a3..de303fc 100644
--- a/libc/arch-arm/syscalls/__timer_delete.S
+++ b/libc/arch-arm/syscalls/__timer_delete.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__timer_delete)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_timer_delete
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__timer_getoverrun.S b/libc/arch-arm/syscalls/__timer_getoverrun.S
index b0f18e7..a96b047 100644
--- a/libc/arch-arm/syscalls/__timer_getoverrun.S
+++ b/libc/arch-arm/syscalls/__timer_getoverrun.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__timer_getoverrun)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_timer_getoverrun
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__timer_gettime.S b/libc/arch-arm/syscalls/__timer_gettime.S
index c172602..6e6bbf5 100644
--- a/libc/arch-arm/syscalls/__timer_gettime.S
+++ b/libc/arch-arm/syscalls/__timer_gettime.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__timer_gettime)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_timer_gettime
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__timer_settime.S b/libc/arch-arm/syscalls/__timer_settime.S
index 8220440..bcbe298 100644
--- a/libc/arch-arm/syscalls/__timer_settime.S
+++ b/libc/arch-arm/syscalls/__timer_settime.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__timer_settime)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_timer_settime
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/__wait4.S b/libc/arch-arm/syscalls/__wait4.S
index fa34502..2a0e5c4 100644
--- a/libc/arch-arm/syscalls/__wait4.S
+++ b/libc/arch-arm/syscalls/__wait4.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(__wait4)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_wait4
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/_exit.S b/libc/arch-arm/syscalls/_exit.S
index 77487b5..ab444ce 100644
--- a/libc/arch-arm/syscalls/_exit.S
+++ b/libc/arch-arm/syscalls/_exit.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(_exit)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_exit_group
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/_exit_thread.S b/libc/arch-arm/syscalls/_exit_thread.S
index bd16ff1..53a21fb 100644
--- a/libc/arch-arm/syscalls/_exit_thread.S
+++ b/libc/arch-arm/syscalls/_exit_thread.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(_exit_thread)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_exit
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/accept.S b/libc/arch-arm/syscalls/accept.S
index 0dcfb0c..b1a2d72 100644
--- a/libc/arch-arm/syscalls/accept.S
+++ b/libc/arch-arm/syscalls/accept.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(accept)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_accept
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/access.S b/libc/arch-arm/syscalls/access.S
index cf585a3..c0b0333 100644
--- a/libc/arch-arm/syscalls/access.S
+++ b/libc/arch-arm/syscalls/access.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(access)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_access
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/acct.S b/libc/arch-arm/syscalls/acct.S
index 85346e4..5485be1 100644
--- a/libc/arch-arm/syscalls/acct.S
+++ b/libc/arch-arm/syscalls/acct.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(acct)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_acct
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/bind.S b/libc/arch-arm/syscalls/bind.S
index 85d0471..1bb5843 100644
--- a/libc/arch-arm/syscalls/bind.S
+++ b/libc/arch-arm/syscalls/bind.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(bind)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_bind
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/cacheflush.S b/libc/arch-arm/syscalls/cacheflush.S
index 05b2411..fd7f68d 100644
--- a/libc/arch-arm/syscalls/cacheflush.S
+++ b/libc/arch-arm/syscalls/cacheflush.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(cacheflush)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ARM_cacheflush
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/capget.S b/libc/arch-arm/syscalls/capget.S
index 0f3ba31..1f425a0 100644
--- a/libc/arch-arm/syscalls/capget.S
+++ b/libc/arch-arm/syscalls/capget.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(capget)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_capget
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/capset.S b/libc/arch-arm/syscalls/capset.S
index 2254db2..13ebd5a 100644
--- a/libc/arch-arm/syscalls/capset.S
+++ b/libc/arch-arm/syscalls/capset.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(capset)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_capset
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/chdir.S b/libc/arch-arm/syscalls/chdir.S
index 57d6b13..4965495 100644
--- a/libc/arch-arm/syscalls/chdir.S
+++ b/libc/arch-arm/syscalls/chdir.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(chdir)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_chdir
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/chmod.S b/libc/arch-arm/syscalls/chmod.S
index 8909c6f..ed9d52f 100644
--- a/libc/arch-arm/syscalls/chmod.S
+++ b/libc/arch-arm/syscalls/chmod.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(chmod)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_chmod
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/chown.S b/libc/arch-arm/syscalls/chown.S
index cbbd8a8..ff1cec2 100644
--- a/libc/arch-arm/syscalls/chown.S
+++ b/libc/arch-arm/syscalls/chown.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(chown)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_chown32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/chroot.S b/libc/arch-arm/syscalls/chroot.S
index a679172..bc8e3fe 100644
--- a/libc/arch-arm/syscalls/chroot.S
+++ b/libc/arch-arm/syscalls/chroot.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(chroot)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_chroot
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/clock_getres.S b/libc/arch-arm/syscalls/clock_getres.S
index 705f296..66cf9ec 100644
--- a/libc/arch-arm/syscalls/clock_getres.S
+++ b/libc/arch-arm/syscalls/clock_getres.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(clock_getres)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_clock_getres
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/clock_gettime.S b/libc/arch-arm/syscalls/clock_gettime.S
index a9ab41f..4e42c82 100644
--- a/libc/arch-arm/syscalls/clock_gettime.S
+++ b/libc/arch-arm/syscalls/clock_gettime.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(clock_gettime)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_clock_gettime
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/clock_nanosleep.S b/libc/arch-arm/syscalls/clock_nanosleep.S
index f8e7f73..6d530a2 100644
--- a/libc/arch-arm/syscalls/clock_nanosleep.S
+++ b/libc/arch-arm/syscalls/clock_nanosleep.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(clock_nanosleep)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_clock_nanosleep
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/clock_settime.S b/libc/arch-arm/syscalls/clock_settime.S
index a996441..e9374b5 100644
--- a/libc/arch-arm/syscalls/clock_settime.S
+++ b/libc/arch-arm/syscalls/clock_settime.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(clock_settime)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_clock_settime
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/close.S b/libc/arch-arm/syscalls/close.S
index 36d78a4..eb4cb62 100644
--- a/libc/arch-arm/syscalls/close.S
+++ b/libc/arch-arm/syscalls/close.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(close)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_close
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/connect.S b/libc/arch-arm/syscalls/connect.S
index ea14c17..b97b4fe 100644
--- a/libc/arch-arm/syscalls/connect.S
+++ b/libc/arch-arm/syscalls/connect.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(connect)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_connect
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/delete_module.S b/libc/arch-arm/syscalls/delete_module.S
index df8aae0..0994994 100644
--- a/libc/arch-arm/syscalls/delete_module.S
+++ b/libc/arch-arm/syscalls/delete_module.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(delete_module)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_delete_module
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/dup.S b/libc/arch-arm/syscalls/dup.S
index b0c1cda..8854342 100644
--- a/libc/arch-arm/syscalls/dup.S
+++ b/libc/arch-arm/syscalls/dup.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(dup)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_dup
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/dup2.S b/libc/arch-arm/syscalls/dup2.S
index ed346d9..0dcc57f 100644
--- a/libc/arch-arm/syscalls/dup2.S
+++ b/libc/arch-arm/syscalls/dup2.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(dup2)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_dup2
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/epoll_create.S b/libc/arch-arm/syscalls/epoll_create.S
index 1aab606..92a2781 100644
--- a/libc/arch-arm/syscalls/epoll_create.S
+++ b/libc/arch-arm/syscalls/epoll_create.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(epoll_create)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_epoll_create
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/epoll_ctl.S b/libc/arch-arm/syscalls/epoll_ctl.S
index c0ecf06..b3c630f 100644
--- a/libc/arch-arm/syscalls/epoll_ctl.S
+++ b/libc/arch-arm/syscalls/epoll_ctl.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(epoll_ctl)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_epoll_ctl
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/epoll_wait.S b/libc/arch-arm/syscalls/epoll_wait.S
index 3535001..3ccac91 100644
--- a/libc/arch-arm/syscalls/epoll_wait.S
+++ b/libc/arch-arm/syscalls/epoll_wait.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(epoll_wait)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_epoll_wait
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/eventfd.S b/libc/arch-arm/syscalls/eventfd.S
index 857b6c0..754f019 100644
--- a/libc/arch-arm/syscalls/eventfd.S
+++ b/libc/arch-arm/syscalls/eventfd.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(eventfd)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_eventfd2
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/execve.S b/libc/arch-arm/syscalls/execve.S
index 1a66167..49e5b13 100644
--- a/libc/arch-arm/syscalls/execve.S
+++ b/libc/arch-arm/syscalls/execve.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(execve)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_execve
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/faccessat.S b/libc/arch-arm/syscalls/faccessat.S
index a2f176f..5ade517 100644
--- a/libc/arch-arm/syscalls/faccessat.S
+++ b/libc/arch-arm/syscalls/faccessat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(faccessat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_faccessat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fchdir.S b/libc/arch-arm/syscalls/fchdir.S
index 7d80cf0..96a047d 100644
--- a/libc/arch-arm/syscalls/fchdir.S
+++ b/libc/arch-arm/syscalls/fchdir.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fchdir)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fchdir
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fchmod.S b/libc/arch-arm/syscalls/fchmod.S
index bc8e643..b096a8c 100644
--- a/libc/arch-arm/syscalls/fchmod.S
+++ b/libc/arch-arm/syscalls/fchmod.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fchmod)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fchmod
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fchmodat.S b/libc/arch-arm/syscalls/fchmodat.S
index ac782e5..8c87598 100644
--- a/libc/arch-arm/syscalls/fchmodat.S
+++ b/libc/arch-arm/syscalls/fchmodat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fchmodat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fchmodat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fchown.S b/libc/arch-arm/syscalls/fchown.S
index 22d7fd2..2f7e92b 100644
--- a/libc/arch-arm/syscalls/fchown.S
+++ b/libc/arch-arm/syscalls/fchown.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fchown)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fchown32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fdatasync.S b/libc/arch-arm/syscalls/fdatasync.S
index d41e823..31818c8 100644
--- a/libc/arch-arm/syscalls/fdatasync.S
+++ b/libc/arch-arm/syscalls/fdatasync.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fdatasync)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fdatasync
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fgetxattr.S b/libc/arch-arm/syscalls/fgetxattr.S
index 32b8ef8..6f3eb3d 100644
--- a/libc/arch-arm/syscalls/fgetxattr.S
+++ b/libc/arch-arm/syscalls/fgetxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fgetxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fgetxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/flistxattr.S b/libc/arch-arm/syscalls/flistxattr.S
index 0785e77..38e856d 100644
--- a/libc/arch-arm/syscalls/flistxattr.S
+++ b/libc/arch-arm/syscalls/flistxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(flistxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_flistxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/flock.S b/libc/arch-arm/syscalls/flock.S
index c0d2844..3732bfe 100644
--- a/libc/arch-arm/syscalls/flock.S
+++ b/libc/arch-arm/syscalls/flock.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(flock)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_flock
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fremovexattr.S b/libc/arch-arm/syscalls/fremovexattr.S
index ae97d13..45cf803 100644
--- a/libc/arch-arm/syscalls/fremovexattr.S
+++ b/libc/arch-arm/syscalls/fremovexattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fremovexattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fremovexattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fstat.S b/libc/arch-arm/syscalls/fstat.S
index e75649f..d314213 100644
--- a/libc/arch-arm/syscalls/fstat.S
+++ b/libc/arch-arm/syscalls/fstat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fstat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fstat64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fstatat.S b/libc/arch-arm/syscalls/fstatat.S
index 065ef9f..8cf1a57 100644
--- a/libc/arch-arm/syscalls/fstatat.S
+++ b/libc/arch-arm/syscalls/fstatat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fstatat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fstatat64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/fsync.S b/libc/arch-arm/syscalls/fsync.S
index f0de9ca..52cfa53 100644
--- a/libc/arch-arm/syscalls/fsync.S
+++ b/libc/arch-arm/syscalls/fsync.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(fsync)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_fsync
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/ftruncate.S b/libc/arch-arm/syscalls/ftruncate.S
index 2e4a308..14cd87d 100644
--- a/libc/arch-arm/syscalls/ftruncate.S
+++ b/libc/arch-arm/syscalls/ftruncate.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(ftruncate)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ftruncate
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/ftruncate64.S b/libc/arch-arm/syscalls/ftruncate64.S
index 7c7b80b..0e1b42b 100644
--- a/libc/arch-arm/syscalls/ftruncate64.S
+++ b/libc/arch-arm/syscalls/ftruncate64.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(ftruncate64)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ftruncate64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getdents.S b/libc/arch-arm/syscalls/getdents.S
index 82b6e4c..e6c3028 100644
--- a/libc/arch-arm/syscalls/getdents.S
+++ b/libc/arch-arm/syscalls/getdents.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getdents)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getdents64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getegid.S b/libc/arch-arm/syscalls/getegid.S
index 27ea272..22794d1 100644
--- a/libc/arch-arm/syscalls/getegid.S
+++ b/libc/arch-arm/syscalls/getegid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getegid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getegid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/geteuid.S b/libc/arch-arm/syscalls/geteuid.S
index d4c9cd1..cfb318f 100644
--- a/libc/arch-arm/syscalls/geteuid.S
+++ b/libc/arch-arm/syscalls/geteuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(geteuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_geteuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getgid.S b/libc/arch-arm/syscalls/getgid.S
index 9a40fe6..085061e 100644
--- a/libc/arch-arm/syscalls/getgid.S
+++ b/libc/arch-arm/syscalls/getgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getgid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getgroups.S b/libc/arch-arm/syscalls/getgroups.S
index 2995cc8..c426d87 100644
--- a/libc/arch-arm/syscalls/getgroups.S
+++ b/libc/arch-arm/syscalls/getgroups.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getgroups)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getgroups32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getitimer.S b/libc/arch-arm/syscalls/getitimer.S
index a3f1423..5d832d9 100644
--- a/libc/arch-arm/syscalls/getitimer.S
+++ b/libc/arch-arm/syscalls/getitimer.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getitimer)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getitimer
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getpeername.S b/libc/arch-arm/syscalls/getpeername.S
index f90c344..ced69f7 100644
--- a/libc/arch-arm/syscalls/getpeername.S
+++ b/libc/arch-arm/syscalls/getpeername.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getpeername)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getpeername
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getpgid.S b/libc/arch-arm/syscalls/getpgid.S
index 0fc57a4..d599f1e 100644
--- a/libc/arch-arm/syscalls/getpgid.S
+++ b/libc/arch-arm/syscalls/getpgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getpgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getpgid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getpid.S b/libc/arch-arm/syscalls/getpid.S
index 440ae9b..ef19d25 100644
--- a/libc/arch-arm/syscalls/getpid.S
+++ b/libc/arch-arm/syscalls/getpid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getpid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getpid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getppid.S b/libc/arch-arm/syscalls/getppid.S
index 3eb1b86..1fe30d4 100644
--- a/libc/arch-arm/syscalls/getppid.S
+++ b/libc/arch-arm/syscalls/getppid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getppid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getppid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getresgid.S b/libc/arch-arm/syscalls/getresgid.S
index a022341..e8d2129 100644
--- a/libc/arch-arm/syscalls/getresgid.S
+++ b/libc/arch-arm/syscalls/getresgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getresgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getresgid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getresuid.S b/libc/arch-arm/syscalls/getresuid.S
index 23112a6..cdfe0f7 100644
--- a/libc/arch-arm/syscalls/getresuid.S
+++ b/libc/arch-arm/syscalls/getresuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getresuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getresuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getrlimit.S b/libc/arch-arm/syscalls/getrlimit.S
index 8b1c0891..3acbf95 100644
--- a/libc/arch-arm/syscalls/getrlimit.S
+++ b/libc/arch-arm/syscalls/getrlimit.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getrlimit)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ugetrlimit
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getrusage.S b/libc/arch-arm/syscalls/getrusage.S
index 74fa20b..e17fc4a 100644
--- a/libc/arch-arm/syscalls/getrusage.S
+++ b/libc/arch-arm/syscalls/getrusage.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getrusage)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getrusage
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getsid.S b/libc/arch-arm/syscalls/getsid.S
index 856d41a..06e6d67 100644
--- a/libc/arch-arm/syscalls/getsid.S
+++ b/libc/arch-arm/syscalls/getsid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getsid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getsid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getsockname.S b/libc/arch-arm/syscalls/getsockname.S
index 99470e2..458814f 100644
--- a/libc/arch-arm/syscalls/getsockname.S
+++ b/libc/arch-arm/syscalls/getsockname.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getsockname)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getsockname
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/gettid.S b/libc/arch-arm/syscalls/gettid.S
index f5b15be..f35c7ea 100644
--- a/libc/arch-arm/syscalls/gettid.S
+++ b/libc/arch-arm/syscalls/gettid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(gettid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_gettid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/gettimeofday.S b/libc/arch-arm/syscalls/gettimeofday.S
index 9b47daf..113413e 100644
--- a/libc/arch-arm/syscalls/gettimeofday.S
+++ b/libc/arch-arm/syscalls/gettimeofday.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(gettimeofday)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_gettimeofday
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getuid.S b/libc/arch-arm/syscalls/getuid.S
index 053dc31..20ed7f9 100644
--- a/libc/arch-arm/syscalls/getuid.S
+++ b/libc/arch-arm/syscalls/getuid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getuid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getuid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/getxattr.S b/libc/arch-arm/syscalls/getxattr.S
index 18532ce..0a7cbef 100644
--- a/libc/arch-arm/syscalls/getxattr.S
+++ b/libc/arch-arm/syscalls/getxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(getxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_getxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/init_module.S b/libc/arch-arm/syscalls/init_module.S
index 73beb46..de41a7e 100644
--- a/libc/arch-arm/syscalls/init_module.S
+++ b/libc/arch-arm/syscalls/init_module.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(init_module)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_init_module
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/inotify_add_watch.S b/libc/arch-arm/syscalls/inotify_add_watch.S
index da4a296..aa8fcb7 100644
--- a/libc/arch-arm/syscalls/inotify_add_watch.S
+++ b/libc/arch-arm/syscalls/inotify_add_watch.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(inotify_add_watch)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_inotify_add_watch
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/inotify_init.S b/libc/arch-arm/syscalls/inotify_init.S
index bac124c..56d4b93 100644
--- a/libc/arch-arm/syscalls/inotify_init.S
+++ b/libc/arch-arm/syscalls/inotify_init.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(inotify_init)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_inotify_init
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/inotify_rm_watch.S b/libc/arch-arm/syscalls/inotify_rm_watch.S
index f576480..4315061 100644
--- a/libc/arch-arm/syscalls/inotify_rm_watch.S
+++ b/libc/arch-arm/syscalls/inotify_rm_watch.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(inotify_rm_watch)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_inotify_rm_watch
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/ioprio_get.S b/libc/arch-arm/syscalls/ioprio_get.S
index 13739dc..d3bd796 100644
--- a/libc/arch-arm/syscalls/ioprio_get.S
+++ b/libc/arch-arm/syscalls/ioprio_get.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(ioprio_get)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ioprio_get
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/ioprio_set.S b/libc/arch-arm/syscalls/ioprio_set.S
index 7e40ee5..c42d305 100644
--- a/libc/arch-arm/syscalls/ioprio_set.S
+++ b/libc/arch-arm/syscalls/ioprio_set.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(ioprio_set)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_ioprio_set
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/klogctl.S b/libc/arch-arm/syscalls/klogctl.S
index 5434b30..1356815 100644
--- a/libc/arch-arm/syscalls/klogctl.S
+++ b/libc/arch-arm/syscalls/klogctl.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(klogctl)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_syslog
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/lchown.S b/libc/arch-arm/syscalls/lchown.S
index 789e5af..56902a3 100644
--- a/libc/arch-arm/syscalls/lchown.S
+++ b/libc/arch-arm/syscalls/lchown.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(lchown)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_lchown32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/lgetxattr.S b/libc/arch-arm/syscalls/lgetxattr.S
index 61fc098..cc30d63 100644
--- a/libc/arch-arm/syscalls/lgetxattr.S
+++ b/libc/arch-arm/syscalls/lgetxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(lgetxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_lgetxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/link.S b/libc/arch-arm/syscalls/link.S
index ccf0a1d..dab8fa6 100644
--- a/libc/arch-arm/syscalls/link.S
+++ b/libc/arch-arm/syscalls/link.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(link)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_link
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/listen.S b/libc/arch-arm/syscalls/listen.S
index bb7f7a4..fac3702 100644
--- a/libc/arch-arm/syscalls/listen.S
+++ b/libc/arch-arm/syscalls/listen.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(listen)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_listen
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/listxattr.S b/libc/arch-arm/syscalls/listxattr.S
index 6bbdb6a..8c7fc9b 100644
--- a/libc/arch-arm/syscalls/listxattr.S
+++ b/libc/arch-arm/syscalls/listxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(listxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_listxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/llistxattr.S b/libc/arch-arm/syscalls/llistxattr.S
index 89682df..9cade18 100644
--- a/libc/arch-arm/syscalls/llistxattr.S
+++ b/libc/arch-arm/syscalls/llistxattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(llistxattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_llistxattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/lremovexattr.S b/libc/arch-arm/syscalls/lremovexattr.S
index 62f6722..d4a7b82 100644
--- a/libc/arch-arm/syscalls/lremovexattr.S
+++ b/libc/arch-arm/syscalls/lremovexattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(lremovexattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_lremovexattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/lseek.S b/libc/arch-arm/syscalls/lseek.S
index 2cd0853..a452856 100644
--- a/libc/arch-arm/syscalls/lseek.S
+++ b/libc/arch-arm/syscalls/lseek.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(lseek)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_lseek
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/lstat.S b/libc/arch-arm/syscalls/lstat.S
index dbecefe..69f2146 100644
--- a/libc/arch-arm/syscalls/lstat.S
+++ b/libc/arch-arm/syscalls/lstat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(lstat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_lstat64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/madvise.S b/libc/arch-arm/syscalls/madvise.S
index 024476f..02944a2 100644
--- a/libc/arch-arm/syscalls/madvise.S
+++ b/libc/arch-arm/syscalls/madvise.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(madvise)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_madvise
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mincore.S b/libc/arch-arm/syscalls/mincore.S
index 7a2a378..5ffdc11 100644
--- a/libc/arch-arm/syscalls/mincore.S
+++ b/libc/arch-arm/syscalls/mincore.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mincore)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mincore
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mkdir.S b/libc/arch-arm/syscalls/mkdir.S
index e51beab..c2aa080 100644
--- a/libc/arch-arm/syscalls/mkdir.S
+++ b/libc/arch-arm/syscalls/mkdir.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mkdir)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mkdir
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mkdirat.S b/libc/arch-arm/syscalls/mkdirat.S
index 52f0be3..421c70a 100644
--- a/libc/arch-arm/syscalls/mkdirat.S
+++ b/libc/arch-arm/syscalls/mkdirat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mkdirat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mkdirat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mknod.S b/libc/arch-arm/syscalls/mknod.S
index ac6d976..4aca2c5 100644
--- a/libc/arch-arm/syscalls/mknod.S
+++ b/libc/arch-arm/syscalls/mknod.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mknod)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mknod
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mlock.S b/libc/arch-arm/syscalls/mlock.S
index ad140d1..5c8e74d 100644
--- a/libc/arch-arm/syscalls/mlock.S
+++ b/libc/arch-arm/syscalls/mlock.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mlock)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mlock
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mlockall.S b/libc/arch-arm/syscalls/mlockall.S
index 45c782e..a89545a 100644
--- a/libc/arch-arm/syscalls/mlockall.S
+++ b/libc/arch-arm/syscalls/mlockall.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mlockall)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mlockall
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mprotect.S b/libc/arch-arm/syscalls/mprotect.S
index 39ae353..06238bf 100644
--- a/libc/arch-arm/syscalls/mprotect.S
+++ b/libc/arch-arm/syscalls/mprotect.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mprotect)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mprotect
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/mremap.S b/libc/arch-arm/syscalls/mremap.S
index 918f3b7..29b308b 100644
--- a/libc/arch-arm/syscalls/mremap.S
+++ b/libc/arch-arm/syscalls/mremap.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(mremap)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_mremap
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/msync.S b/libc/arch-arm/syscalls/msync.S
index 2a5922c..af8fc0c 100644
--- a/libc/arch-arm/syscalls/msync.S
+++ b/libc/arch-arm/syscalls/msync.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(msync)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_msync
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/munlock.S b/libc/arch-arm/syscalls/munlock.S
index 5a02aaf..42df37e 100644
--- a/libc/arch-arm/syscalls/munlock.S
+++ b/libc/arch-arm/syscalls/munlock.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(munlock)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_munlock
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/munlockall.S b/libc/arch-arm/syscalls/munlockall.S
index 8106965..c0fca33 100644
--- a/libc/arch-arm/syscalls/munlockall.S
+++ b/libc/arch-arm/syscalls/munlockall.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(munlockall)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_munlockall
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/munmap.S b/libc/arch-arm/syscalls/munmap.S
index 6bb8dd8..9d7b60f 100644
--- a/libc/arch-arm/syscalls/munmap.S
+++ b/libc/arch-arm/syscalls/munmap.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(munmap)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_munmap
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/nanosleep.S b/libc/arch-arm/syscalls/nanosleep.S
index af36ced..7f4cda6 100644
--- a/libc/arch-arm/syscalls/nanosleep.S
+++ b/libc/arch-arm/syscalls/nanosleep.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(nanosleep)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_nanosleep
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/pause.S b/libc/arch-arm/syscalls/pause.S
index e64f4f3..1238f4b 100644
--- a/libc/arch-arm/syscalls/pause.S
+++ b/libc/arch-arm/syscalls/pause.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(pause)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_pause
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/personality.S b/libc/arch-arm/syscalls/personality.S
index 17ac686..f338d71 100644
--- a/libc/arch-arm/syscalls/personality.S
+++ b/libc/arch-arm/syscalls/personality.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(personality)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_personality
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/pipe.S b/libc/arch-arm/syscalls/pipe.S
index 3968703..ec0efb1 100644
--- a/libc/arch-arm/syscalls/pipe.S
+++ b/libc/arch-arm/syscalls/pipe.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(pipe)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_pipe
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/pipe2.S b/libc/arch-arm/syscalls/pipe2.S
index da2ecba..f79c8f5 100644
--- a/libc/arch-arm/syscalls/pipe2.S
+++ b/libc/arch-arm/syscalls/pipe2.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(pipe2)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_pipe2
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/poll.S b/libc/arch-arm/syscalls/poll.S
index 4d345ea..d9831ab 100644
--- a/libc/arch-arm/syscalls/poll.S
+++ b/libc/arch-arm/syscalls/poll.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(poll)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_poll
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/read.S b/libc/arch-arm/syscalls/read.S
index c062388..ab0583a 100644
--- a/libc/arch-arm/syscalls/read.S
+++ b/libc/arch-arm/syscalls/read.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(read)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_read
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/readlink.S b/libc/arch-arm/syscalls/readlink.S
index 7602e617..90b0ea6 100644
--- a/libc/arch-arm/syscalls/readlink.S
+++ b/libc/arch-arm/syscalls/readlink.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(readlink)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_readlink
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/readv.S b/libc/arch-arm/syscalls/readv.S
index e717e61..9f8b8db 100644
--- a/libc/arch-arm/syscalls/readv.S
+++ b/libc/arch-arm/syscalls/readv.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(readv)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_readv
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/recvmsg.S b/libc/arch-arm/syscalls/recvmsg.S
index 5c168dc..00746a1 100644
--- a/libc/arch-arm/syscalls/recvmsg.S
+++ b/libc/arch-arm/syscalls/recvmsg.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(recvmsg)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_recvmsg
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/removexattr.S b/libc/arch-arm/syscalls/removexattr.S
index 1a44caf..82fb9e0 100644
--- a/libc/arch-arm/syscalls/removexattr.S
+++ b/libc/arch-arm/syscalls/removexattr.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(removexattr)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_removexattr
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/rename.S b/libc/arch-arm/syscalls/rename.S
index 930ddb6..dfe0b0e 100644
--- a/libc/arch-arm/syscalls/rename.S
+++ b/libc/arch-arm/syscalls/rename.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(rename)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_rename
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/renameat.S b/libc/arch-arm/syscalls/renameat.S
index a13c4ee..aa42b78 100644
--- a/libc/arch-arm/syscalls/renameat.S
+++ b/libc/arch-arm/syscalls/renameat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(renameat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_renameat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/rmdir.S b/libc/arch-arm/syscalls/rmdir.S
index 09a956f..c2d5c5a 100644
--- a/libc/arch-arm/syscalls/rmdir.S
+++ b/libc/arch-arm/syscalls/rmdir.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(rmdir)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_rmdir
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_get_priority_max.S b/libc/arch-arm/syscalls/sched_get_priority_max.S
index 2dea3b7..703ddeb 100644
--- a/libc/arch-arm/syscalls/sched_get_priority_max.S
+++ b/libc/arch-arm/syscalls/sched_get_priority_max.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_get_priority_max)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_get_priority_max
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_get_priority_min.S b/libc/arch-arm/syscalls/sched_get_priority_min.S
index de8b878..deea8ae 100644
--- a/libc/arch-arm/syscalls/sched_get_priority_min.S
+++ b/libc/arch-arm/syscalls/sched_get_priority_min.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_get_priority_min)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_get_priority_min
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_getparam.S b/libc/arch-arm/syscalls/sched_getparam.S
index 6434217..194d4a2 100644
--- a/libc/arch-arm/syscalls/sched_getparam.S
+++ b/libc/arch-arm/syscalls/sched_getparam.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_getparam)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_getparam
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_getscheduler.S b/libc/arch-arm/syscalls/sched_getscheduler.S
index 8e45ce6..fd3cec5 100644
--- a/libc/arch-arm/syscalls/sched_getscheduler.S
+++ b/libc/arch-arm/syscalls/sched_getscheduler.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_getscheduler)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_getscheduler
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_rr_get_interval.S b/libc/arch-arm/syscalls/sched_rr_get_interval.S
index e88d26e..21a5788 100644
--- a/libc/arch-arm/syscalls/sched_rr_get_interval.S
+++ b/libc/arch-arm/syscalls/sched_rr_get_interval.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_rr_get_interval)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_rr_get_interval
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_setaffinity.S b/libc/arch-arm/syscalls/sched_setaffinity.S
index b9dd299..c980ed0 100644
--- a/libc/arch-arm/syscalls/sched_setaffinity.S
+++ b/libc/arch-arm/syscalls/sched_setaffinity.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_setaffinity)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_setaffinity
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_setparam.S b/libc/arch-arm/syscalls/sched_setparam.S
index 73d6ab6..993078d 100644
--- a/libc/arch-arm/syscalls/sched_setparam.S
+++ b/libc/arch-arm/syscalls/sched_setparam.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_setparam)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_setparam
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_setscheduler.S b/libc/arch-arm/syscalls/sched_setscheduler.S
index 33c28ab..d0ac1de 100644
--- a/libc/arch-arm/syscalls/sched_setscheduler.S
+++ b/libc/arch-arm/syscalls/sched_setscheduler.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_setscheduler)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_setscheduler
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sched_yield.S b/libc/arch-arm/syscalls/sched_yield.S
index 71628b3..00bdfbd 100644
--- a/libc/arch-arm/syscalls/sched_yield.S
+++ b/libc/arch-arm/syscalls/sched_yield.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sched_yield)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sched_yield
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sendfile.S b/libc/arch-arm/syscalls/sendfile.S
index 2790b4b..9e4c70c 100644
--- a/libc/arch-arm/syscalls/sendfile.S
+++ b/libc/arch-arm/syscalls/sendfile.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sendfile)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sendfile
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sendmsg.S b/libc/arch-arm/syscalls/sendmsg.S
index 99b5479..1b54aee 100644
--- a/libc/arch-arm/syscalls/sendmsg.S
+++ b/libc/arch-arm/syscalls/sendmsg.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sendmsg)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sendmsg
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setgid.S b/libc/arch-arm/syscalls/setgid.S
index f28687d..09045ad 100644
--- a/libc/arch-arm/syscalls/setgid.S
+++ b/libc/arch-arm/syscalls/setgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setgid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setgroups.S b/libc/arch-arm/syscalls/setgroups.S
index d2c932f..e4c36b5 100644
--- a/libc/arch-arm/syscalls/setgroups.S
+++ b/libc/arch-arm/syscalls/setgroups.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setgroups)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setgroups32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setitimer.S b/libc/arch-arm/syscalls/setitimer.S
index c6b5064..dfb7a46 100644
--- a/libc/arch-arm/syscalls/setitimer.S
+++ b/libc/arch-arm/syscalls/setitimer.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setitimer)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setitimer
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setpgid.S b/libc/arch-arm/syscalls/setpgid.S
index 39e1e03..c558063 100644
--- a/libc/arch-arm/syscalls/setpgid.S
+++ b/libc/arch-arm/syscalls/setpgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setpgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setpgid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setpriority.S b/libc/arch-arm/syscalls/setpriority.S
index 5cb84a8..683da34 100644
--- a/libc/arch-arm/syscalls/setpriority.S
+++ b/libc/arch-arm/syscalls/setpriority.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setpriority)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setpriority
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setregid.S b/libc/arch-arm/syscalls/setregid.S
index bc79e9e..2062d05 100644
--- a/libc/arch-arm/syscalls/setregid.S
+++ b/libc/arch-arm/syscalls/setregid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setregid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setregid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setresgid.S b/libc/arch-arm/syscalls/setresgid.S
index 711626e..089c7a7 100644
--- a/libc/arch-arm/syscalls/setresgid.S
+++ b/libc/arch-arm/syscalls/setresgid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setresgid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setresgid32
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setrlimit.S b/libc/arch-arm/syscalls/setrlimit.S
index 0fe2467..02b8db4 100644
--- a/libc/arch-arm/syscalls/setrlimit.S
+++ b/libc/arch-arm/syscalls/setrlimit.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setrlimit)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setrlimit
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/setsid.S b/libc/arch-arm/syscalls/setsid.S
index f11b6fb..d82c347 100644
--- a/libc/arch-arm/syscalls/setsid.S
+++ b/libc/arch-arm/syscalls/setsid.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(setsid)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_setsid
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/settimeofday.S b/libc/arch-arm/syscalls/settimeofday.S
index 2741e05..44f5e66 100644
--- a/libc/arch-arm/syscalls/settimeofday.S
+++ b/libc/arch-arm/syscalls/settimeofday.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(settimeofday)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_settimeofday
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/shutdown.S b/libc/arch-arm/syscalls/shutdown.S
index 0802631..cc96f56 100644
--- a/libc/arch-arm/syscalls/shutdown.S
+++ b/libc/arch-arm/syscalls/shutdown.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(shutdown)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_shutdown
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sigaction.S b/libc/arch-arm/syscalls/sigaction.S
index 04a8b94..699f55d 100644
--- a/libc/arch-arm/syscalls/sigaction.S
+++ b/libc/arch-arm/syscalls/sigaction.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sigaction)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sigaction
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sigaltstack.S b/libc/arch-arm/syscalls/sigaltstack.S
index b541a87..0f34eab 100644
--- a/libc/arch-arm/syscalls/sigaltstack.S
+++ b/libc/arch-arm/syscalls/sigaltstack.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sigaltstack)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sigaltstack
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/signalfd4.S b/libc/arch-arm/syscalls/signalfd4.S
index 1ec7055..6f07fbe 100644
--- a/libc/arch-arm/syscalls/signalfd4.S
+++ b/libc/arch-arm/syscalls/signalfd4.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(signalfd4)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_signalfd4
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sigpending.S b/libc/arch-arm/syscalls/sigpending.S
index 4c7d919..b541288 100644
--- a/libc/arch-arm/syscalls/sigpending.S
+++ b/libc/arch-arm/syscalls/sigpending.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sigpending)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sigpending
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sigprocmask.S b/libc/arch-arm/syscalls/sigprocmask.S
index 7c59a6b..d169474 100644
--- a/libc/arch-arm/syscalls/sigprocmask.S
+++ b/libc/arch-arm/syscalls/sigprocmask.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sigprocmask)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sigprocmask
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/socket.S b/libc/arch-arm/syscalls/socket.S
index e28d252..1003bd4 100644
--- a/libc/arch-arm/syscalls/socket.S
+++ b/libc/arch-arm/syscalls/socket.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(socket)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_socket
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/socketpair.S b/libc/arch-arm/syscalls/socketpair.S
index e699000..65bef68 100644
--- a/libc/arch-arm/syscalls/socketpair.S
+++ b/libc/arch-arm/syscalls/socketpair.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(socketpair)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_socketpair
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/stat.S b/libc/arch-arm/syscalls/stat.S
index a4669a6..17b63cc 100644
--- a/libc/arch-arm/syscalls/stat.S
+++ b/libc/arch-arm/syscalls/stat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(stat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_stat64
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/symlink.S b/libc/arch-arm/syscalls/symlink.S
index 14a753f..ac569af 100644
--- a/libc/arch-arm/syscalls/symlink.S
+++ b/libc/arch-arm/syscalls/symlink.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(symlink)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_symlink
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sync.S b/libc/arch-arm/syscalls/sync.S
index 68c0c0f..ef6cb16 100644
--- a/libc/arch-arm/syscalls/sync.S
+++ b/libc/arch-arm/syscalls/sync.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sync)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sync
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/sysinfo.S b/libc/arch-arm/syscalls/sysinfo.S
index 2a2fb59..a891735 100644
--- a/libc/arch-arm/syscalls/sysinfo.S
+++ b/libc/arch-arm/syscalls/sysinfo.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(sysinfo)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_sysinfo
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/times.S b/libc/arch-arm/syscalls/times.S
index aacb4ca..051f34d 100644
--- a/libc/arch-arm/syscalls/times.S
+++ b/libc/arch-arm/syscalls/times.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(times)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_times
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/truncate.S b/libc/arch-arm/syscalls/truncate.S
index 8c0b24f..3bb68cd 100644
--- a/libc/arch-arm/syscalls/truncate.S
+++ b/libc/arch-arm/syscalls/truncate.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(truncate)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_truncate
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/umask.S b/libc/arch-arm/syscalls/umask.S
index a7bc20b..78e43e0 100644
--- a/libc/arch-arm/syscalls/umask.S
+++ b/libc/arch-arm/syscalls/umask.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(umask)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_umask
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/umount2.S b/libc/arch-arm/syscalls/umount2.S
index 04b28f4..605359e 100644
--- a/libc/arch-arm/syscalls/umount2.S
+++ b/libc/arch-arm/syscalls/umount2.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(umount2)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_umount2
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/uname.S b/libc/arch-arm/syscalls/uname.S
index 4a6f0f4..db0860b 100644
--- a/libc/arch-arm/syscalls/uname.S
+++ b/libc/arch-arm/syscalls/uname.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(uname)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_uname
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/unlink.S b/libc/arch-arm/syscalls/unlink.S
index 87fa79e..8ef33df 100644
--- a/libc/arch-arm/syscalls/unlink.S
+++ b/libc/arch-arm/syscalls/unlink.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(unlink)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_unlink
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/unlinkat.S b/libc/arch-arm/syscalls/unlinkat.S
index 3beae6c..eb822e4 100644
--- a/libc/arch-arm/syscalls/unlinkat.S
+++ b/libc/arch-arm/syscalls/unlinkat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(unlinkat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_unlinkat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/unshare.S b/libc/arch-arm/syscalls/unshare.S
index 0a92b21..ec77f3a 100644
--- a/libc/arch-arm/syscalls/unshare.S
+++ b/libc/arch-arm/syscalls/unshare.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(unshare)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_unshare
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/utimensat.S b/libc/arch-arm/syscalls/utimensat.S
index ceae7fa..976a667 100644
--- a/libc/arch-arm/syscalls/utimensat.S
+++ b/libc/arch-arm/syscalls/utimensat.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(utimensat)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_utimensat
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/utimes.S b/libc/arch-arm/syscalls/utimes.S
index a2d58a3..8966626 100644
--- a/libc/arch-arm/syscalls/utimes.S
+++ b/libc/arch-arm/syscalls/utimes.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(utimes)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_utimes
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/vfork.S b/libc/arch-arm/syscalls/vfork.S
index 3bd2668..89cbda2 100644
--- a/libc/arch-arm/syscalls/vfork.S
+++ b/libc/arch-arm/syscalls/vfork.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(vfork)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_vfork
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/write.S b/libc/arch-arm/syscalls/write.S
index 826e82c..c257915 100644
--- a/libc/arch-arm/syscalls/write.S
+++ b/libc/arch-arm/syscalls/write.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(write)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_write
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/arch-arm/syscalls/writev.S b/libc/arch-arm/syscalls/writev.S
index 16a6df9..521e10c 100644
--- a/libc/arch-arm/syscalls/writev.S
+++ b/libc/arch-arm/syscalls/writev.S
@@ -3,11 +3,10 @@
 #include <sys/linux-syscalls.h>
 
 ENTRY(writev)
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =__NR_writev
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 21d2f1d..0226acd 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -111,11 +111,10 @@
 """ + arm_footer
 
 arm_eabi_call_default = arm_header + """\
-    .save   {r4, r7}
-    stmfd   sp!, {r4, r7}
+    mov     ip, r7
     ldr     r7, =%(idname)s
     swi     #0
-    ldmfd   sp!, {r4, r7}
+    mov     r7, ip
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno