49 uint32_t reg_addr = addr;
50 uint32_t reg_data = wdata;
51 asm volatile (
"sw %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
62 uint32_t reg_addr = addr;
63 uint32_t reg_data = (uint32_t)wdata;
64 asm volatile (
"sh %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
75 uint32_t reg_addr = addr;
76 uint32_t reg_data = (uint32_t)wdata;
77 asm volatile (
"sb %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr) :
"memory");
88 uint32_t reg_addr = addr;
90 asm volatile (
"lw %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
102 uint32_t reg_addr = addr;
104 asm volatile (
"lhu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
116 uint32_t reg_addr = addr;
118 asm volatile (
"lh %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
130 uint32_t reg_addr = addr;
132 asm volatile (
"lbu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
144 uint32_t reg_addr = addr;
146 asm volatile (
"lb %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr) :
"memory");
163 asm volatile (
"csrr %[dst], %[id]" : [dst]
"=r" (csr_data) : [id]
"i" (csr_id));
175 uint32_t csr_data = data;
176 asm volatile (
"csrw %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
187 uint32_t csr_data = mask;
188 asm volatile (
"csrs %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
199 uint32_t csr_data = mask;
200 asm volatile (
"csrc %[id], %[src]" : : [id]
"i" (csr_id), [src]
"r" (csr_data));
213 asm volatile (
"csrrw %[dst], %[id], %[src]" : [dst]
"=r" (tmp) : [id]
"i" (csr_id), [src]
"r" (wdata));
229 uint32_t amo_addr = addr;
232 asm volatile (
"lr.w %[dst], 0(%[addr])" : [dst]
"=r" (amo_rdata) : [addr]
"r" (amo_addr) :
"memory");
244static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amosc(uint32_t addr, uint32_t wdata) {
246 uint32_t amo_addr = addr;
247 uint32_t amo_wdata = wdata;
250 asm volatile (
"sc.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_status) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
262static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoswap(uint32_t addr, uint32_t wdata) {
264 uint32_t amo_addr = addr;
265 uint32_t amo_wdata = wdata;
268 asm volatile (
"amoswap.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
280static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoadd(uint32_t addr, uint32_t wdata) {
282 uint32_t amo_addr = addr;
283 uint32_t amo_wdata = wdata;
286 asm volatile (
"amoadd.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
298static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoxor(uint32_t addr, uint32_t wdata) {
300 uint32_t amo_addr = addr;
301 uint32_t amo_wdata = wdata;
304 asm volatile (
"amoxor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
316static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoand(uint32_t addr, uint32_t wdata) {
318 uint32_t amo_addr = addr;
319 uint32_t amo_wdata = wdata;
322 asm volatile (
"amoand.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
334static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amoor(uint32_t addr, uint32_t wdata) {
336 uint32_t amo_addr = addr;
337 uint32_t amo_wdata = wdata;
340 asm volatile (
"amoor.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
352static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amomin(uint32_t addr, uint32_t wdata) {
354 uint32_t amo_addr = addr;
355 uint32_t amo_wdata = wdata;
358 asm volatile (
"amomin.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
370static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amomax(uint32_t addr, uint32_t wdata) {
372 uint32_t amo_addr = addr;
373 uint32_t amo_wdata = wdata;
376 asm volatile (
"amomax.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
388static inline uint32_t __attribute__ ((always_inline))
neorv32_cpu_amominu(uint32_t addr, uint32_t wdata) {
390 uint32_t amo_addr = addr;
391 uint32_t amo_wdata = wdata;
394 asm volatile (
"amominu.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_amomaxu(uint32_t addr, uint32_t wdata) {
408 uint32_t amo_addr = addr;
409 uint32_t amo_wdata = wdata;
412 asm volatile (
"amomaxu.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_rdata) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr) :
"memory");
429 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:406
static uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:160
static uint32_t neorv32_cpu_amomin(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:352
void neorv32_cpu_set_mcycle(uint64_t value)
Definition neorv32_cpu.c:43
uint32_t neorv32_cpu_pmp_get_num_regions(void)
Definition neorv32_cpu.c:120
static void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:197
static void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
Definition neorv32_cpu.h:60
static uint32_t neorv32_cpu_amoadd(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:280
uint64_t neorv32_cpu_get_instret(void)
Definition neorv32_cpu.c:81
static uint32_t neorv32_cpu_amominu(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:388
static uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
Definition neorv32_cpu.h:86
static uint32_t neorv32_cpu_amoxor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:298
static uint32_t neorv32_cpu_amolr(uint32_t addr)
Definition neorv32_cpu.h:227
void neorv32_cpu_set_minstret(uint64_t value)
Definition neorv32_cpu.c:104
static void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
Definition neorv32_cpu.h:73
uint32_t neorv32_cpu_hpm_get_num_counters(void)
Definition neorv32_cpu.c:259
static uint32_t neorv32_cpu_amoand(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:316
static uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
Definition neorv32_cpu.h:100
static uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
Definition neorv32_cpu.h:128
static void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:173
static uint32_t neorv32_cpu_amoswap(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:262
static void neorv32_cpu_sleep(void)
Definition neorv32_cpu.h:427
static uint32_t neorv32_cpu_csr_swap(const int csr_id, uint32_t wdata)
Definition neorv32_cpu.h:210
static uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:244
static uint32_t neorv32_cpu_amomax(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:370
int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)
Definition neorv32_cpu.c:194
int neorv32_cpu_hwtrig_get_number(void)
Definition neorv32_cpu.c:378
static void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:185
static int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
Definition neorv32_cpu.h:142
uint64_t neorv32_cpu_get_cycle(void)
Definition neorv32_cpu.c:20
uint64_t neorv32_cpu_get_time(void)
Definition neorv32_cpu.c:58
static uint32_t neorv32_cpu_amoor(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:334
uint32_t neorv32_cpu_pmp_get_granularity(void)
Definition neorv32_cpu.c:157
uint32_t neorv32_cpu_hpm_get_size(void)
Definition neorv32_cpu.c:340
static int16_t neorv32_cpu_load_signed_half(uint32_t addr)
Definition neorv32_cpu.h:114
static void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:47