From 16028b5a386fa6db79c3fcaf1ffb3e473ec13259 Mon Sep 17 00:00:00 2001 From: Wayne Ren Date: Wed, 17 May 2017 17:32:43 +0800 Subject: [PATCH] arc: Fix the bug in _load_callee_saved_regs load floating register first, or the value of r13 is not correct Signed-off-by: Wayne Ren --- arch/arc/include/swap_macros.h | 48 ++++++++++++++++------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/arch/arc/include/swap_macros.h b/arch/arc/include/swap_macros.h index 1d2a41739bd..f1da57c07b9 100644 --- a/arch/arc/include/swap_macros.h +++ b/arch/arc/include/swap_macros.h @@ -42,6 +42,7 @@ extern "C" { st r26, [sp, ___callee_saved_stack_t_r26_OFFSET] st fp, [sp, ___callee_saved_stack_t_fp_OFFSET] st r30, [sp, ___callee_saved_stack_t_r30_OFFSET] + #ifdef CONFIG_FP_SHARING st r58, [sp, ___callee_saved_stack_t_r58_OFFSET] st r59, [sp, ___callee_saved_stack_t_r59_OFFSET] @@ -72,6 +73,28 @@ extern "C" { /* restore stack pointer from struct tcs */ ld sp, [r2, _thread_offset_to_sp] +#ifdef CONFIG_FP_SHARING + ld r58, [sp, ___callee_saved_stack_t_r58_OFFSET] + ld r59, [sp, ___callee_saved_stack_t_r59_OFFSET] + + ld_s r13, [sp, ___callee_saved_stack_t_fpu_status_OFFSET] + sr r13, [_ARC_V2_FPU_STATUS] + ld_s r13, [sp, ___callee_saved_stack_t_fpu_ctrl_OFFSET] + sr r13, [_ARC_V2_FPU_CTRL] + +#ifdef CONFIG_FP_FPU_DA + ld_s r13, [sp, ___callee_saved_stack_t_dpfp1l_OFFSET] + sr r13, [_ARC_V2_FPU_DPFP1L] + ld_s r13, [sp, ___callee_saved_stack_t_dpfp1h_OFFSET] + sr r13, [_ARC_V2_FPU_DPFP1H] + ld_s r13, [sp, ___callee_saved_stack_t_dpfp2l_OFFSET] + sr r13, [_ARC_V2_FPU_DPFP2L] + ld_s r13, [sp, ___callee_saved_stack_t_dpfp2h_OFFSET] + sr r13, [_ARC_V2_FPU_DPFP2H] +#endif + +#endif + ld_s r13, [sp, ___callee_saved_stack_t_r13_OFFSET] ld_s r14, [sp, ___callee_saved_stack_t_r14_OFFSET] ld_s r15, [sp, ___callee_saved_stack_t_r15_OFFSET] @@ -89,31 +112,6 @@ extern "C" { ld fp, [sp, ___callee_saved_stack_t_fp_OFFSET] ld r30, [sp, ___callee_saved_stack_t_r30_OFFSET] -#ifdef CONFIG_FP_SHARING - ld r58, [sp, ___callee_saved_stack_t_r58_OFFSET] - ld r59, [sp, ___callee_saved_stack_t_r59_OFFSET] - - ld_s r13, [sp, ___callee_saved_stack_t_fpu_status_OFFSET] - sr r13, [_ARC_V2_FPU_STATUS] - - ld_s r13, [sp, ___callee_saved_stack_t_fpu_ctrl_OFFSET] - sr r13, [_ARC_V2_FPU_CTRL] - - -#ifdef CONFIG_FP_FPU_DA - ld_s r13, [sp, ___callee_saved_stack_t_dpfp1l_OFFSET] - sr r13, [_ARC_V2_FPU_DPFP1L] - ld_s r13, [sp, ___callee_saved_stack_t_dpfp1h_OFFSET] - sr r13, [_ARC_V2_FPU_DPFP1H] - ld_s r13, [sp, ___callee_saved_stack_t_dpfp2l_OFFSET] - sr r13, [_ARC_V2_FPU_DPFP2L] - ld_s r13, [sp, ___callee_saved_stack_t_dpfp2h_OFFSET] - sr r13, [_ARC_V2_FPU_DPFP2H] -#endif - -#endif - - add_s sp, sp, ___callee_saved_stack_t_SIZEOF .endm