HPM SDK
HPMicro Software Development Kit
riscv_core.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef RISCV_CORE_H
9 #define RISCV_CORE_H
10 
11 #include "hpm_common.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
22 #define write_fcsr(v) __asm volatile("fscsr %0" : : "r"(v))
23 
30 #define clear_csr(csr_num, bit) __asm volatile("csrc %0, %1" : : "i"(csr_num), "r"(bit))
31 
40 #define read_clear_csr(csr_num, bit) ({ volatile uint32_t v = 0; __asm volatile("csrrc %0, %1, %2" : "=r"(v) : "i"(csr_num), "r"(bit)); v; })
41 
50 #define read_set_csr(csr_num, bit) ({ volatile uint32_t v = 0; __asm volatile("csrrs %0, %1, %2" : "=r"(v) : "i"(csr_num), "r"(bit)); v; })
51 
58 #define set_csr(csr_num, bit) __asm volatile("csrs %0, %1" : : "i"(csr_num), "r"(bit))
59 
66 #define write_csr(csr_num, v) __asm volatile("csrw %0, %1" : : "i"(csr_num), "r"(v))
67 
75 #define read_csr(csr_num) ({ uint32_t v; __asm volatile("csrr %0, %1" : "=r"(v) : "i"(csr_num)); v; })
76 
82 #define read_fcsr() ({ uint32_t v; __asm volatile("frcsr %0" : "=r"(v)); v; })
83 
88 #define fencei() __asm volatile("fence.i")
89 
94 #define fencerw() __asm volatile("fence rw, rw")
95 
100 #define fenceiorw() __asm volatile("fence iorw, iorw")
101 
105 #define enable_fpu() read_set_csr(CSR_MSTATUS, CSR_MSTATUS_FS_MASK)
106 
110 #define disable_fpu() read_clear_csr(CSR_MSTATUS, CSR_MSTATUS_FS_MASK)
111 
115 #define clear_fcsr() write_fcsr(0)
116 
117 #ifdef __cplusplus
118 }
119 #endif
120 
121 
122 #endif /* RISCV_CORE_H */