summaryrefslogtreecommitdiffstats
path: root/arch/microblaze
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2010-06-22 16:25:31 +0200
committerMichal Simek <monstr@monstr.eu>2010-08-04 10:30:06 +0200
commitc318d483b3d9cf68d791b4024760cb171dae1215 (patch)
tree56ab8626cfa2b248870c04018e22ed6aa18b7f5d /arch/microblaze
parentmicroblaze: Implement clear_ums macro and fix SAVE_STATE macro (diff)
downloadlinux-c318d483b3d9cf68d791b4024760cb171dae1215.tar.xz
linux-c318d483b3d9cf68d791b4024760cb171dae1215.zip
microblaze: Optimize hw exception rutine
Remove set_vms because UMS is cleared and VMS is already setup. Optimize function calling which save one additional instruction. Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze')
-rw-r--r--arch/microblaze/kernel/entry.S22
1 files changed, 6 insertions, 16 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S
index 5529f64e97e8..ff8d9872c774 100644
--- a/arch/microblaze/kernel/entry.S
+++ b/arch/microblaze/kernel/entry.S
@@ -562,10 +562,8 @@ C_ENTRY(full_exception_trap):
nop
mts rfsr, r0; /* Clear sticky fsr */
nop
- addik r12, r0, full_exception
- set_vms;
- rted r12, 0;
- nop;
+ rted r0, full_exception
+ nop
/*
* Unaligned data trap.
@@ -599,11 +597,8 @@ C_ENTRY(unaligned_data_trap):
nop
mfs r4, rear /* EAR */
nop
+ rtbd r0, _unaligned_data_exception
addik r7, r1, PTO /* parameter struct pt_regs * regs */
- addik r12, r0, _unaligned_data_exception
- set_vms;
- rtbd r12, 0; /* interrupts enabled */
- nop;
/*
* Page fault traps.
@@ -635,10 +630,8 @@ C_ENTRY(page_fault_data_trap):
nop
mfs r7, resr /* parameter unsigned long error_code */
nop
- addik r12, r0, do_page_fault
- set_vms;
- rted r12, 0; /* interrupts enabled */
- nop;
+ rted r0, do_page_fault
+ nop
C_ENTRY(page_fault_instr_trap):
SAVE_STATE /* Save registers.*/
@@ -650,11 +643,8 @@ C_ENTRY(page_fault_instr_trap):
addik r5, r1, PTO /* parameter struct pt_regs * regs */
mfs r6, rear /* parameter unsigned long address */
nop
+ rted r0, do_page_fault
ori r7, r0, 0 /* parameter unsigned long error_code */
- addik r12, r0, do_page_fault
- set_vms;
- rted r12, 0; /* interrupts enabled */
- nop;
/* Entry point used to return from an exception. */
C_ENTRY(ret_from_exc):