From 712a15ce6c5fdf9c5156a5954cd6c3551547037c Mon Sep 17 00:00:00 2001 From: Kimplul Date: Fri, 30 Aug 2024 18:50:51 +0300 Subject: speed up ipc_resp a bit + Skip unwinding stack and just jump directly to userspace --- tests/common/arch/riscv64/syscall.h | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'tests/common/arch') diff --git a/tests/common/arch/riscv64/syscall.h b/tests/common/arch/riscv64/syscall.h index aafda82..993d9a7 100644 --- a/tests/common/arch/riscv64/syscall.h +++ b/tests/common/arch/riscv64/syscall.h @@ -16,31 +16,37 @@ static inline struct sys_ret syscall(size_t n, register long a4 __asm__ ("a4") = arg4; register long a5 __asm__ ("a5") = arg5; -#define OUTPUTS "+r" (a0), "=r" (a1), "=r" (a2), "=r" (a3), "=r" (a4), "=r" (a5) +#define OUTPUTS "=r" (a0), "=r" (a1), "=r" (a2), "=r" (a3), "=r" (a4), "=r" (a5) +#define CLOBBERS \ + "a6", "a7", \ + "t0", "t1", "t2", "t3", "t4", "t5", "t6", \ + "memory" if (n == 1) - __asm__ volatile ("ecall" : OUTPUTS : "r" (a0)); + __asm__ volatile ("ecall" : OUTPUTS : "r" (a0) : CLOBBERS); else if (n == 2) - __asm__ volatile ("ecall" : OUTPUTS : "r" (a0), "r" (a1)); + __asm__ volatile ("ecall" : OUTPUTS : "r" (a0), "r" (a1) : CLOBBERS); else if (n == 3) - __asm__ volatile ("ecall" : OUTPUTS : "r" (a0), "r" (a1), - "r" (a2)); + __asm__ volatile ("ecall" : OUTPUTS + : "r" (a0), "r" (a1), "r" (a2) + : CLOBBERS); else if (n == 4) __asm__ volatile ("ecall" : OUTPUTS - : "r" (a0), "r" (a1), "r" (a2), "r" (a3)); + : "r" (a0), "r" (a1), "r" (a2), "r" (a3) + : CLOBBERS); else if (n == 5) __asm__ volatile ("ecall" : OUTPUTS - : "r" (a0), "r" (a1), "r" (a2), "r" (a3), - "r" (a4)); + : "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (a4) + : CLOBBERS); else if (n == 6) __asm__ volatile ("ecall" : OUTPUTS - : "r" (a0), "r" (a1), "r" (a2), "r" (a3), - "r" (a4), "r" (a5)); + : "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (a4), "r" (a5) + : CLOBBERS); #undef OUTPUTS -- cgit v1.3