diff options
| author | Michal Simek <monstr@monstr.eu> | 2010-06-22 09:25:24 -0400 |
|---|---|---|
| committer | Michal Simek <monstr@monstr.eu> | 2010-08-04 04:22:48 -0400 |
| commit | 06b2864038517905752bdacd95f1f265ef780f3b (patch) | |
| tree | 26f787945b246f594d8e25d89a3fb03ca5234430 | |
| parent | 8b110d157c82f3818fc578b633f0cf7ace9efc22 (diff) | |
microblaze: Simplify _debug_exception function
Keep together all arguments for send_sig function.
Move returning address to delay slot which is executed.
Remove additional send_sig loading. I am using IMM part of
rtbd instruction with r0.
old solution:
addik r11, r0, send_sig
rtbd r11, 0
nop
new solution:
rtbd r0, send_sig
nop
There is one instruction saving.
Signed-off-by: Michal Simek <monstr@monstr.eu>
| -rw-r--r-- | arch/microblaze/kernel/entry.S | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 042657165184..04267ca949f0 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
| @@ -895,15 +895,12 @@ C_ENTRY(_debug_exception): | |||
| 895 | swi r0, r1, PTO+PT_R0; | 895 | swi r0, r1, PTO+PT_R0; |
| 896 | tovirt(r1,r1) | 896 | tovirt(r1,r1) |
| 897 | 897 | ||
| 898 | set_vms; | ||
| 898 | addi r5, r0, SIGTRAP /* send the trap signal */ | 899 | addi r5, r0, SIGTRAP /* send the trap signal */ |
| 899 | add r6, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 900 | add r6, r0, CURRENT_TASK; /* Get current task ptr into r11 */ |
| 900 | addk r7, r0, r0 /* 3rd param zero */ | 901 | addk r7, r0, r0 /* 3rd param zero */ |
| 901 | 902 | dbtrap_call: rtbd r0, send_sig; | |
| 902 | set_vms; | ||
| 903 | addik r11, r0, send_sig; | ||
| 904 | addik r15, r0, dbtrap_call; | 903 | addik r15, r0, dbtrap_call; |
| 905 | dbtrap_call: rtbd r11, 0; | ||
| 906 | nop; | ||
| 907 | 904 | ||
| 908 | set_bip; /* Ints masked for state restore*/ | 905 | set_bip; /* Ints masked for state restore*/ |
| 909 | lwi r11, r1, PTO+PT_MODE; | 906 | lwi r11, r1, PTO+PT_MODE; |
