Thead_common: refactor float-point save/store macro
This commit is contained in:
parent
c9bf3486c6
commit
98c7fbbf8d
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/.idea
|
||||
/cmake-*
|
@ -53,152 +53,106 @@
|
||||
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||
|
||||
#define portasmHANDLE_INTERRUPT Default_IRQHandler
|
||||
#define portasmHAS_SIFIVE_CLINT 1
|
||||
#define portasmHAS_MTIME 1
|
||||
#define portasmADDITIONAL_CONTEXT_SIZE 32 /* Must be even number on 32-bit cores. */
|
||||
|
||||
/* 32 fp, 1 fcsr, 1 padding */
|
||||
#define portasmADDITIONAL_CONTEXT_SIZE 34 /* Must be even number on 32-bit cores. */
|
||||
|
||||
/* C906: lp64d, E907: ilp32f, so __riscv_flen matches with portWORD_SIZE */
|
||||
#if __riscv_flen == 64
|
||||
#define FS fsd
|
||||
#define FL fld
|
||||
#elif __riscv_flen == 32
|
||||
#define FS fsw
|
||||
#define FL flw
|
||||
#endif
|
||||
|
||||
.macro portasmSAVE_ADDITIONAL_REGISTERS
|
||||
/* save float registers */
|
||||
/* alloc stack */
|
||||
addi sp, sp, -(portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
||||
#if __riscv_flen == 64
|
||||
fsd f31, 32 * portWORD_SIZE( sp )
|
||||
fsd f30, 31 * portWORD_SIZE( sp )
|
||||
fsd f29, 30 * portWORD_SIZE( sp )
|
||||
fsd f28, 29 * portWORD_SIZE( sp )
|
||||
fsd f27, 28 * portWORD_SIZE( sp )
|
||||
fsd f26, 27 * portWORD_SIZE( sp )
|
||||
fsd f25, 26 * portWORD_SIZE( sp )
|
||||
fsd f24, 25 * portWORD_SIZE( sp )
|
||||
fsd f23, 24 * portWORD_SIZE( sp )
|
||||
fsd f22, 23 * portWORD_SIZE( sp )
|
||||
fsd f21, 22 * portWORD_SIZE( sp )
|
||||
fsd f20, 21 * portWORD_SIZE( sp )
|
||||
fsd f19, 20 * portWORD_SIZE( sp )
|
||||
fsd f18, 19 * portWORD_SIZE( sp )
|
||||
fsd f17, 18 * portWORD_SIZE( sp )
|
||||
fsd f16, 17 * portWORD_SIZE( sp )
|
||||
fsd f15, 16 * portWORD_SIZE( sp )
|
||||
fsd f14, 15 * portWORD_SIZE( sp )
|
||||
fsd f13, 14 * portWORD_SIZE( sp )
|
||||
fsd f12, 13 * portWORD_SIZE( sp )
|
||||
fsd f11, 12 * portWORD_SIZE( sp )
|
||||
fsd f10, 11 * portWORD_SIZE( sp )
|
||||
fsd f9, 10 * portWORD_SIZE( sp )
|
||||
fsd f8, 9 * portWORD_SIZE( sp )
|
||||
fsd f7, 8 * portWORD_SIZE( sp )
|
||||
fsd f6, 7 * portWORD_SIZE( sp )
|
||||
fsd f5, 6 * portWORD_SIZE( sp )
|
||||
fsd f4, 5 * portWORD_SIZE( sp )
|
||||
fsd f3, 4 * portWORD_SIZE( sp )
|
||||
fsd f2, 3 * portWORD_SIZE( sp )
|
||||
fsd f1, 2 * portWORD_SIZE( sp )
|
||||
fsd f0, 1 * portWORD_SIZE( sp )
|
||||
#elif __riscv_flen == 32
|
||||
fsw f31, 32 * portWORD_SIZE( sp )
|
||||
fsw f30, 31 * portWORD_SIZE( sp )
|
||||
fsw f29, 30 * portWORD_SIZE( sp )
|
||||
fsw f28, 29 * portWORD_SIZE( sp )
|
||||
fsw f27, 28 * portWORD_SIZE( sp )
|
||||
fsw f26, 27 * portWORD_SIZE( sp )
|
||||
fsw f25, 26 * portWORD_SIZE( sp )
|
||||
fsw f24, 25 * portWORD_SIZE( sp )
|
||||
fsw f23, 24 * portWORD_SIZE( sp )
|
||||
fsw f22, 23 * portWORD_SIZE( sp )
|
||||
fsw f21, 22 * portWORD_SIZE( sp )
|
||||
fsw f20, 21 * portWORD_SIZE( sp )
|
||||
fsw f19, 20 * portWORD_SIZE( sp )
|
||||
fsw f18, 19 * portWORD_SIZE( sp )
|
||||
fsw f17, 18 * portWORD_SIZE( sp )
|
||||
fsw f16, 17 * portWORD_SIZE( sp )
|
||||
fsw f15, 16 * portWORD_SIZE( sp )
|
||||
fsw f14, 15 * portWORD_SIZE( sp )
|
||||
fsw f13, 14 * portWORD_SIZE( sp )
|
||||
fsw f12, 13 * portWORD_SIZE( sp )
|
||||
fsw f11, 12 * portWORD_SIZE( sp )
|
||||
fsw f10, 11 * portWORD_SIZE( sp )
|
||||
fsw f9, 10 * portWORD_SIZE( sp )
|
||||
fsw f8, 9 * portWORD_SIZE( sp )
|
||||
fsw f7, 8 * portWORD_SIZE( sp )
|
||||
fsw f6, 7 * portWORD_SIZE( sp )
|
||||
fsw f5, 6 * portWORD_SIZE( sp )
|
||||
fsw f4, 5 * portWORD_SIZE( sp )
|
||||
fsw f3, 4 * portWORD_SIZE( sp )
|
||||
fsw f2, 3 * portWORD_SIZE( sp )
|
||||
fsw f1, 2 * portWORD_SIZE( sp )
|
||||
fsw f0, 1 * portWORD_SIZE( sp )
|
||||
#endif
|
||||
|
||||
/* save fcsr */
|
||||
frcsr t0
|
||||
sw t0, 33 * portWORD_SIZE( sp )
|
||||
|
||||
/* save fpr */
|
||||
FS f31, 32 * portWORD_SIZE( sp )
|
||||
FS f30, 31 * portWORD_SIZE( sp )
|
||||
FS f29, 30 * portWORD_SIZE( sp )
|
||||
FS f28, 29 * portWORD_SIZE( sp )
|
||||
FS f27, 28 * portWORD_SIZE( sp )
|
||||
FS f26, 27 * portWORD_SIZE( sp )
|
||||
FS f25, 26 * portWORD_SIZE( sp )
|
||||
FS f24, 25 * portWORD_SIZE( sp )
|
||||
FS f23, 24 * portWORD_SIZE( sp )
|
||||
FS f22, 23 * portWORD_SIZE( sp )
|
||||
FS f21, 22 * portWORD_SIZE( sp )
|
||||
FS f20, 21 * portWORD_SIZE( sp )
|
||||
FS f19, 20 * portWORD_SIZE( sp )
|
||||
FS f18, 19 * portWORD_SIZE( sp )
|
||||
FS f17, 18 * portWORD_SIZE( sp )
|
||||
FS f16, 17 * portWORD_SIZE( sp )
|
||||
FS f15, 16 * portWORD_SIZE( sp )
|
||||
FS f14, 15 * portWORD_SIZE( sp )
|
||||
FS f13, 14 * portWORD_SIZE( sp )
|
||||
FS f12, 13 * portWORD_SIZE( sp )
|
||||
FS f11, 12 * portWORD_SIZE( sp )
|
||||
FS f10, 11 * portWORD_SIZE( sp )
|
||||
FS f9, 10 * portWORD_SIZE( sp )
|
||||
FS f8, 9 * portWORD_SIZE( sp )
|
||||
FS f7, 8 * portWORD_SIZE( sp )
|
||||
FS f6, 7 * portWORD_SIZE( sp )
|
||||
FS f5, 6 * portWORD_SIZE( sp )
|
||||
FS f4, 5 * portWORD_SIZE( sp )
|
||||
FS f3, 4 * portWORD_SIZE( sp )
|
||||
FS f2, 3 * portWORD_SIZE( sp )
|
||||
FS f1, 2 * portWORD_SIZE( sp )
|
||||
FS f0, 1 * portWORD_SIZE( sp )
|
||||
.endm
|
||||
|
||||
.macro portasmRESTORE_ADDITIONAL_REGISTERS
|
||||
/* load float registers */
|
||||
#if __riscv_flen == 64
|
||||
fld f31, 32 * portWORD_SIZE( sp )
|
||||
fld f30, 31 * portWORD_SIZE( sp )
|
||||
fld f29, 30 * portWORD_SIZE( sp )
|
||||
fld f28, 29 * portWORD_SIZE( sp )
|
||||
fld f27, 28 * portWORD_SIZE( sp )
|
||||
fld f26, 27 * portWORD_SIZE( sp )
|
||||
fld f25, 26 * portWORD_SIZE( sp )
|
||||
fld f24, 25 * portWORD_SIZE( sp )
|
||||
fld f23, 24 * portWORD_SIZE( sp )
|
||||
fld f22, 23 * portWORD_SIZE( sp )
|
||||
fld f21, 22 * portWORD_SIZE( sp )
|
||||
fld f20, 21 * portWORD_SIZE( sp )
|
||||
fld f19, 20 * portWORD_SIZE( sp )
|
||||
fld f18, 19 * portWORD_SIZE( sp )
|
||||
fld f17, 18 * portWORD_SIZE( sp )
|
||||
fld f16, 17 * portWORD_SIZE( sp )
|
||||
fld f15, 16 * portWORD_SIZE( sp )
|
||||
fld f14, 15 * portWORD_SIZE( sp )
|
||||
fld f13, 14 * portWORD_SIZE( sp )
|
||||
fld f12, 13 * portWORD_SIZE( sp )
|
||||
fld f11, 12 * portWORD_SIZE( sp )
|
||||
fld f10, 11 * portWORD_SIZE( sp )
|
||||
fld f9, 10 * portWORD_SIZE( sp )
|
||||
fld f8, 9 * portWORD_SIZE( sp )
|
||||
fld f7, 8 * portWORD_SIZE( sp )
|
||||
fld f6, 7 * portWORD_SIZE( sp )
|
||||
fld f5, 6 * portWORD_SIZE( sp )
|
||||
fld f4, 5 * portWORD_SIZE( sp )
|
||||
fld f3, 4 * portWORD_SIZE( sp )
|
||||
fld f2, 3 * portWORD_SIZE( sp )
|
||||
fld f1, 2 * portWORD_SIZE( sp )
|
||||
fld f0, 1 * portWORD_SIZE( sp )
|
||||
#elif __riscv_flen == 32
|
||||
flw f31, 32 * portWORD_SIZE( sp )
|
||||
flw f30, 31 * portWORD_SIZE( sp )
|
||||
flw f29, 30 * portWORD_SIZE( sp )
|
||||
flw f28, 29 * portWORD_SIZE( sp )
|
||||
flw f27, 28 * portWORD_SIZE( sp )
|
||||
flw f26, 27 * portWORD_SIZE( sp )
|
||||
flw f25, 26 * portWORD_SIZE( sp )
|
||||
flw f24, 25 * portWORD_SIZE( sp )
|
||||
flw f23, 24 * portWORD_SIZE( sp )
|
||||
flw f22, 23 * portWORD_SIZE( sp )
|
||||
flw f21, 22 * portWORD_SIZE( sp )
|
||||
flw f20, 21 * portWORD_SIZE( sp )
|
||||
flw f19, 20 * portWORD_SIZE( sp )
|
||||
flw f18, 19 * portWORD_SIZE( sp )
|
||||
flw f17, 18 * portWORD_SIZE( sp )
|
||||
flw f16, 17 * portWORD_SIZE( sp )
|
||||
flw f15, 16 * portWORD_SIZE( sp )
|
||||
flw f14, 15 * portWORD_SIZE( sp )
|
||||
flw f13, 14 * portWORD_SIZE( sp )
|
||||
flw f12, 13 * portWORD_SIZE( sp )
|
||||
flw f11, 12 * portWORD_SIZE( sp )
|
||||
flw f10, 11 * portWORD_SIZE( sp )
|
||||
flw f9, 10 * portWORD_SIZE( sp )
|
||||
flw f8, 9 * portWORD_SIZE( sp )
|
||||
flw f7, 8 * portWORD_SIZE( sp )
|
||||
flw f6, 7 * portWORD_SIZE( sp )
|
||||
flw f5, 6 * portWORD_SIZE( sp )
|
||||
flw f4, 5 * portWORD_SIZE( sp )
|
||||
flw f3, 4 * portWORD_SIZE( sp )
|
||||
flw f2, 3 * portWORD_SIZE( sp )
|
||||
flw f1, 2 * portWORD_SIZE( sp )
|
||||
flw f0, 1 * portWORD_SIZE( sp )
|
||||
#endif
|
||||
/* load fcsr */
|
||||
lw t0, 33 * portWORD_SIZE( sp )
|
||||
fscsr t0
|
||||
|
||||
/* load fpr */
|
||||
FL f31, 32 * portWORD_SIZE( sp )
|
||||
FL f30, 31 * portWORD_SIZE( sp )
|
||||
FL f29, 30 * portWORD_SIZE( sp )
|
||||
FL f28, 29 * portWORD_SIZE( sp )
|
||||
FL f27, 28 * portWORD_SIZE( sp )
|
||||
FL f26, 27 * portWORD_SIZE( sp )
|
||||
FL f25, 26 * portWORD_SIZE( sp )
|
||||
FL f24, 25 * portWORD_SIZE( sp )
|
||||
FL f23, 24 * portWORD_SIZE( sp )
|
||||
FL f22, 23 * portWORD_SIZE( sp )
|
||||
FL f21, 22 * portWORD_SIZE( sp )
|
||||
FL f20, 21 * portWORD_SIZE( sp )
|
||||
FL f19, 20 * portWORD_SIZE( sp )
|
||||
FL f18, 19 * portWORD_SIZE( sp )
|
||||
FL f17, 18 * portWORD_SIZE( sp )
|
||||
FL f16, 17 * portWORD_SIZE( sp )
|
||||
FL f15, 16 * portWORD_SIZE( sp )
|
||||
FL f14, 15 * portWORD_SIZE( sp )
|
||||
FL f13, 14 * portWORD_SIZE( sp )
|
||||
FL f12, 13 * portWORD_SIZE( sp )
|
||||
FL f11, 12 * portWORD_SIZE( sp )
|
||||
FL f10, 11 * portWORD_SIZE( sp )
|
||||
FL f9, 10 * portWORD_SIZE( sp )
|
||||
FL f8, 9 * portWORD_SIZE( sp )
|
||||
FL f7, 8 * portWORD_SIZE( sp )
|
||||
FL f6, 7 * portWORD_SIZE( sp )
|
||||
FL f5, 6 * portWORD_SIZE( sp )
|
||||
FL f4, 5 * portWORD_SIZE( sp )
|
||||
FL f3, 4 * portWORD_SIZE( sp )
|
||||
FL f2, 3 * portWORD_SIZE( sp )
|
||||
FL f1, 2 * portWORD_SIZE( sp )
|
||||
FL f0, 1 * portWORD_SIZE( sp )
|
||||
|
||||
/* free stack */
|
||||
addi sp, sp, (portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
||||
.endm
|
||||
|
||||
|
Reference in New Issue
Block a user