summaryrefslogtreecommitdiffstats
path: root/arch/frv
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2012-05-01 21:31:42 +0100
committerAl Viro <viro@zeniv.linux.org.uk>2012-06-01 12:59:38 -0400
commita2eddc7c491c916ff9ba39b3563cd779e7b58320 (patch)
tree773f6313bcbe9682a70c28c943d0a5b417f687b1 /arch/frv
parent1e5ef91556d0985e765252754ca90595deafb793 (diff)
downloadlinux-a2eddc7c491c916ff9ba39b3563cd779e7b58320.tar.gz
linux-a2eddc7c491c916ff9ba39b3563cd779e7b58320.tar.bz2
linux-a2eddc7c491c916ff9ba39b3563cd779e7b58320.zip
FRV: Optimise the system call exit path in entry.S [ver #2]
Optimise the system call exit path in entry.S by packing some instructions. Suggested-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/frv')
-rw-r--r--arch/frv/kernel/entry.S13
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S
index 03da263e112a..7d5e000fd32e 100644
--- a/arch/frv/kernel/entry.S
+++ b/arch/frv/kernel/entry.S
@@ -905,18 +905,19 @@ __syscall_call:
__syscall_exit:
LEDS 0x6300
- sti gr8,@(gr28,#REG_GR(8)) ; save return value
+ # keep current PSR in GR23
+ movsg psr,gr23
- # rebuild saved psr - execve will change it for init/main.c
ldi @(gr28,#REG_PSR),gr22
+
+ sti.p gr8,@(gr28,#REG_GR(8)) ; save return value
+
+ # rebuild saved psr - execve will change it for init/main.c
srli gr22,#1,gr5
andi.p gr22,#~PSR_PS,gr22
andi gr5,#PSR_PS,gr5
or gr5,gr22,gr22
- ori gr22,#PSR_S,gr22
-
- # keep current PSR in GR23
- movsg psr,gr23
+ ori.p gr22,#PSR_S,gr22
# make sure we don't miss an interrupt setting need_resched or sigpending between
# sampling and the RETT