Skip to content

Commit 75b2c5d

Browse files
committed
target/loongarch: Add generic csr function type
Parameter type TCGv and TCGv_ptr for function GenCSRRead and GenCSRWrite is not used in non-TCG mode. Generic csr function type is added here with parameter void type, so that it passes to compile with non-TCG mode. Signed-off-by: Bibo Mao <maobibo@loongson.cn>
1 parent 3156b1c commit 75b2c5d

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

target/loongarch/tcg/insn_trans/trans_privileged.c.inc

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ GEN_FALSE_TRANS(idle)
4444

4545
typedef void (*GenCSRRead)(TCGv dest, TCGv_ptr env);
4646
typedef void (*GenCSRWrite)(TCGv dest, TCGv_ptr env, TCGv src);
47+
typedef void (*GenCSRFunc)(void);
4748

4849
typedef struct {
4950
int offset;
5051
int flags;
51-
GenCSRRead readfn;
52-
GenCSRWrite writefn;
52+
GenCSRFunc readfn;
53+
GenCSRFunc writefn;
5354
} CSRInfo;
5455

5556
enum {
@@ -184,8 +185,8 @@ static bool set_csr_trans_func(unsigned int csr_num, GenCSRRead readfn,
184185
return false;
185186
}
186187

187-
csr->readfn = readfn;
188-
csr->writefn = writefn;
188+
csr->readfn = (GenCSRFunc)readfn;
189+
csr->writefn = (GenCSRFunc)writefn;
189190
return true;
190191
}
191192

@@ -222,6 +223,7 @@ static bool trans_csrrd(DisasContext *ctx, arg_csrrd *a)
222223
{
223224
TCGv dest;
224225
const CSRInfo *csr;
226+
GenCSRRead readfn;
225227

226228
if (check_plv(ctx)) {
227229
return false;
@@ -233,8 +235,9 @@ static bool trans_csrrd(DisasContext *ctx, arg_csrrd *a)
233235
} else {
234236
check_csr_flags(ctx, csr, false);
235237
dest = gpr_dst(ctx, a->rd, EXT_NONE);
236-
if (csr->readfn) {
237-
csr->readfn(dest, tcg_env);
238+
readfn = (GenCSRRead)csr->readfn;
239+
if (readfn) {
240+
readfn(dest, tcg_env);
238241
} else {
239242
tcg_gen_ld_tl(dest, tcg_env, csr->offset);
240243
}
@@ -247,6 +250,7 @@ static bool trans_csrwr(DisasContext *ctx, arg_csrwr *a)
247250
{
248251
TCGv dest, src1;
249252
const CSRInfo *csr;
253+
GenCSRWrite writefn;
250254

251255
if (check_plv(ctx)) {
252256
return false;
@@ -262,9 +266,10 @@ static bool trans_csrwr(DisasContext *ctx, arg_csrwr *a)
262266
return false;
263267
}
264268
src1 = gpr_src(ctx, a->rd, EXT_NONE);
265-
if (csr->writefn) {
269+
writefn = (GenCSRWrite)csr->writefn;
270+
if (writefn) {
266271
dest = gpr_dst(ctx, a->rd, EXT_NONE);
267-
csr->writefn(dest, tcg_env, src1);
272+
writefn(dest, tcg_env, src1);
268273
} else {
269274
dest = tcg_temp_new();
270275
tcg_gen_ld_tl(dest, tcg_env, csr->offset);
@@ -278,6 +283,7 @@ static bool trans_csrxchg(DisasContext *ctx, arg_csrxchg *a)
278283
{
279284
TCGv src1, mask, oldv, newv, temp;
280285
const CSRInfo *csr;
286+
GenCSRWrite writefn;
281287

282288
if (check_plv(ctx)) {
283289
return false;
@@ -308,8 +314,9 @@ static bool trans_csrxchg(DisasContext *ctx, arg_csrxchg *a)
308314
tcg_gen_andc_tl(temp, oldv, mask);
309315
tcg_gen_or_tl(newv, newv, temp);
310316

311-
if (csr->writefn) {
312-
csr->writefn(oldv, tcg_env, newv);
317+
writefn = (GenCSRWrite)csr->writefn;
318+
if (writefn) {
319+
writefn(oldv, tcg_env, newv);
313320
} else {
314321
tcg_gen_st_tl(newv, tcg_env, csr->offset);
315322
}

0 commit comments

Comments
 (0)