1*03afdc28SJiaxun Yang /*
2*03afdc28SJiaxun Yang * Loongson CSR instructions translation routines
3*03afdc28SJiaxun Yang *
4*03afdc28SJiaxun Yang * Copyright (c) 2023 Jiaxun Yang <jiaxun.yang@flygoat.com>
5*03afdc28SJiaxun Yang *
6*03afdc28SJiaxun Yang * SPDX-License-Identifier: GPL-2.0-or-later
7*03afdc28SJiaxun Yang */
8*03afdc28SJiaxun Yang
9*03afdc28SJiaxun Yang #include "qemu/osdep.h"
10*03afdc28SJiaxun Yang #include "cpu.h"
11*03afdc28SJiaxun Yang #include "exec/helper-proto.h"
12*03afdc28SJiaxun Yang
13*03afdc28SJiaxun Yang #define GET_MEMTXATTRS(cas) \
14*03afdc28SJiaxun Yang ((MemTxAttrs){.requester_id = env_cpu(cas)->cpu_index})
15*03afdc28SJiaxun Yang
helper_lcsr_rdcsr(CPUMIPSState * env,target_ulong r_addr)16*03afdc28SJiaxun Yang uint64_t helper_lcsr_rdcsr(CPUMIPSState *env, target_ulong r_addr)
17*03afdc28SJiaxun Yang {
18*03afdc28SJiaxun Yang return address_space_ldl(&env->iocsr.as, r_addr,
19*03afdc28SJiaxun Yang GET_MEMTXATTRS(env), NULL);
20*03afdc28SJiaxun Yang }
21*03afdc28SJiaxun Yang
helper_lcsr_drdcsr(CPUMIPSState * env,target_ulong r_addr)22*03afdc28SJiaxun Yang uint64_t helper_lcsr_drdcsr(CPUMIPSState *env, target_ulong r_addr)
23*03afdc28SJiaxun Yang {
24*03afdc28SJiaxun Yang return address_space_ldq(&env->iocsr.as, r_addr,
25*03afdc28SJiaxun Yang GET_MEMTXATTRS(env), NULL);
26*03afdc28SJiaxun Yang }
27*03afdc28SJiaxun Yang
helper_lcsr_wrcsr(CPUMIPSState * env,target_ulong w_addr,target_ulong val)28*03afdc28SJiaxun Yang void helper_lcsr_wrcsr(CPUMIPSState *env, target_ulong w_addr,
29*03afdc28SJiaxun Yang target_ulong val)
30*03afdc28SJiaxun Yang {
31*03afdc28SJiaxun Yang address_space_stl(&env->iocsr.as, w_addr,
32*03afdc28SJiaxun Yang val, GET_MEMTXATTRS(env), NULL);
33*03afdc28SJiaxun Yang }
34*03afdc28SJiaxun Yang
helper_lcsr_dwrcsr(CPUMIPSState * env,target_ulong w_addr,target_ulong val)35*03afdc28SJiaxun Yang void helper_lcsr_dwrcsr(CPUMIPSState *env, target_ulong w_addr,
36*03afdc28SJiaxun Yang target_ulong val)
37*03afdc28SJiaxun Yang {
38*03afdc28SJiaxun Yang address_space_stq(&env->iocsr.as, w_addr,
39*03afdc28SJiaxun Yang val, GET_MEMTXATTRS(env), NULL);
40*03afdc28SJiaxun Yang }
41