Merge pull request #4046 from balanceTWK/riscv_fpu_k210_20201120
[libcpu/risc-v][K210] add FPU support
This commit is contained in:
commit
ad8d95b1c4
|
@ -70,6 +70,8 @@ CONFIG_RT_VER_NUM=0x40003
|
||||||
CONFIG_ARCH_CPU_64BIT=y
|
CONFIG_ARCH_CPU_64BIT=y
|
||||||
# CONFIG_RT_USING_CPU_FFS is not set
|
# CONFIG_RT_USING_CPU_FFS is not set
|
||||||
CONFIG_ARCH_RISCV=y
|
CONFIG_ARCH_RISCV=y
|
||||||
|
CONFIG_ARCH_RISCV_FPU=y
|
||||||
|
CONFIG_ARCH_RISCV_FPU_S=y
|
||||||
CONFIG_ARCH_RISCV64=y
|
CONFIG_ARCH_RISCV64=y
|
||||||
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
||||||
|
|
||||||
|
@ -150,8 +152,10 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||||
# CONFIG_RT_USING_HWTIMER is not set
|
# CONFIG_RT_USING_HWTIMER is not set
|
||||||
# CONFIG_RT_USING_CPUTIME is not set
|
# CONFIG_RT_USING_CPUTIME is not set
|
||||||
# CONFIG_RT_USING_I2C is not set
|
# CONFIG_RT_USING_I2C is not set
|
||||||
|
# CONFIG_RT_USING_PHY is not set
|
||||||
CONFIG_RT_USING_PIN=y
|
CONFIG_RT_USING_PIN=y
|
||||||
# CONFIG_RT_USING_ADC is not set
|
# CONFIG_RT_USING_ADC is not set
|
||||||
|
# CONFIG_RT_USING_DAC is not set
|
||||||
# CONFIG_RT_USING_PWM is not set
|
# CONFIG_RT_USING_PWM is not set
|
||||||
# CONFIG_RT_USING_MTD_NOR is not set
|
# CONFIG_RT_USING_MTD_NOR is not set
|
||||||
# CONFIG_RT_USING_MTD_NAND is not set
|
# CONFIG_RT_USING_MTD_NAND is not set
|
||||||
|
@ -192,6 +196,7 @@ CONFIG_RT_USING_LIBC=y
|
||||||
CONFIG_RT_USING_POSIX=y
|
CONFIG_RT_USING_POSIX=y
|
||||||
# CONFIG_RT_USING_POSIX_MMAP is not set
|
# CONFIG_RT_USING_POSIX_MMAP is not set
|
||||||
# CONFIG_RT_USING_POSIX_TERMIOS is not set
|
# CONFIG_RT_USING_POSIX_TERMIOS is not set
|
||||||
|
# CONFIG_RT_USING_POSIX_GETLINE is not set
|
||||||
# CONFIG_RT_USING_POSIX_AIO is not set
|
# CONFIG_RT_USING_POSIX_AIO is not set
|
||||||
# CONFIG_RT_USING_MODULE is not set
|
# CONFIG_RT_USING_MODULE is not set
|
||||||
|
|
||||||
|
@ -262,7 +267,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
#
|
#
|
||||||
# IoT - internet of things
|
# IoT - internet of things
|
||||||
#
|
#
|
||||||
|
# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
|
||||||
# CONFIG_PKG_USING_PAHOMQTT is not set
|
# CONFIG_PKG_USING_PAHOMQTT is not set
|
||||||
|
# CONFIG_PKG_USING_UMQTT is not set
|
||||||
# CONFIG_PKG_USING_WEBCLIENT is not set
|
# CONFIG_PKG_USING_WEBCLIENT is not set
|
||||||
# CONFIG_PKG_USING_WEBNET is not set
|
# CONFIG_PKG_USING_WEBNET is not set
|
||||||
# CONFIG_PKG_USING_MONGOOSE is not set
|
# CONFIG_PKG_USING_MONGOOSE is not set
|
||||||
|
@ -308,7 +315,7 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
# CONFIG_PKG_USING_GAGENT_CLOUD is not set
|
# CONFIG_PKG_USING_GAGENT_CLOUD is not set
|
||||||
# CONFIG_PKG_USING_ALI_IOTKIT is not set
|
# CONFIG_PKG_USING_ALI_IOTKIT is not set
|
||||||
# CONFIG_PKG_USING_AZURE is not set
|
# CONFIG_PKG_USING_AZURE is not set
|
||||||
# CONFIG_PKG_USING_TENCENT_IOTHUB is not set
|
# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set
|
||||||
# CONFIG_PKG_USING_JIOT-C-SDK is not set
|
# CONFIG_PKG_USING_JIOT-C-SDK is not set
|
||||||
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
||||||
# CONFIG_PKG_USING_JOYLINK is not set
|
# CONFIG_PKG_USING_JOYLINK is not set
|
||||||
|
@ -330,6 +337,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
# CONFIG_PKG_USING_CAPNP is not set
|
# CONFIG_PKG_USING_CAPNP is not set
|
||||||
# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set
|
# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set
|
||||||
# CONFIG_PKG_USING_AGILE_TELNET is not set
|
# CONFIG_PKG_USING_AGILE_TELNET is not set
|
||||||
|
# CONFIG_PKG_USING_NMEALIB is not set
|
||||||
|
# CONFIG_PKG_USING_AGILE_JSMN is not set
|
||||||
|
# CONFIG_PKG_USING_PDULIB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# security packages
|
# security packages
|
||||||
|
@ -338,6 +348,7 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
# CONFIG_PKG_USING_libsodium is not set
|
# CONFIG_PKG_USING_libsodium is not set
|
||||||
# CONFIG_PKG_USING_TINYCRYPT is not set
|
# CONFIG_PKG_USING_TINYCRYPT is not set
|
||||||
# CONFIG_PKG_USING_TFM is not set
|
# CONFIG_PKG_USING_TFM is not set
|
||||||
|
# CONFIG_PKG_USING_YD_CRYPTO is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# language packages
|
# language packages
|
||||||
|
@ -372,7 +383,9 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set
|
# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set
|
||||||
# CONFIG_PKG_USING_LUNAR_CALENDAR is not set
|
# CONFIG_PKG_USING_LUNAR_CALENDAR is not set
|
||||||
# CONFIG_PKG_USING_BS8116A is not set
|
# CONFIG_PKG_USING_BS8116A is not set
|
||||||
|
# CONFIG_PKG_USING_GPS_RMC is not set
|
||||||
# CONFIG_PKG_USING_URLENCODE is not set
|
# CONFIG_PKG_USING_URLENCODE is not set
|
||||||
|
# CONFIG_PKG_USING_UMCN is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# system packages
|
# system packages
|
||||||
|
@ -396,6 +409,10 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
|
||||||
# CONFIG_PKG_USING_SYSWATCH is not set
|
# CONFIG_PKG_USING_SYSWATCH is not set
|
||||||
# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set
|
# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set
|
||||||
# CONFIG_PKG_USING_PLCCORE is not set
|
# CONFIG_PKG_USING_PLCCORE is not set
|
||||||
|
# CONFIG_PKG_USING_RAMDISK is not set
|
||||||
|
# CONFIG_PKG_USING_MININI is not set
|
||||||
|
# CONFIG_PKG_USING_QBOOT is not set
|
||||||
|
# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# peripheral libraries and drivers
|
# peripheral libraries and drivers
|
||||||
|
@ -441,6 +458,7 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||||
# CONFIG_PKG_USING_RPLIDAR is not set
|
# CONFIG_PKG_USING_RPLIDAR is not set
|
||||||
# CONFIG_PKG_USING_AS608 is not set
|
# CONFIG_PKG_USING_AS608 is not set
|
||||||
# CONFIG_PKG_USING_RC522 is not set
|
# CONFIG_PKG_USING_RC522 is not set
|
||||||
|
# CONFIG_PKG_USING_WS2812B is not set
|
||||||
# CONFIG_PKG_USING_EMBARC_BSP is not set
|
# CONFIG_PKG_USING_EMBARC_BSP is not set
|
||||||
# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set
|
# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set
|
||||||
# CONFIG_PKG_USING_MULTI_RTIMER is not set
|
# CONFIG_PKG_USING_MULTI_RTIMER is not set
|
||||||
|
@ -450,6 +468,12 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||||
# CONFIG_PKG_USING_PMS_SERIES is not set
|
# CONFIG_PKG_USING_PMS_SERIES is not set
|
||||||
# CONFIG_PKG_USING_NUCLEI_SDK is not set
|
# CONFIG_PKG_USING_NUCLEI_SDK is not set
|
||||||
# CONFIG_PKG_USING_CAN_YMODEM is not set
|
# CONFIG_PKG_USING_CAN_YMODEM is not set
|
||||||
|
# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set
|
||||||
|
# CONFIG_PKG_USING_QLED is not set
|
||||||
|
# CONFIG_PKG_USING_PAJ7620 is not set
|
||||||
|
# CONFIG_PKG_USING_AGILE_CONSOLE is not set
|
||||||
|
# CONFIG_PKG_USING_LD3320 is not set
|
||||||
|
# CONFIG_PKG_USING_WK2124 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# miscellaneous packages
|
# miscellaneous packages
|
||||||
|
@ -486,6 +510,9 @@ CONFIG_PKG_KENDRYTE_SDK_VERNUM=0x0055
|
||||||
# CONFIG_PKG_USING_VT100 is not set
|
# CONFIG_PKG_USING_VT100 is not set
|
||||||
# CONFIG_PKG_USING_ULAPACK is not set
|
# CONFIG_PKG_USING_ULAPACK is not set
|
||||||
# CONFIG_PKG_USING_UKAL is not set
|
# CONFIG_PKG_USING_UKAL is not set
|
||||||
|
# CONFIG_PKG_USING_CRCLIB is not set
|
||||||
|
# CONFIG_PKG_USING_THREES is not set
|
||||||
|
# CONFIG_PKG_USING_2048 is not set
|
||||||
CONFIG_BOARD_K210_EVB=y
|
CONFIG_BOARD_K210_EVB=y
|
||||||
CONFIG_BSP_USING_UART_HS=y
|
CONFIG_BSP_USING_UART_HS=y
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ source "$PKGS_DIR/Kconfig"
|
||||||
config BOARD_K210_EVB
|
config BOARD_K210_EVB
|
||||||
bool
|
bool
|
||||||
select ARCH_RISCV64
|
select ARCH_RISCV64
|
||||||
|
select ARCH_RISCV_FPU_S
|
||||||
select PKG_USING_KENDRYTE_SDK
|
select PKG_USING_KENDRYTE_SDK
|
||||||
select RT_USING_COMPONENTS_INIT
|
select RT_USING_COMPONENTS_INIT
|
||||||
select RT_USING_USER_MAIN
|
select RT_USING_USER_MAIN
|
||||||
|
|
|
@ -48,6 +48,8 @@
|
||||||
#define RT_VER_NUM 0x40003
|
#define RT_VER_NUM 0x40003
|
||||||
#define ARCH_CPU_64BIT
|
#define ARCH_CPU_64BIT
|
||||||
#define ARCH_RISCV
|
#define ARCH_RISCV
|
||||||
|
#define ARCH_RISCV_FPU
|
||||||
|
#define ARCH_RISCV_FPU_S
|
||||||
#define ARCH_RISCV64
|
#define ARCH_RISCV64
|
||||||
|
|
||||||
/* RT-Thread Components */
|
/* RT-Thread Components */
|
||||||
|
|
|
@ -38,7 +38,7 @@ if PLATFORM == 'gcc':
|
||||||
OBJDUMP = PREFIX + 'objdump'
|
OBJDUMP = PREFIX + 'objdump'
|
||||||
OBJCPY = PREFIX + 'objcopy'
|
OBJCPY = PREFIX + 'objcopy'
|
||||||
|
|
||||||
DEVICE = ' -mcmodel=medany -march=rv64imafdc -mabi=lp64d'
|
DEVICE = ' -mcmodel=medany -march=rv64imafc -mabi=lp64f -fsingle-precision-constant'
|
||||||
CFLAGS = DEVICE + ' -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields'
|
CFLAGS = DEVICE + ' -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields'
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
|
||||||
LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds'
|
LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds'
|
||||||
|
|
|
@ -106,6 +106,14 @@ config ARCH_RISCV
|
||||||
config ARCH_RISCV_FPU
|
config ARCH_RISCV_FPU
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_RISCV_FPU_S
|
||||||
|
select ARCH_RISCV_FPU
|
||||||
|
bool
|
||||||
|
|
||||||
|
config ARCH_RISCV_FPU_D
|
||||||
|
select ARCH_RISCV_FPU
|
||||||
|
bool
|
||||||
|
|
||||||
config ARCH_RISCV32
|
config ARCH_RISCV32
|
||||||
select ARCH_RISCV
|
select ARCH_RISCV
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2018/10/28 Bernard The unify RISC-V porting implementation
|
* 2018/10/28 Bernard The unify RISC-V porting implementation
|
||||||
* 2018/12/27 Jesven Add SMP support
|
* 2018/12/27 Jesven Add SMP support
|
||||||
|
* 2020/11/20 BalanceTWK Add FPU support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cpuport.h"
|
#include "cpuport.h"
|
||||||
|
@ -72,6 +73,43 @@ rt_hw_context_switch:
|
||||||
* mstatus.mie -> sp(2)
|
* mstatus.mie -> sp(2)
|
||||||
* x(i) -> sp(i-4)
|
* x(i) -> sp(i-4)
|
||||||
*/
|
*/
|
||||||
|
#ifdef ARCH_RISCV_FPU
|
||||||
|
addi sp, sp, -32 * FREGBYTES
|
||||||
|
|
||||||
|
FSTORE f0, 0 * FREGBYTES(sp)
|
||||||
|
FSTORE f1, 1 * FREGBYTES(sp)
|
||||||
|
FSTORE f2, 2 * FREGBYTES(sp)
|
||||||
|
FSTORE f3, 3 * FREGBYTES(sp)
|
||||||
|
FSTORE f4, 4 * FREGBYTES(sp)
|
||||||
|
FSTORE f5, 5 * FREGBYTES(sp)
|
||||||
|
FSTORE f6, 6 * FREGBYTES(sp)
|
||||||
|
FSTORE f7, 7 * FREGBYTES(sp)
|
||||||
|
FSTORE f8, 8 * FREGBYTES(sp)
|
||||||
|
FSTORE f9, 9 * FREGBYTES(sp)
|
||||||
|
FSTORE f10, 10 * FREGBYTES(sp)
|
||||||
|
FSTORE f11, 11 * FREGBYTES(sp)
|
||||||
|
FSTORE f12, 12 * FREGBYTES(sp)
|
||||||
|
FSTORE f13, 13 * FREGBYTES(sp)
|
||||||
|
FSTORE f14, 14 * FREGBYTES(sp)
|
||||||
|
FSTORE f15, 15 * FREGBYTES(sp)
|
||||||
|
FSTORE f16, 16 * FREGBYTES(sp)
|
||||||
|
FSTORE f17, 17 * FREGBYTES(sp)
|
||||||
|
FSTORE f18, 18 * FREGBYTES(sp)
|
||||||
|
FSTORE f19, 19 * FREGBYTES(sp)
|
||||||
|
FSTORE f20, 20 * FREGBYTES(sp)
|
||||||
|
FSTORE f21, 21 * FREGBYTES(sp)
|
||||||
|
FSTORE f22, 22 * FREGBYTES(sp)
|
||||||
|
FSTORE f23, 23 * FREGBYTES(sp)
|
||||||
|
FSTORE f24, 24 * FREGBYTES(sp)
|
||||||
|
FSTORE f25, 25 * FREGBYTES(sp)
|
||||||
|
FSTORE f26, 26 * FREGBYTES(sp)
|
||||||
|
FSTORE f27, 27 * FREGBYTES(sp)
|
||||||
|
FSTORE f28, 28 * FREGBYTES(sp)
|
||||||
|
FSTORE f29, 29 * FREGBYTES(sp)
|
||||||
|
FSTORE f30, 30 * FREGBYTES(sp)
|
||||||
|
FSTORE f31, 31 * FREGBYTES(sp)
|
||||||
|
|
||||||
|
#endif
|
||||||
addi sp, sp, -32 * REGBYTES
|
addi sp, sp, -32 * REGBYTES
|
||||||
STORE sp, (a0)
|
STORE sp, (a0)
|
||||||
|
|
||||||
|
@ -174,7 +212,7 @@ rt_hw_context_switch_exit:
|
||||||
|
|
||||||
LOAD x1, 1 * REGBYTES(sp)
|
LOAD x1, 1 * REGBYTES(sp)
|
||||||
|
|
||||||
li t0, 0x00001800
|
li t0, 0x00007800
|
||||||
csrw mstatus, t0
|
csrw mstatus, t0
|
||||||
LOAD a0, 2 * REGBYTES(sp)
|
LOAD a0, 2 * REGBYTES(sp)
|
||||||
csrs mstatus, a0
|
csrs mstatus, a0
|
||||||
|
@ -209,4 +247,42 @@ rt_hw_context_switch_exit:
|
||||||
LOAD x31, 31 * REGBYTES(sp)
|
LOAD x31, 31 * REGBYTES(sp)
|
||||||
|
|
||||||
addi sp, sp, 32 * REGBYTES
|
addi sp, sp, 32 * REGBYTES
|
||||||
|
|
||||||
|
#ifdef ARCH_RISCV_FPU
|
||||||
|
FLOAD f0, 0 * FREGBYTES(sp)
|
||||||
|
FLOAD f1, 1 * FREGBYTES(sp)
|
||||||
|
FLOAD f2, 2 * FREGBYTES(sp)
|
||||||
|
FLOAD f3, 3 * FREGBYTES(sp)
|
||||||
|
FLOAD f4, 4 * FREGBYTES(sp)
|
||||||
|
FLOAD f5, 5 * FREGBYTES(sp)
|
||||||
|
FLOAD f6, 6 * FREGBYTES(sp)
|
||||||
|
FLOAD f7, 7 * FREGBYTES(sp)
|
||||||
|
FLOAD f8, 8 * FREGBYTES(sp)
|
||||||
|
FLOAD f9, 9 * FREGBYTES(sp)
|
||||||
|
FLOAD f10, 10 * FREGBYTES(sp)
|
||||||
|
FLOAD f11, 11 * FREGBYTES(sp)
|
||||||
|
FLOAD f12, 12 * FREGBYTES(sp)
|
||||||
|
FLOAD f13, 13 * FREGBYTES(sp)
|
||||||
|
FLOAD f14, 14 * FREGBYTES(sp)
|
||||||
|
FLOAD f15, 15 * FREGBYTES(sp)
|
||||||
|
FLOAD f16, 16 * FREGBYTES(sp)
|
||||||
|
FLOAD f17, 17 * FREGBYTES(sp)
|
||||||
|
FLOAD f18, 18 * FREGBYTES(sp)
|
||||||
|
FLOAD f19, 19 * FREGBYTES(sp)
|
||||||
|
FLOAD f20, 20 * FREGBYTES(sp)
|
||||||
|
FLOAD f21, 21 * FREGBYTES(sp)
|
||||||
|
FLOAD f22, 22 * FREGBYTES(sp)
|
||||||
|
FLOAD f23, 23 * FREGBYTES(sp)
|
||||||
|
FLOAD f24, 24 * FREGBYTES(sp)
|
||||||
|
FLOAD f25, 25 * FREGBYTES(sp)
|
||||||
|
FLOAD f26, 26 * FREGBYTES(sp)
|
||||||
|
FLOAD f27, 27 * FREGBYTES(sp)
|
||||||
|
FLOAD f28, 28 * FREGBYTES(sp)
|
||||||
|
FLOAD f29, 29 * FREGBYTES(sp)
|
||||||
|
FLOAD f30, 30 * FREGBYTES(sp)
|
||||||
|
FLOAD f31, 31 * FREGBYTES(sp)
|
||||||
|
|
||||||
|
addi sp, sp, 32 * FREGBYTES
|
||||||
|
#endif
|
||||||
|
|
||||||
mret
|
mret
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2018/10/28 Bernard The unify RISC-V porting code.
|
* 2018/10/28 Bernard The unify RISC-V porting code.
|
||||||
|
* 2020/11/20 BalanceTWK Add FPU support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rthw.h>
|
#include <rthw.h>
|
||||||
|
@ -53,6 +54,40 @@ struct rt_hw_stack_frame
|
||||||
rt_ubase_t t4; /* x29 - t4 - temporary register 4 */
|
rt_ubase_t t4; /* x29 - t4 - temporary register 4 */
|
||||||
rt_ubase_t t5; /* x30 - t5 - temporary register 5 */
|
rt_ubase_t t5; /* x30 - t5 - temporary register 5 */
|
||||||
rt_ubase_t t6; /* x31 - t6 - temporary register 6 */
|
rt_ubase_t t6; /* x31 - t6 - temporary register 6 */
|
||||||
|
#ifdef ARCH_RISCV_FPU
|
||||||
|
rv_floatreg_t f0; /* f0 */
|
||||||
|
rv_floatreg_t f1; /* f1 */
|
||||||
|
rv_floatreg_t f2; /* f2 */
|
||||||
|
rv_floatreg_t f3; /* f3 */
|
||||||
|
rv_floatreg_t f4; /* f4 */
|
||||||
|
rv_floatreg_t f5; /* f5 */
|
||||||
|
rv_floatreg_t f6; /* f6 */
|
||||||
|
rv_floatreg_t f7; /* f7 */
|
||||||
|
rv_floatreg_t f8; /* f8 */
|
||||||
|
rv_floatreg_t f9; /* f9 */
|
||||||
|
rv_floatreg_t f10; /* f10 */
|
||||||
|
rv_floatreg_t f11; /* f11 */
|
||||||
|
rv_floatreg_t f12; /* f12 */
|
||||||
|
rv_floatreg_t f13; /* f13 */
|
||||||
|
rv_floatreg_t f14; /* f14 */
|
||||||
|
rv_floatreg_t f15; /* f15 */
|
||||||
|
rv_floatreg_t f16; /* f16 */
|
||||||
|
rv_floatreg_t f17; /* f17 */
|
||||||
|
rv_floatreg_t f18; /* f18 */
|
||||||
|
rv_floatreg_t f19; /* f19 */
|
||||||
|
rv_floatreg_t f20; /* f20 */
|
||||||
|
rv_floatreg_t f21; /* f21 */
|
||||||
|
rv_floatreg_t f22; /* f22 */
|
||||||
|
rv_floatreg_t f23; /* f23 */
|
||||||
|
rv_floatreg_t f24; /* f24 */
|
||||||
|
rv_floatreg_t f25; /* f25 */
|
||||||
|
rv_floatreg_t f26; /* f26 */
|
||||||
|
rv_floatreg_t f27; /* f27 */
|
||||||
|
rv_floatreg_t f28; /* f28 */
|
||||||
|
rv_floatreg_t f29; /* f29 */
|
||||||
|
rv_floatreg_t f30; /* f30 */
|
||||||
|
rv_floatreg_t f31; /* f31 */
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2018-10-03 Bernard The first version
|
* 2018-10-03 Bernard The first version
|
||||||
|
* 2020/11/20 BalanceTWK Add FPU support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CPUPORT_H__
|
#ifndef CPUPORT_H__
|
||||||
|
@ -24,4 +25,19 @@
|
||||||
#define REGBYTES 4
|
#define REGBYTES 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ARCH_RISCV_FPU
|
||||||
|
#ifdef ARCH_RISCV_FPU_D
|
||||||
|
#define FSTORE fsd
|
||||||
|
#define FLOAD fld
|
||||||
|
#define FREGBYTES 8
|
||||||
|
#define rv_floatreg_t rt_int64_t
|
||||||
|
#endif
|
||||||
|
#ifdef ARCH_RISCV_FPU_S
|
||||||
|
#define FSTORE fsw
|
||||||
|
#define FLOAD flw
|
||||||
|
#define FREGBYTES 4
|
||||||
|
#define rv_floatreg_t rt_int32_t
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,6 +15,43 @@
|
||||||
.align 2
|
.align 2
|
||||||
.global trap_entry
|
.global trap_entry
|
||||||
trap_entry:
|
trap_entry:
|
||||||
|
#ifdef ARCH_RISCV_FPU
|
||||||
|
addi sp, sp, -32 * FREGBYTES
|
||||||
|
|
||||||
|
FSTORE f0, 0 * FREGBYTES(sp)
|
||||||
|
FSTORE f1, 1 * FREGBYTES(sp)
|
||||||
|
FSTORE f2, 2 * FREGBYTES(sp)
|
||||||
|
FSTORE f3, 3 * FREGBYTES(sp)
|
||||||
|
FSTORE f4, 4 * FREGBYTES(sp)
|
||||||
|
FSTORE f5, 5 * FREGBYTES(sp)
|
||||||
|
FSTORE f6, 6 * FREGBYTES(sp)
|
||||||
|
FSTORE f7, 7 * FREGBYTES(sp)
|
||||||
|
FSTORE f8, 8 * FREGBYTES(sp)
|
||||||
|
FSTORE f9, 9 * FREGBYTES(sp)
|
||||||
|
FSTORE f10, 10 * FREGBYTES(sp)
|
||||||
|
FSTORE f11, 11 * FREGBYTES(sp)
|
||||||
|
FSTORE f12, 12 * FREGBYTES(sp)
|
||||||
|
FSTORE f13, 13 * FREGBYTES(sp)
|
||||||
|
FSTORE f14, 14 * FREGBYTES(sp)
|
||||||
|
FSTORE f15, 15 * FREGBYTES(sp)
|
||||||
|
FSTORE f16, 16 * FREGBYTES(sp)
|
||||||
|
FSTORE f17, 17 * FREGBYTES(sp)
|
||||||
|
FSTORE f18, 18 * FREGBYTES(sp)
|
||||||
|
FSTORE f19, 19 * FREGBYTES(sp)
|
||||||
|
FSTORE f20, 20 * FREGBYTES(sp)
|
||||||
|
FSTORE f21, 21 * FREGBYTES(sp)
|
||||||
|
FSTORE f22, 22 * FREGBYTES(sp)
|
||||||
|
FSTORE f23, 23 * FREGBYTES(sp)
|
||||||
|
FSTORE f24, 24 * FREGBYTES(sp)
|
||||||
|
FSTORE f25, 25 * FREGBYTES(sp)
|
||||||
|
FSTORE f26, 26 * FREGBYTES(sp)
|
||||||
|
FSTORE f27, 27 * FREGBYTES(sp)
|
||||||
|
FSTORE f28, 28 * FREGBYTES(sp)
|
||||||
|
FSTORE f29, 29 * FREGBYTES(sp)
|
||||||
|
FSTORE f30, 30 * FREGBYTES(sp)
|
||||||
|
FSTORE f31, 31 * FREGBYTES(sp)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* save thread context to thread stack */
|
/* save thread context to thread stack */
|
||||||
addi sp, sp, -32 * REGBYTES
|
addi sp, sp, -32 * REGBYTES
|
||||||
|
|
|
@ -67,38 +67,38 @@ _start:
|
||||||
csrs mstatus, t0
|
csrs mstatus, t0
|
||||||
|
|
||||||
fssr x0
|
fssr x0
|
||||||
fmv.d.x f0, x0
|
fmv.w.x f0, x0
|
||||||
fmv.d.x f1, x0
|
fmv.w.x f1, x0
|
||||||
fmv.d.x f2, x0
|
fmv.w.x f2, x0
|
||||||
fmv.d.x f3, x0
|
fmv.w.x f3, x0
|
||||||
fmv.d.x f4, x0
|
fmv.w.x f4, x0
|
||||||
fmv.d.x f5, x0
|
fmv.w.x f5, x0
|
||||||
fmv.d.x f6, x0
|
fmv.w.x f6, x0
|
||||||
fmv.d.x f7, x0
|
fmv.w.x f7, x0
|
||||||
fmv.d.x f8, x0
|
fmv.w.x f8, x0
|
||||||
fmv.d.x f9, x0
|
fmv.w.x f9, x0
|
||||||
fmv.d.x f10,x0
|
fmv.w.x f10,x0
|
||||||
fmv.d.x f11,x0
|
fmv.w.x f11,x0
|
||||||
fmv.d.x f12,x0
|
fmv.w.x f12,x0
|
||||||
fmv.d.x f13,x0
|
fmv.w.x f13,x0
|
||||||
fmv.d.x f14,x0
|
fmv.w.x f14,x0
|
||||||
fmv.d.x f15,x0
|
fmv.w.x f15,x0
|
||||||
fmv.d.x f16,x0
|
fmv.w.x f16,x0
|
||||||
fmv.d.x f17,x0
|
fmv.w.x f17,x0
|
||||||
fmv.d.x f18,x0
|
fmv.w.x f18,x0
|
||||||
fmv.d.x f19,x0
|
fmv.w.x f19,x0
|
||||||
fmv.d.x f20,x0
|
fmv.w.x f20,x0
|
||||||
fmv.d.x f21,x0
|
fmv.w.x f21,x0
|
||||||
fmv.d.x f22,x0
|
fmv.w.x f22,x0
|
||||||
fmv.d.x f23,x0
|
fmv.w.x f23,x0
|
||||||
fmv.d.x f24,x0
|
fmv.w.x f24,x0
|
||||||
fmv.d.x f25,x0
|
fmv.w.x f25,x0
|
||||||
fmv.d.x f26,x0
|
fmv.w.x f26,x0
|
||||||
fmv.d.x f27,x0
|
fmv.w.x f27,x0
|
||||||
fmv.d.x f28,x0
|
fmv.w.x f28,x0
|
||||||
fmv.d.x f29,x0
|
fmv.w.x f29,x0
|
||||||
fmv.d.x f30,x0
|
fmv.w.x f30,x0
|
||||||
fmv.d.x f31,x0
|
fmv.w.x f31,x0
|
||||||
|
|
||||||
.option push
|
.option push
|
||||||
.option norelax
|
.option norelax
|
||||||
|
|
Loading…
Reference in New Issue