45 asm volatile (
"jalr x0, 0(%[dst])" : : [dst]
"r" (sw_boot_addr));
46 __builtin_unreachable();
61 uint32_t reg_addr = addr;
62 uint32_t reg_data = wdata;
63 asm volatile (
"sw %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
77 uint32_t reg_addr = addr;
78 uint32_t reg_data = (uint32_t)wdata;
79 asm volatile (
"sh %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
91 uint32_t reg_addr = addr;
92 uint32_t reg_data = (uint32_t)wdata;
93 asm volatile (
"sb %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
107 uint32_t reg_addr = addr;
109 asm volatile (
"lw %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
124 uint32_t reg_addr = addr;
126 asm volatile (
"lhu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
141 uint32_t reg_addr = addr;
143 asm volatile (
"lh %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
156 uint32_t reg_addr = addr;
158 asm volatile (
"lbu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
171 uint32_t reg_addr = addr;
173 asm volatile (
"lb %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
187 asm volatile (
"csrr %[dst], %[id]" : [dst]
"=r" (csr_data) : [id]
"i" (csr_id));
200 uint32_t csr_data = data;
201 asm volatile (
"csrw %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
213 uint32_t csr_data = mask;
214 asm volatile (
"csrs %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
226 uint32_t csr_data = mask;
227 asm volatile (
"csrc %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
241 asm volatile (
"csrrw %[dst], %[id], %[src]" : [dst]
"=r" (tmp) : [id]
"i" (csr_id), [src]
"r" (wdata));
254 asm volatile (
"wfi");
269#if defined __riscv_atomic
270 uint32_t amo_addr = addr;
273 asm volatile (
"lr.w %[dst], 0(%[addr])" : [dst]
"=r" (amo_rdata) : [addr]
"r" (amo_addr));
294inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amosc(uint32_t addr, uint32_t wdata) {
296#if defined __riscv_atomic
297 uint32_t amo_addr = addr;
298 uint32_t amo_wdata = wdata;
301 asm volatile (
"sc.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_status) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
#define NEORV32_CRT0_ENTRY
Definition neorv32.h:183
void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:59
void neorv32_cpu_set_mcycle(uint64_t value)
Definition neorv32_cpu.c:69
void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:211
uint32_t neorv32_cpu_pmp_get_num_regions(void)
Definition neorv32_cpu.c:130
void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
Definition neorv32_cpu.h:75
int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
Definition neorv32_cpu.h:169
uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
Definition neorv32_cpu.h:122
uint64_t neorv32_cpu_get_instret(void)
Definition neorv32_cpu.c:86
uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
Definition neorv32_cpu.h:105
void neorv32_cpu_set_minstret(uint64_t value)
Definition neorv32_cpu.c:111
void neorv32_cpu_soft_restart(void)
Definition neorv32_cpu.h:42
uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:294
uint32_t neorv32_cpu_hpm_get_num_counters(void)
Definition neorv32_cpu.c:282
void neorv32_cpu_sleep(void)
Definition neorv32_cpu.h:252
int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)
Definition neorv32_cpu.c:214
uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:184
void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:224
uint64_t neorv32_cpu_get_cycle(void)
Definition neorv32_cpu.c:44
uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
Definition neorv32_cpu.h:154
uint32_t neorv32_cpu_csr_swap(const int csr_id, uint32_t wdata)
Definition neorv32_cpu.h:238
uint32_t neorv32_cpu_amolr(uint32_t addr)
Definition neorv32_cpu.h:267
uint32_t neorv32_cpu_pmp_get_granularity(void)
Definition neorv32_cpu.c:174
uint32_t neorv32_cpu_hpm_get_size(void)
Definition neorv32_cpu.c:334
int16_t neorv32_cpu_load_signed_half(uint32_t addr)
Definition neorv32_cpu.h:139
void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
Definition neorv32_cpu.h:89
void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:198