Fix FPU stack order issue and Improve FPU checking flow

This commit is contained in:
Trong Nguyen 2024-10-31 19:25:04 +07:00 committed by ActoryOu
parent 7d76dceaad
commit 0df22355ac

View file

@ -84,6 +84,8 @@ portSAVE_CONTEXT .macro
stsr FPEPC, r19 stsr FPEPC, r19
pushsp r18, r19 pushsp r18, r19
pushsp r14, r15
; Get current TCB, the return value is stored in r10 (CCRH compiler) ; Get current TCB, the return value is stored in r10 (CCRH compiler)
jarl _pvPortGetCurrentTCB, lp jarl _pvPortGetCurrentTCB, lp
st.w sp, 0[r10] st.w sp, 0[r10]
@ -101,14 +103,13 @@ portRESTORE_CONTEXT .macro
; Restore FPU registers if FPU is enabled ; Restore FPU registers if FPU is enabled
mov FPU_MSK, r19 mov FPU_MSK, r19
stsr PSW, r18 popsp r14, r15
tst r18, r19 tst r15, r19
; Jump over next 3 instructions: stsr (4 bytes)*2 + popsp (4 bytes)
; Jump over next 3 instructions: stsr (4 bytes)*2 + popsp (4 bytes)
bz 12 bz 12
popsp r18, r19 popsp r18, r19
ldsr r18, FPEPC ldsr r19, FPEPC
ldsr r19, FPSR ldsr r18, FPSR
;Restore general-purpose registers and EIPSW, EIPC, EIIC, CTPSW, CTPC ;Restore general-purpose registers and EIPSW, EIPC, EIIC, CTPSW, CTPC
popsp r15, r19 popsp r15, r19
@ -146,14 +147,15 @@ SAVE_REGISTER .macro
mov ep, r15 mov ep, r15
stsr CTPSW, r14 stsr CTPSW, r14
stsr CTPC, r13 stsr CTPC, r13
pushsp r13, r19 pushsp r13, r18
mov FPU_MSK, r16 mov FPU_MSK, r16
tst r16, r19 tst r16, r19
bz 12 bz 8
stsr FPSR, r18 stsr FPSR, r17
stsr FPEPC, r19 stsr FPEPC, r18
pushsp r18, r19
pushsp r17, r19
.endm .endm
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -161,15 +163,14 @@ SAVE_REGISTER .macro
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
RESTORE_REGISTER .macro RESTORE_REGISTER .macro
mov FPU_MSK, r16 mov FPU_MSK, r15
stsr PSW, r18 popsp r17, r19
tst r18, r19 tst r19, r15
bz 12 bz 8
popsp r18, r19
ldsr r18, FPEPC ldsr r18, FPEPC
ldsr r19, FPSR ldsr r17, FPSR
popsp r13, r19 popsp r13, r18
ldsr r13, CTPC ldsr r13, CTPC
ldsr r14, CTPSW ldsr r14, CTPSW
mov r15, ep mov r15, ep