Lines Matching full:csr
8 #include "cpu-csr.h"
165 const CSRInfo *csr;
170 csr = &csr_info[csr_num];
171 if (csr->offset == 0) {
174 return csr;
177 static bool check_csr_flags(DisasContext *ctx, const CSRInfo *csr, bool write)
179 if ((csr->flags & CSRFL_READONLY) && write) {
182 if ((csr->flags & CSRFL_IO) && translator_io_start(&ctx->base)) {
184 } else if ((csr->flags & CSRFL_EXITTB) && write) {
193 const CSRInfo *csr;
198 csr = get_csr(a->csr);
199 if (csr == NULL) {
200 /* CSR is undefined: read as 0. */
203 check_csr_flags(ctx, csr, false);
205 if (csr->readfn) {
206 csr->readfn(dest, tcg_env);
208 tcg_gen_ld_tl(dest, tcg_env, csr->offset);
218 const CSRInfo *csr;
223 csr = get_csr(a->csr);
224 if (csr == NULL) {
225 /* CSR is undefined: write ignored, read old_value as 0. */
229 if (!check_csr_flags(ctx, csr, true)) {
230 /* CSR is readonly: trap. */
234 if (csr->writefn) {
236 csr->writefn(dest, tcg_env, src1);
239 tcg_gen_ld_tl(dest, tcg_env, csr->offset);
240 tcg_gen_st_tl(src1, tcg_env, csr->offset);
249 const CSRInfo *csr;
254 csr = get_csr(a->csr);
255 if (csr == NULL) {
256 /* CSR is undefined: write ignored, read old_value as 0. */
261 if (!check_csr_flags(ctx, csr, true)) {
262 /* CSR is readonly: trap. */
267 assert(csr->readfn == NULL);
275 tcg_gen_ld_tl(oldv, tcg_env, csr->offset);
280 if (csr->writefn) {
281 csr->writefn(oldv, tcg_env, newv);
283 tcg_gen_st_tl(newv, tcg_env, csr->offset);