forked from Mirrors/opensbi
include: Add hard FP access macros and defines
This patch adds hardware floating-point (hard FP) access macros and defines. Signed-off-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
lib-objs-y += riscv_asm.o
|
||||
lib-objs-y += riscv_atomic.o
|
||||
lib-objs-y += riscv_hardfp.o
|
||||
lib-objs-y += riscv_locks.o
|
||||
|
||||
lib-objs-y += sbi_console.o
|
||||
|
171
lib/riscv_hardfp.S
Normal file
171
lib/riscv_hardfp.S
Normal file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Western Digital Corporation or its affiliates.
|
||||
*
|
||||
* Authors:
|
||||
* Anup Patel <anup.patel@wdc.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#ifdef __riscv_flen
|
||||
|
||||
#if __riscv_flen != 64
|
||||
# error single-float only is not supported
|
||||
#endif
|
||||
|
||||
#define get_f32(which) fmv.x.s a0, which; jr t0
|
||||
#define put_f32(which) fmv.s.x which, a0; jr t0
|
||||
#if __riscv_xlen == 64
|
||||
# define get_f64(which) fmv.x.d a0, which; jr t0
|
||||
# define put_f64(which) fmv.d.x which, a0; jr t0
|
||||
#else
|
||||
# define get_f64(which) fsd which, 0(a0); jr t0
|
||||
# define put_f64(which) fld which, 0(a0); jr t0
|
||||
#endif
|
||||
|
||||
.text
|
||||
.option norvc
|
||||
.globl get_f32_reg
|
||||
get_f32_reg:
|
||||
get_f32(f0)
|
||||
get_f32(f1)
|
||||
get_f32(f2)
|
||||
get_f32(f3)
|
||||
get_f32(f4)
|
||||
get_f32(f5)
|
||||
get_f32(f6)
|
||||
get_f32(f7)
|
||||
get_f32(f8)
|
||||
get_f32(f9)
|
||||
get_f32(f10)
|
||||
get_f32(f11)
|
||||
get_f32(f12)
|
||||
get_f32(f13)
|
||||
get_f32(f14)
|
||||
get_f32(f15)
|
||||
get_f32(f16)
|
||||
get_f32(f17)
|
||||
get_f32(f18)
|
||||
get_f32(f19)
|
||||
get_f32(f20)
|
||||
get_f32(f21)
|
||||
get_f32(f22)
|
||||
get_f32(f23)
|
||||
get_f32(f24)
|
||||
get_f32(f25)
|
||||
get_f32(f26)
|
||||
get_f32(f27)
|
||||
get_f32(f28)
|
||||
get_f32(f29)
|
||||
get_f32(f30)
|
||||
get_f32(f31)
|
||||
|
||||
.text
|
||||
.globl put_f32_reg
|
||||
put_f32_reg:
|
||||
put_f32(f0)
|
||||
put_f32(f1)
|
||||
put_f32(f2)
|
||||
put_f32(f3)
|
||||
put_f32(f4)
|
||||
put_f32(f5)
|
||||
put_f32(f6)
|
||||
put_f32(f7)
|
||||
put_f32(f8)
|
||||
put_f32(f9)
|
||||
put_f32(f10)
|
||||
put_f32(f11)
|
||||
put_f32(f12)
|
||||
put_f32(f13)
|
||||
put_f32(f14)
|
||||
put_f32(f15)
|
||||
put_f32(f16)
|
||||
put_f32(f17)
|
||||
put_f32(f18)
|
||||
put_f32(f19)
|
||||
put_f32(f20)
|
||||
put_f32(f21)
|
||||
put_f32(f22)
|
||||
put_f32(f23)
|
||||
put_f32(f24)
|
||||
put_f32(f25)
|
||||
put_f32(f26)
|
||||
put_f32(f27)
|
||||
put_f32(f28)
|
||||
put_f32(f29)
|
||||
put_f32(f30)
|
||||
put_f32(f31)
|
||||
|
||||
.text
|
||||
.globl get_f64_reg
|
||||
get_f64_reg:
|
||||
get_f64(f0)
|
||||
get_f64(f1)
|
||||
get_f64(f2)
|
||||
get_f64(f3)
|
||||
get_f64(f4)
|
||||
get_f64(f5)
|
||||
get_f64(f6)
|
||||
get_f64(f7)
|
||||
get_f64(f8)
|
||||
get_f64(f9)
|
||||
get_f64(f10)
|
||||
get_f64(f11)
|
||||
get_f64(f12)
|
||||
get_f64(f13)
|
||||
get_f64(f14)
|
||||
get_f64(f15)
|
||||
get_f64(f16)
|
||||
get_f64(f17)
|
||||
get_f64(f18)
|
||||
get_f64(f19)
|
||||
get_f64(f20)
|
||||
get_f64(f21)
|
||||
get_f64(f22)
|
||||
get_f64(f23)
|
||||
get_f64(f24)
|
||||
get_f64(f25)
|
||||
get_f64(f26)
|
||||
get_f64(f27)
|
||||
get_f64(f28)
|
||||
get_f64(f29)
|
||||
get_f64(f30)
|
||||
get_f64(f31)
|
||||
|
||||
.text
|
||||
.globl put_f64_reg
|
||||
put_f64_reg:
|
||||
put_f64(f0)
|
||||
put_f64(f1)
|
||||
put_f64(f2)
|
||||
put_f64(f3)
|
||||
put_f64(f4)
|
||||
put_f64(f5)
|
||||
put_f64(f6)
|
||||
put_f64(f7)
|
||||
put_f64(f8)
|
||||
put_f64(f9)
|
||||
put_f64(f10)
|
||||
put_f64(f11)
|
||||
put_f64(f12)
|
||||
put_f64(f13)
|
||||
put_f64(f14)
|
||||
put_f64(f15)
|
||||
put_f64(f16)
|
||||
put_f64(f17)
|
||||
put_f64(f18)
|
||||
put_f64(f19)
|
||||
put_f64(f20)
|
||||
put_f64(f21)
|
||||
put_f64(f22)
|
||||
put_f64(f23)
|
||||
put_f64(f24)
|
||||
put_f64(f25)
|
||||
put_f64(f26)
|
||||
put_f64(f27)
|
||||
put_f64(f28)
|
||||
put_f64(f29)
|
||||
put_f64(f30)
|
||||
put_f64(f31)
|
||||
|
||||
#endif
|
@@ -10,6 +10,7 @@
|
||||
#include <sbi/riscv_asm.h>
|
||||
#include <sbi/riscv_barrier.h>
|
||||
#include <sbi/riscv_encoding.h>
|
||||
#include <sbi/riscv_fp.h>
|
||||
#include <sbi/riscv_locks.h>
|
||||
#include <sbi/sbi_bits.h>
|
||||
#include <sbi/sbi_console.h>
|
||||
@@ -48,13 +49,6 @@ static void mstatus_init(struct sbi_scratch *scratch, u32 hartid)
|
||||
csr_write(sptbr, 0);
|
||||
}
|
||||
|
||||
#ifdef __riscv_flen
|
||||
static void init_fp_reg(int i)
|
||||
{
|
||||
/* TODO: */
|
||||
}
|
||||
#endif
|
||||
|
||||
static int fp_init(u32 hartid)
|
||||
{
|
||||
#ifdef __riscv_flen
|
||||
|
Reference in New Issue
Block a user