51 uint32_t reg_addr = addr;
52 uint32_t reg_data = wdata;
53 asm volatile (
"sw %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
66 uint32_t reg_addr = addr;
67 uint32_t reg_data = (uint32_t)wdata;
68 asm volatile (
"sh %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
79 uint32_t reg_addr = addr;
80 uint32_t reg_data = (uint32_t)wdata;
81 asm volatile (
"sb %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
94 uint32_t reg_addr = addr;
96 asm volatile (
"lw %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
110 uint32_t reg_addr = addr;
112 asm volatile (
"lhu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
126 uint32_t reg_addr = addr;
128 asm volatile (
"lh %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
140 uint32_t reg_addr = addr;
142 asm volatile (
"lbu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
154 uint32_t reg_addr = addr;
156 asm volatile (
"lb %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
173 asm volatile (
"csrr %[dst], %[id]" : [dst]
"=r" (csr_data) : [id]
"i" (csr_id));
185 uint32_t csr_data = data;
186 asm volatile (
"csrw %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
197 uint32_t csr_data = mask;
198 asm volatile (
"csrs %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
209 uint32_t csr_data = mask;
210 asm volatile (
"csrc %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
227 asm volatile (
"csrrw %[dst], %[id], %[src]" : [dst]
"=r" (tmp) : [id]
"i" (csr_id), [src]
"r" (wdata) :
"memory");
242#if defined(__riscv_a) || defined(__riscv_zalrsc)
243 uint32_t amo_addr = addr;
246 asm volatile (
"lr.w %[dst], 0(%[addr])" : [dst]
"=r" (amo_rdata) : [addr]
"r" (amo_addr) :
"memory");
266static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amosc(uint32_t addr, uint32_t wdata) {
268#if defined(__riscv_a) || defined(__riscv_zalrsc)
269 uint32_t amo_addr = addr;
270 uint32_t amo_wdata = wdata;
273 asm volatile (
"sc.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_status) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
294static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoswap(uint32_t addr, uint32_t wdata) {
296#if defined(__riscv_a) || defined(__riscv_zaamo)
297 uint32_t amo_addr = addr;
298 uint32_t amo_wdata = wdata;
301 asm volatile (
"amoswap.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
322static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoadd(uint32_t addr, uint32_t wdata) {
324#if defined(__riscv_a) || defined(__riscv_zaamo)
325 uint32_t amo_addr = addr;
326 uint32_t amo_wdata = wdata;
329 asm volatile (
"amoadd.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
350static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoxor(uint32_t addr, uint32_t wdata) {
352#if defined(__riscv_a) || defined(__riscv_zaamo)
353 uint32_t amo_addr = addr;
354 uint32_t amo_wdata = wdata;
357 asm volatile (
"amoxor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
378static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoand(uint32_t addr, uint32_t wdata) {
380#if defined(__riscv_a) || defined(__riscv_zaamo)
381 uint32_t amo_addr = addr;
382 uint32_t amo_wdata = wdata;
385 asm volatile (
"amoand.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
406static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoor(uint32_t addr, uint32_t wdata) {
408#if defined(__riscv_a) || defined(__riscv_zaamo)
409 uint32_t amo_addr = addr;
410 uint32_t amo_wdata = wdata;
413 asm volatile (
"amoor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
434static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amomin(uint32_t addr, uint32_t wdata) {
436#if defined(__riscv_a) || defined(__riscv_zaamo)
437 uint32_t amo_addr = addr;
438 uint32_t amo_wdata = wdata;
441 asm volatile (
"amomin.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
462static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amomax(uint32_t addr, uint32_t wdata) {
464#if defined(__riscv_a) || defined(__riscv_zaamo)
465 uint32_t amo_addr = addr;
466 uint32_t amo_wdata = wdata;
469 asm volatile (
"amomax.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
490static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amominu(uint32_t addr, uint32_t wdata) {
492#if defined(__riscv_a) || defined(__riscv_zaamo)
493 uint32_t amo_addr = addr;
494 uint32_t amo_wdata = wdata;
497 asm volatile (
"amominu.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
518static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amomaxu(uint32_t addr, uint32_t wdata) {
520#if defined(__riscv_a) || defined(__riscv_zaamo)
521 uint32_t amo_addr = addr;
522 uint32_t amo_wdata = wdata;
525 asm volatile (
"amomaxu.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
548 asm volatile (
"wfi");
Main NEORV32 core library / driver / HAL include file.
static uint32_t neorv32_cpu_amomaxu(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:518
static uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:170
static uint32_t neorv32_cpu_amomin(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:434
void neorv32_cpu_set_mcycle(uint64_t value)
Definition neorv32_cpu.c:47
uint32_t neorv32_cpu_pmp_get_num_regions(void)
Definition neorv32_cpu.c:133
static void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:207
static void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
Definition neorv32_cpu.h:64
static uint32_t neorv32_cpu_amoadd(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:322
uint64_t neorv32_cpu_get_instret(void)
Definition neorv32_cpu.c:89
static uint32_t neorv32_cpu_amominu(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:490
static uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
Definition neorv32_cpu.h:92
static uint32_t neorv32_cpu_amoxor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:350
static uint32_t neorv32_cpu_amolr(uint32_t addr)
Definition neorv32_cpu.h:240
void neorv32_cpu_set_minstret(uint64_t value)
Definition neorv32_cpu.c:114
static void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
Definition neorv32_cpu.h:77
uint32_t neorv32_cpu_hpm_get_num_counters(void)
Definition neorv32_cpu.c:281
static uint32_t neorv32_cpu_amoand(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:378
static uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
Definition neorv32_cpu.h:108
static uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
Definition neorv32_cpu.h:138
static void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:183
static uint32_t neorv32_cpu_amoswap(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:294
static void neorv32_cpu_sleep(void)
Definition neorv32_cpu.h:546
static uint32_t neorv32_cpu_csr_swap(const int csr_id, uint32_t wdata)
Definition neorv32_cpu.h:224
static uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:266
static uint32_t neorv32_cpu_amomax(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:462
int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)
Definition neorv32_cpu.c:213
int neorv32_cpu_hwtrig_get_number(void)
Definition neorv32_cpu.c:405
static void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:195
static int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
Definition neorv32_cpu.h:152
uint64_t neorv32_cpu_get_cycle(void)
Definition neorv32_cpu.c:22
uint64_t neorv32_cpu_get_time(void)
Definition neorv32_cpu.c:64
static uint32_t neorv32_cpu_amoor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:406
uint32_t neorv32_cpu_pmp_get_granularity(void)
Definition neorv32_cpu.c:173
uint32_t neorv32_cpu_hpm_get_size(void)
Definition neorv32_cpu.c:365
static int16_t neorv32_cpu_load_signed_half(uint32_t addr)
Definition neorv32_cpu.h:124
static void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:49