mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-05-15 13:25:48 +00:00
contrib/riscv: add zicsr option to csr macros
These were local changes in the riscv-utility.h but got missed during the refactor. Fixes build error for riscv.
This commit is contained in:
@@ -534,6 +534,31 @@
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
#ifdef __rtems__
|
||||
#define read_csr(reg) ({ unsigned long __tmp; \
|
||||
asm volatile (".option push\n.option arch, +zicsr\n" \
|
||||
"csrr %0, " #reg : "=r"(__tmp)); \
|
||||
__tmp; })
|
||||
|
||||
#define write_csr(reg, val) ({ \
|
||||
asm volatile (".option push\n.option arch, +zicsr\n" \
|
||||
"csrw " #reg ", %0" :: "rK"(val)); })
|
||||
|
||||
#define swap_csr(reg, val) ({ unsigned long __tmp; \
|
||||
asm volatile (".option push\n.option arch, +zicsr\n" \
|
||||
"csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \
|
||||
__tmp; })
|
||||
|
||||
#define set_csr(reg, bit) ({ unsigned long __tmp; \
|
||||
asm volatile (".option push\n.option arch, +zicsr\n" \
|
||||
"csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
|
||||
__tmp; })
|
||||
|
||||
#define clear_csr(reg, bit) ({ unsigned long __tmp; \
|
||||
asm volatile (".option push\n.option arch, +zicsr\n" \
|
||||
"csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
|
||||
__tmp; })
|
||||
#else /* __rtems__ */
|
||||
#define read_csr(reg) ({ unsigned long __tmp; \
|
||||
asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \
|
||||
__tmp; })
|
||||
@@ -552,6 +577,7 @@
|
||||
#define clear_csr(reg, bit) ({ unsigned long __tmp; \
|
||||
asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
|
||||
__tmp; })
|
||||
#endif /* __rtems__ */
|
||||
|
||||
#define rdtime() read_csr(time)
|
||||
#define rdcycle() read_csr(cycle)
|
||||
|
||||
Reference in New Issue
Block a user