xref: /qemu/include/accel/tcg/cpu-ldst.h (revision a21959a8a835783b556d4a1d18aaa2fad4b7ea62)
1f08b6170SPaolo Bonzini /*
21ce871a3SPhilippe Mathieu-Daudé  *  Software MMU support (per-target)
3f08b6170SPaolo Bonzini  *
4f08b6170SPaolo Bonzini  * This library is free software; you can redistribute it and/or
5f08b6170SPaolo Bonzini  * modify it under the terms of the GNU Lesser General Public
6f08b6170SPaolo Bonzini  * License as published by the Free Software Foundation; either
7d6ea4236SChetan Pant  * version 2.1 of the License, or (at your option) any later version.
8f08b6170SPaolo Bonzini  *
9f08b6170SPaolo Bonzini  * This library is distributed in the hope that it will be useful,
10f08b6170SPaolo Bonzini  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11f08b6170SPaolo Bonzini  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12f08b6170SPaolo Bonzini  * Lesser General Public License for more details.
13f08b6170SPaolo Bonzini  *
14f08b6170SPaolo Bonzini  * You should have received a copy of the GNU Lesser General Public
15f08b6170SPaolo Bonzini  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16f08b6170SPaolo Bonzini  *
17f08b6170SPaolo Bonzini  */
18f08b6170SPaolo Bonzini 
19f08b6170SPaolo Bonzini /*
20f08b6170SPaolo Bonzini  * Generate inline load/store functions for all MMU modes (typically
21f08b6170SPaolo Bonzini  * at least _user and _kernel) as well as _data versions, for all data
22f08b6170SPaolo Bonzini  * sizes.
23f08b6170SPaolo Bonzini  *
24f08b6170SPaolo Bonzini  * Used by target op helpers.
25f08b6170SPaolo Bonzini  *
26db5fd8d7SPeter Maydell  * The syntax for the accessors is:
27db5fd8d7SPeter Maydell  *
28b9e60257SRichard Henderson  * load:  cpu_ld{sign}{size}{end}_{mmusuffix}(env, ptr)
29b9e60257SRichard Henderson  *        cpu_ld{sign}{size}{end}_{mmusuffix}_ra(env, ptr, retaddr)
30b9e60257SRichard Henderson  *        cpu_ld{sign}{size}{end}_mmuidx_ra(env, ptr, mmu_idx, retaddr)
31f83bcecbSRichard Henderson  *        cpu_ld{sign}{size}{end}_mmu(env, ptr, oi, retaddr)
32db5fd8d7SPeter Maydell  *
33b9e60257SRichard Henderson  * store: cpu_st{size}{end}_{mmusuffix}(env, ptr, val)
34b9e60257SRichard Henderson  *        cpu_st{size}{end}_{mmusuffix}_ra(env, ptr, val, retaddr)
35b9e60257SRichard Henderson  *        cpu_st{size}{end}_mmuidx_ra(env, ptr, val, mmu_idx, retaddr)
36f83bcecbSRichard Henderson  *        cpu_st{size}{end}_mmu(env, ptr, val, oi, retaddr)
37db5fd8d7SPeter Maydell  *
38db5fd8d7SPeter Maydell  * sign is:
39db5fd8d7SPeter Maydell  * (empty): for 32 and 64 bit sizes
40db5fd8d7SPeter Maydell  *   u    : unsigned
41db5fd8d7SPeter Maydell  *   s    : signed
42db5fd8d7SPeter Maydell  *
43db5fd8d7SPeter Maydell  * size is:
44db5fd8d7SPeter Maydell  *   b: 8 bits
45db5fd8d7SPeter Maydell  *   w: 16 bits
46db5fd8d7SPeter Maydell  *   l: 32 bits
47db5fd8d7SPeter Maydell  *   q: 64 bits
48db5fd8d7SPeter Maydell  *
49b9e60257SRichard Henderson  * end is:
50b9e60257SRichard Henderson  * (empty): for target native endian, or for 8 bit access
51b9e60257SRichard Henderson  *     _be: for forced big endian
52b9e60257SRichard Henderson  *     _le: for forced little endian
53b9e60257SRichard Henderson  *
54f4e1bae2SRichard Henderson  * mmusuffix is one of the generic suffixes "data" or "code", or "mmuidx".
55f4e1bae2SRichard Henderson  * The "mmuidx" suffix carries an extra mmu_idx argument that specifies
56f4e1bae2SRichard Henderson  * the index to use; the "data" and "code" suffixes take the index from
57f4e1bae2SRichard Henderson  * cpu_mmu_index().
58f83bcecbSRichard Henderson  *
59f83bcecbSRichard Henderson  * The "mmu" suffix carries the full MemOpIdx, with both mmu_idx and the
60f83bcecbSRichard Henderson  * MemOp including alignment requirements.  The alignment will be enforced.
61f08b6170SPaolo Bonzini  */
62*42fa9665SPhilippe Mathieu-Daudé #ifndef ACCEL_TCG_CPU_LDST_H
63*42fa9665SPhilippe Mathieu-Daudé #define ACCEL_TCG_CPU_LDST_H
64f08b6170SPaolo Bonzini 
651ce871a3SPhilippe Mathieu-Daudé #ifndef CONFIG_TCG
661ce871a3SPhilippe Mathieu-Daudé #error Can only include this header with TCG
671ce871a3SPhilippe Mathieu-Daudé #endif
681ce871a3SPhilippe Mathieu-Daudé 
69d97c3b06SPierrick Bouvier #include "exec/cpu-common.h"
70231a1c0fSPhilippe Mathieu-Daudé #include "accel/tcg/cpu-ldst-common.h"
71efe25c26SRichard Henderson #include "accel/tcg/cpu-mmu-index.h"
72471558cbSPhilippe Mathieu-Daudé #include "exec/abi_ptr.h"
73f83bcecbSRichard Henderson 
74c773828aSPaolo Bonzini #if defined(CONFIG_USER_ONLY)
75f9ba56a0SPhilippe Mathieu-Daudé #include "user/guest-host.h"
76471558cbSPhilippe Mathieu-Daudé #endif /* CONFIG_USER_ONLY */
77c773828aSPaolo Bonzini 
78a333692cSRichard Henderson static inline uint32_t
cpu_ldub_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)79a333692cSRichard Henderson cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr, int mmu_idx, uintptr_t ra)
80a333692cSRichard Henderson {
81a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
82a333692cSRichard Henderson     return cpu_ldb_mmu(env, addr, oi, ra);
83a333692cSRichard Henderson }
84f83bcecbSRichard Henderson 
85a333692cSRichard Henderson static inline int
cpu_ldsb_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)86a333692cSRichard Henderson cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr, int mmu_idx, uintptr_t ra)
87a333692cSRichard Henderson {
88a333692cSRichard Henderson     return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra);
89a333692cSRichard Henderson }
90a333692cSRichard Henderson 
91a333692cSRichard Henderson static inline uint32_t
cpu_lduw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)92a333692cSRichard Henderson cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
93a333692cSRichard Henderson                       int mmu_idx, uintptr_t ra)
94a333692cSRichard Henderson {
95a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
96a333692cSRichard Henderson     return cpu_ldw_mmu(env, addr, oi, ra);
97a333692cSRichard Henderson }
98a333692cSRichard Henderson 
99a333692cSRichard Henderson static inline int
cpu_ldsw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)100a333692cSRichard Henderson cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
101a333692cSRichard Henderson                       int mmu_idx, uintptr_t ra)
102a333692cSRichard Henderson {
103a333692cSRichard Henderson     return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra);
104a333692cSRichard Henderson }
105a333692cSRichard Henderson 
106a333692cSRichard Henderson static inline uint32_t
cpu_ldl_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)107a333692cSRichard Henderson cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
108a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
109a333692cSRichard Henderson {
110a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
111a333692cSRichard Henderson     return cpu_ldl_mmu(env, addr, oi, ra);
112a333692cSRichard Henderson }
113a333692cSRichard Henderson 
114a333692cSRichard Henderson static inline uint64_t
cpu_ldq_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)115a333692cSRichard Henderson cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
116a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
117a333692cSRichard Henderson {
118a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
119a333692cSRichard Henderson     return cpu_ldq_mmu(env, addr, oi, ra);
120a333692cSRichard Henderson }
121a333692cSRichard Henderson 
122a333692cSRichard Henderson static inline uint32_t
cpu_lduw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)123a333692cSRichard Henderson cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
124a333692cSRichard Henderson                       int mmu_idx, uintptr_t ra)
125a333692cSRichard Henderson {
126a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
127a333692cSRichard Henderson     return cpu_ldw_mmu(env, addr, oi, ra);
128a333692cSRichard Henderson }
129a333692cSRichard Henderson 
130a333692cSRichard Henderson static inline int
cpu_ldsw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)131a333692cSRichard Henderson cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
132a333692cSRichard Henderson                       int mmu_idx, uintptr_t ra)
133a333692cSRichard Henderson {
134a333692cSRichard Henderson     return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra);
135a333692cSRichard Henderson }
136a333692cSRichard Henderson 
137a333692cSRichard Henderson static inline uint32_t
cpu_ldl_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)138a333692cSRichard Henderson cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
139a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
140a333692cSRichard Henderson {
141a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
142a333692cSRichard Henderson     return cpu_ldl_mmu(env, addr, oi, ra);
143a333692cSRichard Henderson }
144a333692cSRichard Henderson 
145a333692cSRichard Henderson static inline uint64_t
cpu_ldq_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)146a333692cSRichard Henderson cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
147a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
148a333692cSRichard Henderson {
149a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
150a333692cSRichard Henderson     return cpu_ldq_mmu(env, addr, oi, ra);
151a333692cSRichard Henderson }
152a333692cSRichard Henderson 
153a333692cSRichard Henderson static inline void
cpu_stb_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)154a333692cSRichard Henderson cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
155a333692cSRichard Henderson                   int mmu_idx, uintptr_t ra)
156a333692cSRichard Henderson {
157a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
158a333692cSRichard Henderson     cpu_stb_mmu(env, addr, val, oi, ra);
159a333692cSRichard Henderson }
160a333692cSRichard Henderson 
161a333692cSRichard Henderson static inline void
cpu_stw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)162a333692cSRichard Henderson cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
163a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
164a333692cSRichard Henderson {
165a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
166a333692cSRichard Henderson     cpu_stw_mmu(env, addr, val, oi, ra);
167a333692cSRichard Henderson }
168a333692cSRichard Henderson 
169a333692cSRichard Henderson static inline void
cpu_stl_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)170a333692cSRichard Henderson cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
171a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
172a333692cSRichard Henderson {
173a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
174a333692cSRichard Henderson     cpu_stl_mmu(env, addr, val, oi, ra);
175a333692cSRichard Henderson }
176a333692cSRichard Henderson 
177a333692cSRichard Henderson static inline void
cpu_stq_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint64_t val,int mmu_idx,uintptr_t ra)178a333692cSRichard Henderson cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
179a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
180a333692cSRichard Henderson {
181a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
182a333692cSRichard Henderson     cpu_stq_mmu(env, addr, val, oi, ra);
183a333692cSRichard Henderson }
184a333692cSRichard Henderson 
185a333692cSRichard Henderson static inline void
cpu_stw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)186a333692cSRichard Henderson cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
187a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
188a333692cSRichard Henderson {
189a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
190a333692cSRichard Henderson     cpu_stw_mmu(env, addr, val, oi, ra);
191a333692cSRichard Henderson }
192a333692cSRichard Henderson 
193a333692cSRichard Henderson static inline void
cpu_stl_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)194a333692cSRichard Henderson cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
195a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
196a333692cSRichard Henderson {
197a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
198a333692cSRichard Henderson     cpu_stl_mmu(env, addr, val, oi, ra);
199a333692cSRichard Henderson }
200a333692cSRichard Henderson 
201a333692cSRichard Henderson static inline void
cpu_stq_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint64_t val,int mmu_idx,uintptr_t ra)202a333692cSRichard Henderson cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
203a333692cSRichard Henderson                      int mmu_idx, uintptr_t ra)
204a333692cSRichard Henderson {
205a333692cSRichard Henderson     MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
206a333692cSRichard Henderson     cpu_stq_mmu(env, addr, val, oi, ra);
207a333692cSRichard Henderson }
208f83bcecbSRichard Henderson 
209ef6ffba6SRichard Henderson /*--------------------------*/
210ef6ffba6SRichard Henderson 
211ef6ffba6SRichard Henderson static inline uint32_t
cpu_ldub_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)212ef6ffba6SRichard Henderson cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
213ef6ffba6SRichard Henderson {
214ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
215ef6ffba6SRichard Henderson     return cpu_ldub_mmuidx_ra(env, addr, mmu_index, ra);
216ef6ffba6SRichard Henderson }
217ef6ffba6SRichard Henderson 
218ef6ffba6SRichard Henderson static inline int
cpu_ldsb_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)219ef6ffba6SRichard Henderson cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
220ef6ffba6SRichard Henderson {
221ef6ffba6SRichard Henderson     return (int8_t)cpu_ldub_data_ra(env, addr, ra);
222ef6ffba6SRichard Henderson }
223ef6ffba6SRichard Henderson 
224ef6ffba6SRichard Henderson static inline uint32_t
cpu_lduw_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)225ef6ffba6SRichard Henderson cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
226ef6ffba6SRichard Henderson {
227ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
228ef6ffba6SRichard Henderson     return cpu_lduw_be_mmuidx_ra(env, addr, mmu_index, ra);
229ef6ffba6SRichard Henderson }
230ef6ffba6SRichard Henderson 
231ef6ffba6SRichard Henderson static inline int
cpu_ldsw_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)232ef6ffba6SRichard Henderson cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
233ef6ffba6SRichard Henderson {
234ef6ffba6SRichard Henderson     return (int16_t)cpu_lduw_be_data_ra(env, addr, ra);
235ef6ffba6SRichard Henderson }
236ef6ffba6SRichard Henderson 
237ef6ffba6SRichard Henderson static inline uint32_t
cpu_ldl_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)238ef6ffba6SRichard Henderson cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
239ef6ffba6SRichard Henderson {
240ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
241ef6ffba6SRichard Henderson     return cpu_ldl_be_mmuidx_ra(env, addr, mmu_index, ra);
242ef6ffba6SRichard Henderson }
243ef6ffba6SRichard Henderson 
244ef6ffba6SRichard Henderson static inline uint64_t
cpu_ldq_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)245ef6ffba6SRichard Henderson cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
246ef6ffba6SRichard Henderson {
247ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
248ef6ffba6SRichard Henderson     return cpu_ldq_be_mmuidx_ra(env, addr, mmu_index, ra);
249ef6ffba6SRichard Henderson }
250ef6ffba6SRichard Henderson 
251ef6ffba6SRichard Henderson static inline uint32_t
cpu_lduw_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)252ef6ffba6SRichard Henderson cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
253ef6ffba6SRichard Henderson {
254ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
255ef6ffba6SRichard Henderson     return cpu_lduw_le_mmuidx_ra(env, addr, mmu_index, ra);
256ef6ffba6SRichard Henderson }
257ef6ffba6SRichard Henderson 
258ef6ffba6SRichard Henderson static inline int
cpu_ldsw_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)259ef6ffba6SRichard Henderson cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
260ef6ffba6SRichard Henderson {
261ef6ffba6SRichard Henderson     return (int16_t)cpu_lduw_le_data_ra(env, addr, ra);
262ef6ffba6SRichard Henderson }
263ef6ffba6SRichard Henderson 
264ef6ffba6SRichard Henderson static inline uint32_t
cpu_ldl_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)265ef6ffba6SRichard Henderson cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
266ef6ffba6SRichard Henderson {
267ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
268ef6ffba6SRichard Henderson     return cpu_ldl_le_mmuidx_ra(env, addr, mmu_index, ra);
269ef6ffba6SRichard Henderson }
270ef6ffba6SRichard Henderson 
271ef6ffba6SRichard Henderson static inline uint64_t
cpu_ldq_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)272ef6ffba6SRichard Henderson cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
273ef6ffba6SRichard Henderson {
274ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
275ef6ffba6SRichard Henderson     return cpu_ldq_le_mmuidx_ra(env, addr, mmu_index, ra);
276ef6ffba6SRichard Henderson }
277ef6ffba6SRichard Henderson 
278ef6ffba6SRichard Henderson static inline void
cpu_stb_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)279ef6ffba6SRichard Henderson cpu_stb_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
280ef6ffba6SRichard Henderson {
281ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
282ef6ffba6SRichard Henderson     cpu_stb_mmuidx_ra(env, addr, val, mmu_index, ra);
283ef6ffba6SRichard Henderson }
284ef6ffba6SRichard Henderson 
285ef6ffba6SRichard Henderson static inline void
cpu_stw_be_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)286ef6ffba6SRichard Henderson cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
287ef6ffba6SRichard Henderson {
288ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
289ef6ffba6SRichard Henderson     cpu_stw_be_mmuidx_ra(env, addr, val, mmu_index, ra);
290ef6ffba6SRichard Henderson }
291ef6ffba6SRichard Henderson 
292ef6ffba6SRichard Henderson static inline void
cpu_stl_be_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)293ef6ffba6SRichard Henderson cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
294ef6ffba6SRichard Henderson {
295ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
296ef6ffba6SRichard Henderson     cpu_stl_be_mmuidx_ra(env, addr, val, mmu_index, ra);
297ef6ffba6SRichard Henderson }
298ef6ffba6SRichard Henderson 
299ef6ffba6SRichard Henderson static inline void
cpu_stq_be_data_ra(CPUArchState * env,abi_ptr addr,uint64_t val,uintptr_t ra)300ef6ffba6SRichard Henderson cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr, uint64_t val, uintptr_t ra)
301ef6ffba6SRichard Henderson {
302ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
303ef6ffba6SRichard Henderson     cpu_stq_be_mmuidx_ra(env, addr, val, mmu_index, ra);
304ef6ffba6SRichard Henderson }
305ef6ffba6SRichard Henderson 
306ef6ffba6SRichard Henderson static inline void
cpu_stw_le_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)307ef6ffba6SRichard Henderson cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
308ef6ffba6SRichard Henderson {
309ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
310ef6ffba6SRichard Henderson     cpu_stw_le_mmuidx_ra(env, addr, val, mmu_index, ra);
311ef6ffba6SRichard Henderson }
312ef6ffba6SRichard Henderson 
313ef6ffba6SRichard Henderson static inline void
cpu_stl_le_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)314ef6ffba6SRichard Henderson cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
315ef6ffba6SRichard Henderson {
316ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
317ef6ffba6SRichard Henderson     cpu_stl_le_mmuidx_ra(env, addr, val, mmu_index, ra);
318ef6ffba6SRichard Henderson }
319ef6ffba6SRichard Henderson 
320ef6ffba6SRichard Henderson static inline void
cpu_stq_le_data_ra(CPUArchState * env,abi_ptr addr,uint64_t val,uintptr_t ra)321ef6ffba6SRichard Henderson cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr, uint64_t val, uintptr_t ra)
322ef6ffba6SRichard Henderson {
323ef6ffba6SRichard Henderson     int mmu_index = cpu_mmu_index(env_cpu(env), false);
324ef6ffba6SRichard Henderson     cpu_stq_le_mmuidx_ra(env, addr, val, mmu_index, ra);
325ef6ffba6SRichard Henderson }
326ef6ffba6SRichard Henderson 
3270a29f116SRichard Henderson /*--------------------------*/
3280a29f116SRichard Henderson 
3290a29f116SRichard Henderson static inline uint32_t
cpu_ldub_data(CPUArchState * env,abi_ptr addr)3300a29f116SRichard Henderson cpu_ldub_data(CPUArchState *env, abi_ptr addr)
3310a29f116SRichard Henderson {
3320a29f116SRichard Henderson     return cpu_ldub_data_ra(env, addr, 0);
3330a29f116SRichard Henderson }
3340a29f116SRichard Henderson 
3350a29f116SRichard Henderson static inline int
cpu_ldsb_data(CPUArchState * env,abi_ptr addr)3360a29f116SRichard Henderson cpu_ldsb_data(CPUArchState *env, abi_ptr addr)
3370a29f116SRichard Henderson {
3380a29f116SRichard Henderson     return (int8_t)cpu_ldub_data(env, addr);
3390a29f116SRichard Henderson }
3400a29f116SRichard Henderson 
3410a29f116SRichard Henderson static inline uint32_t
cpu_lduw_be_data(CPUArchState * env,abi_ptr addr)3420a29f116SRichard Henderson cpu_lduw_be_data(CPUArchState *env, abi_ptr addr)
3430a29f116SRichard Henderson {
3440a29f116SRichard Henderson     return cpu_lduw_be_data_ra(env, addr, 0);
3450a29f116SRichard Henderson }
3460a29f116SRichard Henderson 
3470a29f116SRichard Henderson static inline int
cpu_ldsw_be_data(CPUArchState * env,abi_ptr addr)3480a29f116SRichard Henderson cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr)
3490a29f116SRichard Henderson {
3500a29f116SRichard Henderson     return (int16_t)cpu_lduw_be_data(env, addr);
3510a29f116SRichard Henderson }
3520a29f116SRichard Henderson 
3530a29f116SRichard Henderson static inline uint32_t
cpu_ldl_be_data(CPUArchState * env,abi_ptr addr)3540a29f116SRichard Henderson cpu_ldl_be_data(CPUArchState *env, abi_ptr addr)
3550a29f116SRichard Henderson {
3560a29f116SRichard Henderson     return cpu_ldl_be_data_ra(env, addr, 0);
3570a29f116SRichard Henderson }
3580a29f116SRichard Henderson 
3590a29f116SRichard Henderson static inline uint64_t
cpu_ldq_be_data(CPUArchState * env,abi_ptr addr)3600a29f116SRichard Henderson cpu_ldq_be_data(CPUArchState *env, abi_ptr addr)
3610a29f116SRichard Henderson {
3620a29f116SRichard Henderson     return cpu_ldq_be_data_ra(env, addr, 0);
3630a29f116SRichard Henderson }
3640a29f116SRichard Henderson 
3650a29f116SRichard Henderson static inline uint32_t
cpu_lduw_le_data(CPUArchState * env,abi_ptr addr)3660a29f116SRichard Henderson cpu_lduw_le_data(CPUArchState *env, abi_ptr addr)
3670a29f116SRichard Henderson {
3680a29f116SRichard Henderson     return cpu_lduw_le_data_ra(env, addr, 0);
3690a29f116SRichard Henderson }
3700a29f116SRichard Henderson 
3710a29f116SRichard Henderson static inline int
cpu_ldsw_le_data(CPUArchState * env,abi_ptr addr)3720a29f116SRichard Henderson cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr)
3730a29f116SRichard Henderson {
3740a29f116SRichard Henderson     return (int16_t)cpu_lduw_le_data(env, addr);
3750a29f116SRichard Henderson }
3760a29f116SRichard Henderson 
3770a29f116SRichard Henderson static inline uint32_t
cpu_ldl_le_data(CPUArchState * env,abi_ptr addr)3780a29f116SRichard Henderson cpu_ldl_le_data(CPUArchState *env, abi_ptr addr)
3790a29f116SRichard Henderson {
3800a29f116SRichard Henderson     return cpu_ldl_le_data_ra(env, addr, 0);
3810a29f116SRichard Henderson }
3820a29f116SRichard Henderson 
3830a29f116SRichard Henderson static inline uint64_t
cpu_ldq_le_data(CPUArchState * env,abi_ptr addr)3840a29f116SRichard Henderson cpu_ldq_le_data(CPUArchState *env, abi_ptr addr)
3850a29f116SRichard Henderson {
3860a29f116SRichard Henderson     return cpu_ldq_le_data_ra(env, addr, 0);
3870a29f116SRichard Henderson }
3880a29f116SRichard Henderson 
3890a29f116SRichard Henderson static inline void
cpu_stb_data(CPUArchState * env,abi_ptr addr,uint32_t val)3900a29f116SRichard Henderson cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val)
3910a29f116SRichard Henderson {
3920a29f116SRichard Henderson     cpu_stb_data_ra(env, addr, val, 0);
3930a29f116SRichard Henderson }
3940a29f116SRichard Henderson 
3950a29f116SRichard Henderson static inline void
cpu_stw_be_data(CPUArchState * env,abi_ptr addr,uint32_t val)3960a29f116SRichard Henderson cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
3970a29f116SRichard Henderson {
3980a29f116SRichard Henderson     cpu_stw_be_data_ra(env, addr, val, 0);
3990a29f116SRichard Henderson }
4000a29f116SRichard Henderson 
4010a29f116SRichard Henderson static inline void
cpu_stl_be_data(CPUArchState * env,abi_ptr addr,uint32_t val)4020a29f116SRichard Henderson cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
4030a29f116SRichard Henderson {
4040a29f116SRichard Henderson     cpu_stl_be_data_ra(env, addr, val, 0);
4050a29f116SRichard Henderson }
4060a29f116SRichard Henderson 
4070a29f116SRichard Henderson static inline void
cpu_stq_be_data(CPUArchState * env,abi_ptr addr,uint64_t val)4080a29f116SRichard Henderson cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val)
4090a29f116SRichard Henderson {
4100a29f116SRichard Henderson     cpu_stq_be_data_ra(env, addr, val, 0);
4110a29f116SRichard Henderson }
4120a29f116SRichard Henderson 
4130a29f116SRichard Henderson static inline void
cpu_stw_le_data(CPUArchState * env,abi_ptr addr,uint32_t val)4140a29f116SRichard Henderson cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
4150a29f116SRichard Henderson {
4160a29f116SRichard Henderson     cpu_stw_le_data_ra(env, addr, val, 0);
4170a29f116SRichard Henderson }
4180a29f116SRichard Henderson 
4190a29f116SRichard Henderson static inline void
cpu_stl_le_data(CPUArchState * env,abi_ptr addr,uint32_t val)4200a29f116SRichard Henderson cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
4210a29f116SRichard Henderson {
4220a29f116SRichard Henderson     cpu_stl_le_data_ra(env, addr, val, 0);
4230a29f116SRichard Henderson }
4240a29f116SRichard Henderson 
4250a29f116SRichard Henderson static inline void
cpu_stq_le_data(CPUArchState * env,abi_ptr addr,uint64_t val)4260a29f116SRichard Henderson cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val)
4270a29f116SRichard Henderson {
4280a29f116SRichard Henderson     cpu_stq_le_data_ra(env, addr, val, 0);
4290a29f116SRichard Henderson }
4300a29f116SRichard Henderson 
431ee3eb3a7SMarc-André Lureau #if TARGET_BIG_ENDIAN
432b9e60257SRichard Henderson # define cpu_lduw_data        cpu_lduw_be_data
433b9e60257SRichard Henderson # define cpu_ldsw_data        cpu_ldsw_be_data
434b9e60257SRichard Henderson # define cpu_ldl_data         cpu_ldl_be_data
435b9e60257SRichard Henderson # define cpu_ldq_data         cpu_ldq_be_data
436b9e60257SRichard Henderson # define cpu_lduw_data_ra     cpu_lduw_be_data_ra
437b9e60257SRichard Henderson # define cpu_ldsw_data_ra     cpu_ldsw_be_data_ra
438b9e60257SRichard Henderson # define cpu_ldl_data_ra      cpu_ldl_be_data_ra
439b9e60257SRichard Henderson # define cpu_ldq_data_ra      cpu_ldq_be_data_ra
440b9e60257SRichard Henderson # define cpu_lduw_mmuidx_ra   cpu_lduw_be_mmuidx_ra
441b9e60257SRichard Henderson # define cpu_ldsw_mmuidx_ra   cpu_ldsw_be_mmuidx_ra
442b9e60257SRichard Henderson # define cpu_ldl_mmuidx_ra    cpu_ldl_be_mmuidx_ra
443b9e60257SRichard Henderson # define cpu_ldq_mmuidx_ra    cpu_ldq_be_mmuidx_ra
444b9e60257SRichard Henderson # define cpu_stw_data         cpu_stw_be_data
445b9e60257SRichard Henderson # define cpu_stl_data         cpu_stl_be_data
446b9e60257SRichard Henderson # define cpu_stq_data         cpu_stq_be_data
447b9e60257SRichard Henderson # define cpu_stw_data_ra      cpu_stw_be_data_ra
448b9e60257SRichard Henderson # define cpu_stl_data_ra      cpu_stl_be_data_ra
449b9e60257SRichard Henderson # define cpu_stq_data_ra      cpu_stq_be_data_ra
450b9e60257SRichard Henderson # define cpu_stw_mmuidx_ra    cpu_stw_be_mmuidx_ra
451b9e60257SRichard Henderson # define cpu_stl_mmuidx_ra    cpu_stl_be_mmuidx_ra
452b9e60257SRichard Henderson # define cpu_stq_mmuidx_ra    cpu_stq_be_mmuidx_ra
453b9e60257SRichard Henderson #else
454b9e60257SRichard Henderson # define cpu_lduw_data        cpu_lduw_le_data
455b9e60257SRichard Henderson # define cpu_ldsw_data        cpu_ldsw_le_data
456b9e60257SRichard Henderson # define cpu_ldl_data         cpu_ldl_le_data
457b9e60257SRichard Henderson # define cpu_ldq_data         cpu_ldq_le_data
458b9e60257SRichard Henderson # define cpu_lduw_data_ra     cpu_lduw_le_data_ra
459b9e60257SRichard Henderson # define cpu_ldsw_data_ra     cpu_ldsw_le_data_ra
460b9e60257SRichard Henderson # define cpu_ldl_data_ra      cpu_ldl_le_data_ra
461b9e60257SRichard Henderson # define cpu_ldq_data_ra      cpu_ldq_le_data_ra
462b9e60257SRichard Henderson # define cpu_lduw_mmuidx_ra   cpu_lduw_le_mmuidx_ra
463b9e60257SRichard Henderson # define cpu_ldsw_mmuidx_ra   cpu_ldsw_le_mmuidx_ra
464b9e60257SRichard Henderson # define cpu_ldl_mmuidx_ra    cpu_ldl_le_mmuidx_ra
465b9e60257SRichard Henderson # define cpu_ldq_mmuidx_ra    cpu_ldq_le_mmuidx_ra
466b9e60257SRichard Henderson # define cpu_stw_data         cpu_stw_le_data
467b9e60257SRichard Henderson # define cpu_stl_data         cpu_stl_le_data
468b9e60257SRichard Henderson # define cpu_stq_data         cpu_stq_le_data
469b9e60257SRichard Henderson # define cpu_stw_data_ra      cpu_stw_le_data_ra
470b9e60257SRichard Henderson # define cpu_stl_data_ra      cpu_stl_le_data_ra
471b9e60257SRichard Henderson # define cpu_stq_data_ra      cpu_stq_le_data_ra
472b9e60257SRichard Henderson # define cpu_stw_mmuidx_ra    cpu_stw_le_mmuidx_ra
473b9e60257SRichard Henderson # define cpu_stl_mmuidx_ra    cpu_stl_le_mmuidx_ra
474b9e60257SRichard Henderson # define cpu_stq_mmuidx_ra    cpu_stq_le_mmuidx_ra
475b9e60257SRichard Henderson #endif
476b9e60257SRichard Henderson 
cpu_ldub_code(CPUArchState * env,abi_ptr addr)4774ba597c1SRichard Henderson static inline uint32_t cpu_ldub_code(CPUArchState *env, abi_ptr addr)
4784ba597c1SRichard Henderson {
4794ba597c1SRichard Henderson     CPUState *cs = env_cpu(env);
4804ba597c1SRichard Henderson     MemOpIdx oi = make_memop_idx(MO_UB, cpu_mmu_index(cs, true));
4814ba597c1SRichard Henderson     return cpu_ldb_code_mmu(env, addr, oi, 0);
4824ba597c1SRichard Henderson }
4834ba597c1SRichard Henderson 
cpu_lduw_code(CPUArchState * env,abi_ptr addr)4844ba597c1SRichard Henderson static inline uint32_t cpu_lduw_code(CPUArchState *env, abi_ptr addr)
4854ba597c1SRichard Henderson {
4864ba597c1SRichard Henderson     CPUState *cs = env_cpu(env);
4874ba597c1SRichard Henderson     MemOpIdx oi = make_memop_idx(MO_TEUW, cpu_mmu_index(cs, true));
4884ba597c1SRichard Henderson     return cpu_ldw_code_mmu(env, addr, oi, 0);
4894ba597c1SRichard Henderson }
4904ba597c1SRichard Henderson 
cpu_ldl_code(CPUArchState * env,abi_ptr addr)4914ba597c1SRichard Henderson static inline uint32_t cpu_ldl_code(CPUArchState *env, abi_ptr addr)
4924ba597c1SRichard Henderson {
4934ba597c1SRichard Henderson     CPUState *cs = env_cpu(env);
4944ba597c1SRichard Henderson     MemOpIdx oi = make_memop_idx(MO_TEUL, cpu_mmu_index(cs, true));
4954ba597c1SRichard Henderson     return cpu_ldl_code_mmu(env, addr, oi, 0);
4964ba597c1SRichard Henderson }
4974ba597c1SRichard Henderson 
cpu_ldq_code(CPUArchState * env,abi_ptr addr)4984ba597c1SRichard Henderson static inline uint64_t cpu_ldq_code(CPUArchState *env, abi_ptr addr)
4994ba597c1SRichard Henderson {
5004ba597c1SRichard Henderson     CPUState *cs = env_cpu(env);
5014ba597c1SRichard Henderson     MemOpIdx oi = make_memop_idx(MO_TEUQ, cpu_mmu_index(cs, true));
5024ba597c1SRichard Henderson     return cpu_ldq_code_mmu(env, addr, oi, 0);
5034ba597c1SRichard Henderson }
504c773828aSPaolo Bonzini 
505*42fa9665SPhilippe Mathieu-Daudé #endif /* ACCEL_TCG_CPU_LDST_H */
506