From 2668e4f639e77cdf71851af2d9fba06074b2c39e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sun, 13 Nov 2016 15:20:59 +0100 Subject: arm: Simplify _ARMV4_Exception_interrupt Move profiling code closer to bsp_interrupt_disable() to allow re-use of r9 later. --- cpukit/score/cpu/arm/arm_exc_interrupt.S | 40 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/cpukit/score/cpu/arm/arm_exc_interrupt.S b/cpukit/score/cpu/arm/arm_exc_interrupt.S index 28da989d37..de5a022fd7 100644 --- a/cpukit/score/cpu/arm/arm_exc_interrupt.S +++ b/cpukit/score/cpu/arm/arm_exc_interrupt.S @@ -112,16 +112,23 @@ _ARMV4_Exception_interrupt: str r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL] str r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL] + /* Call BSP dependent interrupt dispatcher */ #ifdef RTEMS_PROFILING cmp r2, #1 - bne .Lprofiling_entry_done + bne .Lskip_profiling bl _CPU_Counter_read - push {r0, r1} -.Lprofiling_entry_done: -#endif - - /* Call BSP dependent interrupt dispatcher */ + mov SELF_CPU_CONTROL, r0 + bl bsp_interrupt_dispatch + bl _CPU_Counter_read + mov r2, r0 + mov r1, SELF_CPU_CONTROL + GET_SELF_CPU_CONTROL r0 + mov SELF_CPU_CONTROL, r0 + bl _Profiling_Outer_most_interrupt_entry_and_exit +.Lprofiling_done: +#else bl bsp_interrupt_dispatch +#endif /* Decrement interrupt nest and thread dispatch disable level */ ldr r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL] @@ -131,18 +138,6 @@ _ARMV4_Exception_interrupt: str r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL] str r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL] -#ifdef RTEMS_PROFILING - cmp r2, #0 - bne .Lprofiling_exit_done - bl _CPU_Counter_read - pop {r1, r3} - mov r2, r0 - mov r0, SELF_CPU_CONTROL - bl _Profiling_Outer_most_interrupt_entry_and_exit - ldr r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL] -.Lprofiling_exit_done: -#endif - /* Restore stack pointer */ mov sp, SP_OF_INTERRUPTED_CONTEXT @@ -239,4 +234,13 @@ _ARMV4_Exception_interrupt: /* Return from interrupt */ subs pc, lr, #4 +#ifdef RTEMS_PROFILING +#ifdef __thumb__ +.thumb +#endif +.Lskip_profiling: + bl bsp_interrupt_dispatch + b .Lprofiling_done +#endif + #endif /* ARM_MULTILIB_ARCH_V4 */ -- cgit v1.2.3