79 "addi sp, sp, -30*4 \n"
81 "addi sp, sp, -14*4 \n"
100 "sw x18, 16*4(sp) \n"
101 "sw x19, 17*4(sp) \n"
102 "sw x20, 18*4(sp) \n"
103 "sw x21, 19*4(sp) \n"
104 "sw x22, 20*4(sp) \n"
105 "sw x23, 21*4(sp) \n"
106 "sw x24, 22*4(sp) \n"
107 "sw x25, 23*4(sp) \n"
108 "sw x26, 24*4(sp) \n"
109 "sw x27, 25*4(sp) \n"
110 "sw x28, 26*4(sp) \n"
111 "sw x29, 27*4(sp) \n"
112 "sw x30, 28*4(sp) \n"
113 "sw x31, 29*4(sp) \n"
139 "lw x12, 10*4(sp) \n"
140 "lw x13, 11*4(sp) \n"
141 "lw x14, 12*4(sp) \n"
142 "lw x15, 13*4(sp) \n"
144 "lw x16, 14*4(sp) \n"
145 "lw x17, 15*4(sp) \n"
146 "lw x18, 16*4(sp) \n"
147 "lw x19, 17*4(sp) \n"
148 "lw x20, 18*4(sp) \n"
149 "lw x21, 19*4(sp) \n"
150 "lw x22, 20*4(sp) \n"
151 "lw x23, 21*4(sp) \n"
152 "lw x24, 22*4(sp) \n"
153 "lw x25, 23*4(sp) \n"
154 "lw x26, 24*4(sp) \n"
155 "lw x27, 25*4(sp) \n"
156 "lw x28, 26*4(sp) \n"
157 "lw x29, 27*4(sp) \n"
158 "lw x30, 28*4(sp) \n"
159 "lw x31, 29*4(sp) \n"
162 "addi sp, sp, +30*4 \n"
164 "addi sp, sp, +14*4 \n"
186 uint32_t reg_addr = addr;
187 uint32_t reg_data = wdata;
189 asm volatile (
"sw %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
203 uint32_t reg_addr = addr;
204 uint32_t reg_data = (uint32_t)wdata;
206 asm volatile (
"sh %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
218 uint32_t reg_addr = addr;
219 uint32_t reg_data = (uint32_t)wdata;
221 asm volatile (
"sb %[da], 0(%[ad])" : : [da]
"r" (reg_data), [ad]
"r" (reg_addr));
235 uint32_t reg_addr = addr;
238 asm volatile (
"lw %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
254 uint32_t reg_addr = addr;
257 asm volatile (
"lhu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
273 uint32_t reg_addr = addr;
276 asm volatile (
"lh %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
290 uint32_t reg_addr = addr;
293 asm volatile (
"lbu %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
307 uint32_t reg_addr = addr;
310 asm volatile (
"lb %[da], 0(%[ad])" : [da]
"=r" (reg_data) : [ad]
"r" (reg_addr));
332#if defined __riscv_atomic
333 uint32_t amo_addr = addr;
336 asm volatile (
"lr.w %[dst], 0(%[addr])" : [dst]
"=r" (amo_rdata) : [addr]
"r" (amo_addr));
359#if defined __riscv_atomic
360 uint32_t amo_addr = addr;
361 uint32_t amo_wdata = wdata;
364 asm volatile (
"sc.w %[dst], %[src], (%[addr])" : [dst]
"=r" (amo_status) : [src]
"r" (amo_wdata), [addr]
"r" (amo_addr));
383#if defined __riscv_atomic
384 asm volatile (
"sc.w zero, zero, (zero)");
404 asm volatile (
"csrr %[result], %[input_i]" : [result]
"=r" (csr_data) : [input_i]
"i" (csr_id));
418 uint32_t csr_data = data;
420 asm volatile (
"csrw %[input_i], %[input_j]" : : [input_i]
"i" (csr_id), [input_j]
"r" (csr_data));
432 uint32_t csr_data = mask;
434 asm volatile (
"csrs %[input_i], %[input_j]" : : [input_i]
"i" (csr_id), [input_j]
"r" (csr_data));
446 uint32_t csr_data = mask;
448 asm volatile (
"csrc %[input_i], %[input_j]" : : [input_i]
"i" (csr_id), [input_j]
"r" (csr_data));
464 asm volatile (
"wfi");
void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:184
void neorv32_context_restore(void)
Definition neorv32_cpu.h:125
void neorv32_cpu_set_mcycle(uint64_t value)
Definition neorv32_cpu.c:99
void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:430
uint32_t neorv32_cpu_pmp_get_num_regions(void)
Definition neorv32_cpu.c:257
void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
Definition neorv32_cpu.h:201
int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
Definition neorv32_cpu.h:305
uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
Definition neorv32_cpu.h:252
uint64_t neorv32_cpu_get_instret(void)
Definition neorv32_cpu.c:120
uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
Definition neorv32_cpu.h:233
void neorv32_cpu_set_minstret(uint64_t value)
Definition neorv32_cpu.c:149
uint32_t neorv32_cpu_hpm_get_num_counters(void)
Definition neorv32_cpu.c:395
uint32_t neorv32_cpu_load_reservate_word(uint32_t addr)
Definition neorv32_cpu.h:330
void neorv32_cpu_sleep(void)
Definition neorv32_cpu.h:462
uint32_t neorv32_cpu_get_clk_from_prsc(int prsc)
Definition neorv32_cpu.c:224
void neorv32_cpu_invalidate_reservations(void)
Definition neorv32_cpu.h:381
int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)
Definition neorv32_cpu.c:344
void neorv32_cpu_delay_ms(uint32_t time_ms)
Definition neorv32_cpu.c:174
uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:400
uint32_t neorv32_cpu_store_conditional_word(uint32_t addr, uint32_t wdata)
Definition neorv32_cpu.h:357
void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
Definition neorv32_cpu.h:444
void neorv32_context_save(void)
Definition neorv32_cpu.h:74
uint64_t neorv32_cpu_get_cycle(void)
Definition neorv32_cpu.c:70
uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
Definition neorv32_cpu.h:288
void neorv32_cpu_goto_user_mode(void)
Definition neorv32_cpu.c:468
uint32_t neorv32_cpu_pmp_get_granularity(void)
Definition neorv32_cpu.c:302
uint32_t neorv32_cpu_hpm_get_size(void)
Definition neorv32_cpu.c:430
int16_t neorv32_cpu_load_signed_half(uint32_t addr)
Definition neorv32_cpu.h:271
void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
Definition neorv32_cpu.h:216
void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:416