53 uint32_t reg_addr = addr;
54 uint32_t reg_data = wdata;
55 asm volatile (
"sw %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
69 uint32_t reg_addr = addr;
70 uint32_t reg_data = (uint32_t)wdata;
71 asm volatile (
"sh %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
83 uint32_t reg_addr = addr;
84 uint32_t reg_data = (uint32_t)wdata;
85 asm volatile (
"sb %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
99 uint32_t reg_addr = addr;
101 asm volatile (
"lw %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
116 uint32_t reg_addr = addr;
118 asm volatile (
"lhu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
133 uint32_t reg_addr = addr;
135 asm volatile (
"lh %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
148 uint32_t reg_addr = addr;
150 asm volatile (
"lbu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
163 uint32_t reg_addr = addr;
165 asm volatile (
"lb %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
184 asm volatile (
"csrr %[dst], %[id]" : [dst]
"=r" (csr_data) : [id]
"i" (csr_id));
197 uint32_t csr_data = data;
198 asm volatile (
"csrw %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
210 uint32_t csr_data = mask;
211 asm volatile (
"csrs %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
223 uint32_t csr_data = mask;
224 asm volatile (
"csrc %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
243 asm volatile (
"csrrw %[dst], %[id], %[src]" : [dst]
"=r" (tmp) : [id]
"i" (csr_id), [src]
"r" (wdata));
259#if defined(__riscv_a) || defined(__riscv_zalrsc)
260 uint32_t amo_addr = addr;
263 asm volatile (
"lr.w %[dst], 0(%[addr])" : [dst]
"=r" (amo_rdata) : [addr]
"r" (amo_addr));
284inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amosc(uint32_t addr, uint32_t wdata) {
286#if defined(__riscv_a) || defined(__riscv_zalrsc)
287 uint32_t amo_addr = addr;
288 uint32_t amo_wdata = wdata;
291 asm volatile (
"sc.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_status) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
315#if defined(__riscv_a) || defined(__riscv_zaamo)
316 uint32_t amo_addr = addr;
317 uint32_t amo_wdata = wdata;
320 asm volatile (
"amoswap.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
344#if defined(__riscv_a) || defined(__riscv_zaamo)
345 uint32_t amo_addr = addr;
346 uint32_t amo_wdata = wdata;
349 asm volatile (
"amoadd.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
373#if defined(__riscv_a) || defined(__riscv_zaamo)
374 uint32_t amo_addr = addr;
375 uint32_t amo_wdata = wdata;
378 asm volatile (
"amoxor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
402#if defined(__riscv_a) || defined(__riscv_zaamo)
403 uint32_t amo_addr = addr;
404 uint32_t amo_wdata = wdata;
407 asm volatile (
"amoand.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
429inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoor(uint32_t addr, uint32_t wdata) {
431#if defined(__riscv_a) || defined(__riscv_zaamo)
432 uint32_t amo_addr = addr;
433 uint32_t amo_wdata = wdata;
436 asm volatile (
"amoor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
460#if defined(__riscv_a) || defined(__riscv_zaamo)
461 uint32_t amo_addr = addr;
462 uint32_t amo_wdata = wdata;
465 asm volatile (
"amomin.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
489#if defined(__riscv_a) || defined(__riscv_zaamo)
490 uint32_t amo_addr = addr;
491 uint32_t amo_wdata = wdata;
494 asm volatile (
"amomax.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
518#if defined(__riscv_a) || defined(__riscv_zaamo)
519 uint32_t amo_addr = addr;
520 uint32_t amo_wdata = wdata;
523 asm volatile (
"amominu.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
547#if defined(__riscv_a) || defined(__riscv_zaamo)
548 uint32_t amo_addr = addr;
549 uint32_t amo_wdata = wdata;
552 asm volatile (
"amomaxu.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
577 asm volatile (
"wfi");
Main NEORV32 core library / driver / HAL include file.
void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:51
uint32_t neorv32_cpu_amoxor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:371
void neorv32_cpu_set_mcycle(uint64_t value)
Definition neorv32_cpu.c:47
void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:208
uint32_t neorv32_cpu_pmp_get_num_regions(void)
Definition neorv32_cpu.c:133
void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
Definition neorv32_cpu.h:67
int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
Definition neorv32_cpu.h:161
uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
Definition neorv32_cpu.h:114
uint64_t neorv32_cpu_get_instret(void)
Definition neorv32_cpu.c:89
uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
Definition neorv32_cpu.h:97
uint32_t neorv32_cpu_amoand(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:400
void neorv32_cpu_set_minstret(uint64_t value)
Definition neorv32_cpu.c:114
uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:284
uint32_t neorv32_cpu_amominu(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:516
uint32_t neorv32_cpu_hpm_get_num_counters(void)
Definition neorv32_cpu.c:281
void neorv32_cpu_sleep(void)
Definition neorv32_cpu.h:575
uint32_t neorv32_cpu_amoadd(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:342
uint32_t neorv32_cpu_amoor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:429
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
uint32_t neorv32_cpu_amoswap(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:313
uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:181
uint32_t neorv32_cpu_amomax(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:487
uint32_t neorv32_cpu_amomin(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:458
void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:221
uint64_t neorv32_cpu_get_cycle(void)
Definition neorv32_cpu.c:22
uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
Definition neorv32_cpu.h:146
uint32_t neorv32_cpu_csr_swap(const int csr_id, uint32_t wdata)
Definition neorv32_cpu.h:240
uint64_t neorv32_cpu_get_time(void)
Definition neorv32_cpu.c:64
uint32_t neorv32_cpu_amolr(uint32_t addr)
Definition neorv32_cpu.h:257
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
uint32_t neorv32_cpu_amomaxu(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:545
int16_t neorv32_cpu_load_signed_half(uint32_t addr)
Definition neorv32_cpu.h:131
void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
Definition neorv32_cpu.h:81
void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:195