aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-02-20 22:28:37 -0800
committerAndrew Waterman <andrew@sifive.com>2017-02-20 22:28:37 -0800
commit282321b3a43577532abc54dafa60d0d6cfc74fd2 (patch)
tree2fecc907ccb5ae22df5ab9d9f6ae631f48618594
parentee4249cf363837a8b5551aa6671a901a39786d2f (diff)
downloadriscv-opcodes-282321b3a43577532abc54dafa60d0d6cfc74fd2.zip
riscv-opcodes-282321b3a43577532abc54dafa60d0d6cfc74fd2.tar.gz
riscv-opcodes-282321b3a43577532abc54dafa60d0d6cfc74fd2.tar.bz2
Use gcc csr register constraint
-rw-r--r--encoding.h20
1 files changed, 4 insertions, 16 deletions
diff --git a/encoding.h b/encoding.h
index 0beea49..93cf5cf 100644
--- a/encoding.h
+++ b/encoding.h
@@ -184,30 +184,18 @@
__tmp; })
#define write_csr(reg, val) ({ \
- if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \
- asm volatile ("csrw " #reg ", %0" :: "i"(val)); \
- else \
- asm volatile ("csrw " #reg ", %0" :: "r"(val)); })
+ asm volatile ("csrw " #reg ", %0" :: "rK"(val)); })
#define swap_csr(reg, val) ({ unsigned long __tmp; \
- if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \
- asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "i"(val)); \
- else \
- asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "r"(val)); \
+ asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \
__tmp; })
#define set_csr(reg, bit) ({ unsigned long __tmp; \
- if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \
- asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \
- else \
- asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \
+ asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
__tmp; })
#define clear_csr(reg, bit) ({ unsigned long __tmp; \
- if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \
- asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \
- else \
- asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \
+ asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
__tmp; })
#define rdtime() read_csr(time)