summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-11-22 21:06:40 -0500
committerRich Felker <dalias@aerifal.cx>2014-11-22 21:06:40 -0500
commit0e971b0e3f4b9c99a7ce67b10d851fc885c188d5 (patch)
tree1c61dcfc922542bcc5a2638990ea787256622808 /arch/arm
parent7d310ed1d086d9874b7ca40933ff870a8adc75d9 (diff)
downloadmusl-0e971b0e3f4b9c99a7ce67b10d851fc885c188d5.tar.gz
inline 5- and 6-argument syscalls on arm
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/syscall_arch.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/arm/syscall_arch.h b/arch/arm/syscall_arch.h
index 845f2e4d..c1c94666 100644
--- a/arch/arm/syscall_arch.h
+++ b/arch/arm/syscall_arch.h
@@ -54,10 +54,23 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
- return (__syscall)(n, a, b, c, d, e);
+ register long r7 __asm__("r7") = n;
+ register long r0 __asm__("r0") = a;
+ register long r1 __asm__("r1") = b;
+ register long r2 __asm__("r2") = c;
+ register long r3 __asm__("r3") = d;
+ register long r4 __asm__("r4") = e;
+ __asm_syscall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4));
}
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
- return (__syscall)(n, a, b, c, d, e, f);
+ register long r7 __asm__("r7") = n;
+ register long r0 __asm__("r0") = a;
+ register long r1 __asm__("r1") = b;
+ register long r2 __asm__("r2") = c;
+ register long r3 __asm__("r3") = d;
+ register long r4 __asm__("r4") = e;
+ register long r5 __asm__("r5") = f;
+ __asm_syscall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5));
}