[libcpu/risc-v][K210] add FPU support
This commit is contained in:
parent
9dc0bbb814
commit
c8deffcf56
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue