1 #ifndef XTHEADMEMIDX_HELPERS_H
2 #define XTHEADMEMIDX_HELPERS_H
7 #define uintX_t unsigned long
9 #define PRE_DEC_LOAD(T, N) \
11 T ## _pre_dec_load_ ## N (T *p) \
13 extern void f ## T ## N (T*, uintX_t); \
19 #define PRE_INC_LOAD(T, N) \
21 T ## _pre_inc_load_ ## N (T *p) \
23 extern void f ## T ## N (T*, uintX_t); \
29 #define POST_DEC_LOAD(T, N) \
31 T ## _post_dec_load_ ## N (T *p) \
33 extern void f ## T ## N (T*, uintX_t); \
39 #define POST_INC_LOAD(T,N) \
41 T ## _post_inc_load_ ## N (T *p) \
43 extern void f ## T ## N (T*,uintX_t); \
49 #define PRE_DEC_STORE(T, N) \
51 T ## _pre_dec_store_ ## N (T *p, T v) \
58 #define PRE_INC_STORE(T, N) \
60 T ## _pre_inc_store_ ## N (T *p, T v) \
67 #define POST_DEC_STORE(T, N) \
69 T ## _post_dec_store_ ## N (T *p, T v) \
76 #define POST_INC_STORE(T, N) \
78 T ## _post_inc_store_ ## N (T *p, T v) \
85 #define LR_REG_IMM(T, IMM) \
87 lr_reg_imm_ ## T ## _ ## IMM (intX_t rs1, intX_t rs2) \
89 return *(T*)(rs1 + (rs2 << IMM)); \
92 #define SR_REG_IMM(T, IMM) \
94 sr_reg_imm_ ## T ## _ ## IMM (intX_t rs1, intX_t rs2, T val) \
96 *(T*)(rs1 + (rs2 << IMM)) = val; \
99 #define LR_REG_IMM_UPD(T, IMM) \
101 lr_reg_imm_upd_ ## T ## _ ## IMM (intX_t *rs1, intX_t rs2) \
103 *rs1 = *rs1 + (rs2 << IMM); \
104 return *(T*)(*rs1); \
107 #define SR_REG_IMM_UPD(T, IMM) \
109 sr_reg_imm_upd_ ## T ## _ ## IMM (intX_t *rs1, intX_t rs2, T val) \
111 *rs1 = *rs1 + (rs2 << IMM); \
115 #define LRU_REG_IMM(T, IMM) \
117 lru_reg_imm_ ## T ## IMM (intX_t rs1, intX_t rs2) \
119 rs2 = (uint32_t)rs2; \
120 return *(T*)(rs1 + (rs2 << IMM)); \
123 #define SRU_REG_IMM(T, IMM) \
125 sr_reg_imm_ ## T ## _ ## IMM (intX_t rs1, intX_t rs2, T val) \
127 rs2 = (uint32_t)rs2; \
128 *(T*)(rs1 + (rs2 << IMM)) = val; \
131 #define LRU_REG_IMM_UPD(T, IMM) \
133 lru_reg_imm_upd_ ## T ## IMM (intX_t rs1, intX_t *rs2) \
135 uintX_t rs2_32 = (uint32_t)*rs2; \
136 intX_t t = rs1 + (rs2_32 << IMM); \
142 #define SRU_REG_IMM_UPD(T, IMM) \
144 sr_reg_imm_upd_ ## T ## _ ## IMM (intX_t rs1, intX_t *rs2, T val) \
146 uintX_t rs2_32 = (uint32_t)*rs2; \
147 intX_t t = rs1 + (rs2_32 << IMM); \
152 #endif /* XTHEADMEMIDX_HELPERS_H */