diff options
author | trasz <trasz@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f> | 2020-10-29 15:36:20 +0000 |
---|---|---|
committer | trasz <trasz@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f> | 2020-10-29 15:36:20 +0000 |
commit | 242e982f79110363e97731035c6fa5d0fed644a4 (patch) | |
tree | dc342eaedeed143f4a372e3df060665552185416 | |
parent | 035dff1b4905842b8c4d8c0fc1ada6eedd0801f7 (diff) | |
download | freebsd-242e982f79110363e97731035c6fa5d0fed644a4.tar.gz freebsd-242e982f79110363e97731035c6fa5d0fed644a4.tar.bz2 |
Optimize set_syscall_retval for riscv by predicting the return
value to be zero.
Reviewed by: mhorne, kp
MFC after: 2 weeks
Sponsored by: EPSRC
Differential Revision: https://reviews.freebsd.org/D26990
git-svn-id: http://svn.freebsd.org/base/head@367138 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
-rw-r--r-- | sys/riscv/riscv/vm_machdep.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/riscv/riscv/vm_machdep.c b/sys/riscv/riscv/vm_machdep.c index f00928e385b..f38f1c04caa 100644 --- a/sys/riscv/riscv/vm_machdep.c +++ b/sys/riscv/riscv/vm_machdep.c @@ -132,12 +132,14 @@ cpu_set_syscall_retval(struct thread *td, int error) frame = td->td_frame; - switch (error) { - case 0: + if (__predict_true(error == 0)) { frame->tf_a[0] = td->td_retval[0]; frame->tf_a[1] = td->td_retval[1]; frame->tf_t[0] = 0; /* syscall succeeded */ - break; + return; + } + + switch (error) { case ERESTART: frame->tf_sepc -= 4; /* prev instruction */ break; |