From 3212707a9ab549119ad0ad6441a07fe774c99f3b Mon Sep 17 00:00:00 2001 From: Kimplul Date: Thu, 27 Jul 2023 20:29:28 +0300 Subject: use nifty variable argument count trick + Found it in newlib. This allows the compiler to more effectively optimize away unnecessary register operations. Applied to both kernel and init.c for a slight speed increase. I really should move init.c to some other repository though, the binary files are starting to get annoying --- arch/riscv64/kernel/proc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'arch/riscv64/kernel/proc.c') diff --git a/arch/riscv64/kernel/proc.c b/arch/riscv64/kernel/proc.c index 2cc3f36..a7721e2 100644 --- a/arch/riscv64/kernel/proc.c +++ b/arch/riscv64/kernel/proc.c @@ -35,15 +35,15 @@ void run_init(struct tcb *t, void *fdt) unreachable(); } -void set_args(struct tcb *t, struct sys_ret a) +void set_args(struct tcb *t, size_t n, struct sys_ret a) { struct riscv_regs *r = (struct riscv_regs *)(t->regs) - 1; - r->a0 = a.s; - r->a1 = a.ar0; - r->a2 = a.ar1; - r->a3 = a.ar2; - r->a4 = a.ar3; - r->a5 = a.ar4; + if (n >= 1) r->a0 = a.s; + if (n >= 2) r->a1 = a.ar0; + if (n >= 3) r->a2 = a.ar1; + if (n >= 4) r->a3 = a.ar2; + if (n >= 5) r->a4 = a.ar3; + if (n >= 6) r->a5 = a.ar4; } struct sys_ret get_args(struct tcb *t) -- cgit v1.3