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__
|
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
|
|
||||||
#define portasmHANDLE_INTERRUPT Default_IRQHandler
|
|
||||||
#define portasmHAS_SIFIVE_CLINT 1
|
#define portasmHAS_SIFIVE_CLINT 1
|
||||||
#define portasmHAS_MTIME 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
|
.macro portasmSAVE_ADDITIONAL_REGISTERS
|
||||||
/* save float registers */
|
/* save float registers */
|
||||||
|
/* alloc stack */
|
||||||
addi sp, sp, -(portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
addi sp, sp, -(portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
||||||
#if __riscv_flen == 64
|
|
||||||
fsd f31, 32 * portWORD_SIZE( sp )
|
/* save fcsr */
|
||||||
fsd f30, 31 * portWORD_SIZE( sp )
|
frcsr t0
|
||||||
fsd f29, 30 * portWORD_SIZE( sp )
|
sw t0, 33 * portWORD_SIZE( sp )
|
||||||
fsd f28, 29 * portWORD_SIZE( sp )
|
|
||||||
fsd f27, 28 * portWORD_SIZE( sp )
|
/* save fpr */
|
||||||
fsd f26, 27 * portWORD_SIZE( sp )
|
FS f31, 32 * portWORD_SIZE( sp )
|
||||||
fsd f25, 26 * portWORD_SIZE( sp )
|
FS f30, 31 * portWORD_SIZE( sp )
|
||||||
fsd f24, 25 * portWORD_SIZE( sp )
|
FS f29, 30 * portWORD_SIZE( sp )
|
||||||
fsd f23, 24 * portWORD_SIZE( sp )
|
FS f28, 29 * portWORD_SIZE( sp )
|
||||||
fsd f22, 23 * portWORD_SIZE( sp )
|
FS f27, 28 * portWORD_SIZE( sp )
|
||||||
fsd f21, 22 * portWORD_SIZE( sp )
|
FS f26, 27 * portWORD_SIZE( sp )
|
||||||
fsd f20, 21 * portWORD_SIZE( sp )
|
FS f25, 26 * portWORD_SIZE( sp )
|
||||||
fsd f19, 20 * portWORD_SIZE( sp )
|
FS f24, 25 * portWORD_SIZE( sp )
|
||||||
fsd f18, 19 * portWORD_SIZE( sp )
|
FS f23, 24 * portWORD_SIZE( sp )
|
||||||
fsd f17, 18 * portWORD_SIZE( sp )
|
FS f22, 23 * portWORD_SIZE( sp )
|
||||||
fsd f16, 17 * portWORD_SIZE( sp )
|
FS f21, 22 * portWORD_SIZE( sp )
|
||||||
fsd f15, 16 * portWORD_SIZE( sp )
|
FS f20, 21 * portWORD_SIZE( sp )
|
||||||
fsd f14, 15 * portWORD_SIZE( sp )
|
FS f19, 20 * portWORD_SIZE( sp )
|
||||||
fsd f13, 14 * portWORD_SIZE( sp )
|
FS f18, 19 * portWORD_SIZE( sp )
|
||||||
fsd f12, 13 * portWORD_SIZE( sp )
|
FS f17, 18 * portWORD_SIZE( sp )
|
||||||
fsd f11, 12 * portWORD_SIZE( sp )
|
FS f16, 17 * portWORD_SIZE( sp )
|
||||||
fsd f10, 11 * portWORD_SIZE( sp )
|
FS f15, 16 * portWORD_SIZE( sp )
|
||||||
fsd f9, 10 * portWORD_SIZE( sp )
|
FS f14, 15 * portWORD_SIZE( sp )
|
||||||
fsd f8, 9 * portWORD_SIZE( sp )
|
FS f13, 14 * portWORD_SIZE( sp )
|
||||||
fsd f7, 8 * portWORD_SIZE( sp )
|
FS f12, 13 * portWORD_SIZE( sp )
|
||||||
fsd f6, 7 * portWORD_SIZE( sp )
|
FS f11, 12 * portWORD_SIZE( sp )
|
||||||
fsd f5, 6 * portWORD_SIZE( sp )
|
FS f10, 11 * portWORD_SIZE( sp )
|
||||||
fsd f4, 5 * portWORD_SIZE( sp )
|
FS f9, 10 * portWORD_SIZE( sp )
|
||||||
fsd f3, 4 * portWORD_SIZE( sp )
|
FS f8, 9 * portWORD_SIZE( sp )
|
||||||
fsd f2, 3 * portWORD_SIZE( sp )
|
FS f7, 8 * portWORD_SIZE( sp )
|
||||||
fsd f1, 2 * portWORD_SIZE( sp )
|
FS f6, 7 * portWORD_SIZE( sp )
|
||||||
fsd f0, 1 * portWORD_SIZE( sp )
|
FS f5, 6 * portWORD_SIZE( sp )
|
||||||
#elif __riscv_flen == 32
|
FS f4, 5 * portWORD_SIZE( sp )
|
||||||
fsw f31, 32 * portWORD_SIZE( sp )
|
FS f3, 4 * portWORD_SIZE( sp )
|
||||||
fsw f30, 31 * portWORD_SIZE( sp )
|
FS f2, 3 * portWORD_SIZE( sp )
|
||||||
fsw f29, 30 * portWORD_SIZE( sp )
|
FS f1, 2 * portWORD_SIZE( sp )
|
||||||
fsw f28, 29 * portWORD_SIZE( sp )
|
FS f0, 1 * 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
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro portasmRESTORE_ADDITIONAL_REGISTERS
|
.macro portasmRESTORE_ADDITIONAL_REGISTERS
|
||||||
/* load float registers */
|
/* load float registers */
|
||||||
#if __riscv_flen == 64
|
/* load fcsr */
|
||||||
fld f31, 32 * portWORD_SIZE( sp )
|
lw t0, 33 * portWORD_SIZE( sp )
|
||||||
fld f30, 31 * portWORD_SIZE( sp )
|
fscsr t0
|
||||||
fld f29, 30 * portWORD_SIZE( sp )
|
|
||||||
fld f28, 29 * portWORD_SIZE( sp )
|
/* load fpr */
|
||||||
fld f27, 28 * portWORD_SIZE( sp )
|
FL f31, 32 * portWORD_SIZE( sp )
|
||||||
fld f26, 27 * portWORD_SIZE( sp )
|
FL f30, 31 * portWORD_SIZE( sp )
|
||||||
fld f25, 26 * portWORD_SIZE( sp )
|
FL f29, 30 * portWORD_SIZE( sp )
|
||||||
fld f24, 25 * portWORD_SIZE( sp )
|
FL f28, 29 * portWORD_SIZE( sp )
|
||||||
fld f23, 24 * portWORD_SIZE( sp )
|
FL f27, 28 * portWORD_SIZE( sp )
|
||||||
fld f22, 23 * portWORD_SIZE( sp )
|
FL f26, 27 * portWORD_SIZE( sp )
|
||||||
fld f21, 22 * portWORD_SIZE( sp )
|
FL f25, 26 * portWORD_SIZE( sp )
|
||||||
fld f20, 21 * portWORD_SIZE( sp )
|
FL f24, 25 * portWORD_SIZE( sp )
|
||||||
fld f19, 20 * portWORD_SIZE( sp )
|
FL f23, 24 * portWORD_SIZE( sp )
|
||||||
fld f18, 19 * portWORD_SIZE( sp )
|
FL f22, 23 * portWORD_SIZE( sp )
|
||||||
fld f17, 18 * portWORD_SIZE( sp )
|
FL f21, 22 * portWORD_SIZE( sp )
|
||||||
fld f16, 17 * portWORD_SIZE( sp )
|
FL f20, 21 * portWORD_SIZE( sp )
|
||||||
fld f15, 16 * portWORD_SIZE( sp )
|
FL f19, 20 * portWORD_SIZE( sp )
|
||||||
fld f14, 15 * portWORD_SIZE( sp )
|
FL f18, 19 * portWORD_SIZE( sp )
|
||||||
fld f13, 14 * portWORD_SIZE( sp )
|
FL f17, 18 * portWORD_SIZE( sp )
|
||||||
fld f12, 13 * portWORD_SIZE( sp )
|
FL f16, 17 * portWORD_SIZE( sp )
|
||||||
fld f11, 12 * portWORD_SIZE( sp )
|
FL f15, 16 * portWORD_SIZE( sp )
|
||||||
fld f10, 11 * portWORD_SIZE( sp )
|
FL f14, 15 * portWORD_SIZE( sp )
|
||||||
fld f9, 10 * portWORD_SIZE( sp )
|
FL f13, 14 * portWORD_SIZE( sp )
|
||||||
fld f8, 9 * portWORD_SIZE( sp )
|
FL f12, 13 * portWORD_SIZE( sp )
|
||||||
fld f7, 8 * portWORD_SIZE( sp )
|
FL f11, 12 * portWORD_SIZE( sp )
|
||||||
fld f6, 7 * portWORD_SIZE( sp )
|
FL f10, 11 * portWORD_SIZE( sp )
|
||||||
fld f5, 6 * portWORD_SIZE( sp )
|
FL f9, 10 * portWORD_SIZE( sp )
|
||||||
fld f4, 5 * portWORD_SIZE( sp )
|
FL f8, 9 * portWORD_SIZE( sp )
|
||||||
fld f3, 4 * portWORD_SIZE( sp )
|
FL f7, 8 * portWORD_SIZE( sp )
|
||||||
fld f2, 3 * portWORD_SIZE( sp )
|
FL f6, 7 * portWORD_SIZE( sp )
|
||||||
fld f1, 2 * portWORD_SIZE( sp )
|
FL f5, 6 * portWORD_SIZE( sp )
|
||||||
fld f0, 1 * portWORD_SIZE( sp )
|
FL f4, 5 * portWORD_SIZE( sp )
|
||||||
#elif __riscv_flen == 32
|
FL f3, 4 * portWORD_SIZE( sp )
|
||||||
flw f31, 32 * portWORD_SIZE( sp )
|
FL f2, 3 * portWORD_SIZE( sp )
|
||||||
flw f30, 31 * portWORD_SIZE( sp )
|
FL f1, 2 * portWORD_SIZE( sp )
|
||||||
flw f29, 30 * portWORD_SIZE( sp )
|
FL f0, 1 * portWORD_SIZE( sp )
|
||||||
flw f28, 29 * portWORD_SIZE( sp )
|
|
||||||
flw f27, 28 * portWORD_SIZE( sp )
|
/* free stack */
|
||||||
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
|
|
||||||
addi sp, sp, (portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
addi sp, sp, (portasmADDITIONAL_CONTEXT_SIZE * portWORD_SIZE)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user