From 5f386b7e0911df7b3f2be305dfe79537e0b34f13 Mon Sep 17 00:00:00 2001 From: likailong Date: Thu, 7 Jan 2021 21:45:24 +0800 Subject: [PATCH] Description: fix float-abi=soft bug Reviewed-by: shenwei --- kernel/arch/arm/cortex-m4/iar/los_dispatch.S | 13 +++++++++++++ kernel/arch/arm/cortex-m4/iar/los_exc.S | 3 +++ kernel/arch/arm/cortex-m7/gcc/los_dispatch.S | 14 ++++++++++++++ kernel/arch/arm/cortex-m7/gcc/los_exc.S | 3 +++ .../project/los_demo.ewp | 7 ++++--- targets/cortex-m7_nucleo_f767zi_gcc/Makefile | 3 ++- targets/cortex-m7_nucleo_f767zi_gcc/liteos_m.mk | 2 +- 7 files changed, 40 insertions(+), 5 deletions(-) diff --git a/kernel/arch/arm/cortex-m4/iar/los_dispatch.S b/kernel/arch/arm/cortex-m4/iar/los_dispatch.S index d540c75d..bc5608d1 100644 --- a/kernel/arch/arm/cortex-m4/iar/los_dispatch.S +++ b/kernel/arch/arm/cortex-m4/iar/los_dispatch.S @@ -77,6 +77,8 @@ HalStartToRun STRH R7, [R0 , #4] LDR R12, [R0] +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) ADD R12, R12, #100 LDMFD R12!, {R0-R7} @@ -84,7 +86,12 @@ HalStartToRun MSR PSP, R12 VPUSH S0; VPOP S0; +#else + ADD R12, R12, #100 + LDMFD R12!, {R0-R7} + MSR PSP, R12 +#endif MOV LR, R5 ;MSR xPSR, R7 @@ -120,7 +127,10 @@ HalTaskSwitch MRS R0, PSP STMFD R0!, {R4-R12} +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) VSTMDB R0!, {D8-D15} +#endif LDR R5, =g_losTask LDR R6, [R5] @@ -144,7 +154,10 @@ HalTaskSwitch STRH R7, [R0 , #4] LDR R1, [R0] +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) VLDMIA R1!, {D8-D15} +#endif LDMFD R1!, {R4-R12} MSR PSP, R1 diff --git a/kernel/arch/arm/cortex-m4/iar/los_exc.S b/kernel/arch/arm/cortex-m4/iar/los_exc.S index cd356889..653632c0 100644 --- a/kernel/arch/arm/cortex-m4/iar/los_exc.S +++ b/kernel/arch/arm/cortex-m4/iar/los_exc.S @@ -204,7 +204,10 @@ _ExcInMSP PUSH {R3} MRS R12, PRIMASK ; store message-->exc: disable int? PUSH {R4-R12} ; store message-->exc: {R4-R12} +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) VPUSH {D8-D15} +#endif B _handleEntry _NoFloatInMsp diff --git a/kernel/arch/arm/cortex-m7/gcc/los_dispatch.S b/kernel/arch/arm/cortex-m7/gcc/los_dispatch.S index a1a446ec..aa56c140 100644 --- a/kernel/arch/arm/cortex-m7/gcc/los_dispatch.S +++ b/kernel/arch/arm/cortex-m7/gcc/los_dispatch.S @@ -77,6 +77,8 @@ HalStartToRun: strh r7, [r0 , #4] ldr r12, [r0] +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) add r12, r12, #100 ldmfd r12!, {r0-r7} @@ -84,6 +86,12 @@ HalStartToRun: msr psp, r12 vpush {S0} vpop {S0} +#else + add r12, r12, #36 + + ldmfd r12!, {r0-r7} + msr psp, r12 +#endif mov lr, r5 //MSR xPSR, R7 @@ -155,7 +163,10 @@ HalTaskSwitch: stmfd r0!, {r4-r12} +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) vstmdb r0!, {d8-d15} +#endif ldr r5, =g_losTask ldr r6, [r5] str r0, [r6] @@ -179,7 +190,10 @@ HalTaskSwitch: ldr r1, [r0] +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) vldmia r1!, {d8-d15} +#endif ldmfd r1!, {r4-r12} msr psp, r1 diff --git a/kernel/arch/arm/cortex-m7/gcc/los_exc.S b/kernel/arch/arm/cortex-m7/gcc/los_exc.S index f39d9942..46f01bf8 100644 --- a/kernel/arch/arm/cortex-m7/gcc/los_exc.S +++ b/kernel/arch/arm/cortex-m7/gcc/los_exc.S @@ -282,7 +282,10 @@ _ExcInMSP: PUSH {R3} MRS R12, PRIMASK // store message-->exc: disable int? PUSH {R4-R12} // store message-->exc: {R4-R12} +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) VPUSH {D8-D15} +#endif B _handleEntry .fnend diff --git a/targets/cortex-m4_stm32f429ig_fire-challenger_iar/project/los_demo.ewp b/targets/cortex-m4_stm32f429ig_fire-challenger_iar/project/los_demo.ewp index 5b8cebca..6428758e 100644 --- a/targets/cortex-m4_stm32f429ig_fire-challenger_iar/project/los_demo.ewp +++ b/targets/cortex-m4_stm32f429ig_fire-challenger_iar/project/los_demo.ewp @@ -66,7 +66,7 @@