arch: arm: store/restore regs r0-r3 while making function call.
In benchmark test (test_info) while making function call regs r0 - r4 are modified into called function. Due to this value inside r3 is getting lost. This patch saves and restore the value in r0-r4 regs while making function calls from assembly language. Jira: ZEP-2314 Signed-off-by: Youvedeep Singh <youvedeep.singh@intel.com>
This commit is contained in:
parent
91063a33a4
commit
7f2aaedfd7
2 changed files with 8 additions and 17 deletions
|
@ -110,18 +110,16 @@ _idle_state_cleared:
|
|||
|
||||
ldm r1!,{r0,r3} /* arg in r0, ISR in r3 */
|
||||
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
push {r3}
|
||||
#endif
|
||||
stm sp!,{r0-r3} /* Save r0 to r4 into stack */
|
||||
push {lr}
|
||||
bl read_timer_end_of_isr
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
pop {r3}
|
||||
mov lr,r3
|
||||
pop {r3}
|
||||
#else
|
||||
pop {lr}
|
||||
#endif
|
||||
ldm sp!,{r0-r3} /* Restore r0 to r4 regs */
|
||||
#endif
|
||||
blx r3 /* call ISR */
|
||||
|
||||
|
|
|
@ -185,21 +185,18 @@ _thread_irq_disabled:
|
|||
msr PSP, ip
|
||||
|
||||
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
push {r3}
|
||||
#endif
|
||||
stm sp!,{r0-r3} /* Save regs r0 to r4 on stack */
|
||||
push {lr}
|
||||
|
||||
bl read_timer_end_of_swap
|
||||
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
pop {r3}
|
||||
mov lr,r3
|
||||
pop {r3}
|
||||
#else
|
||||
pop {lr}
|
||||
#endif
|
||||
#endif
|
||||
#endif /* CONFIG_ARMV6_M */
|
||||
ldm sp!,{r0-r3} /* Load back regs ro to r4 */
|
||||
#endif /* CONFIG_EXECUTION_BENCHMARKING */
|
||||
|
||||
/* exc return */
|
||||
bx lr
|
||||
|
@ -363,19 +360,15 @@ _oops:
|
|||
SECTION_FUNC(TEXT, __swap)
|
||||
|
||||
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
push {r3}
|
||||
#endif
|
||||
push {lr}
|
||||
bl read_timer_start_of_swap
|
||||
#if defined(CONFIG_ARMV6_M)
|
||||
pop {r3}
|
||||
mov lr,r3
|
||||
pop {r3}
|
||||
#else
|
||||
pop {lr}
|
||||
#endif
|
||||
#endif
|
||||
#endif /* CONFIG_ARMV6_M */
|
||||
#endif /* CONFIG_EXECUTION_BENCHMARKING */
|
||||
ldr r1, =_kernel
|
||||
ldr r2, [r1, #_kernel_offset_to_current]
|
||||
str r0, [r2, #_thread_offset_to_basepri]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue