1 /*
2 * Software MMU support (per-target)
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16 *
17 */
18
19 /*
20 * Generate inline load/store functions for all MMU modes (typically
21 * at least _user and _kernel) as well as _data versions, for all data
22 * sizes.
23 *
24 * Used by target op helpers.
25 *
26 * The syntax for the accessors is:
27 *
28 * load: cpu_ld{sign}{size}{end}_{mmusuffix}(env, ptr)
29 * cpu_ld{sign}{size}{end}_{mmusuffix}_ra(env, ptr, retaddr)
30 * cpu_ld{sign}{size}{end}_mmuidx_ra(env, ptr, mmu_idx, retaddr)
31 * cpu_ld{sign}{size}{end}_mmu(env, ptr, oi, retaddr)
32 *
33 * store: cpu_st{size}{end}_{mmusuffix}(env, ptr, val)
34 * cpu_st{size}{end}_{mmusuffix}_ra(env, ptr, val, retaddr)
35 * cpu_st{size}{end}_mmuidx_ra(env, ptr, val, mmu_idx, retaddr)
36 * cpu_st{size}{end}_mmu(env, ptr, val, oi, retaddr)
37 *
38 * sign is:
39 * (empty): for 32 and 64 bit sizes
40 * u : unsigned
41 * s : signed
42 *
43 * size is:
44 * b: 8 bits
45 * w: 16 bits
46 * l: 32 bits
47 * q: 64 bits
48 *
49 * end is:
50 * (empty): for target native endian, or for 8 bit access
51 * _be: for forced big endian
52 * _le: for forced little endian
53 *
54 * mmusuffix is one of the generic suffixes "data" or "code", or "mmuidx".
55 * The "mmuidx" suffix carries an extra mmu_idx argument that specifies
56 * the index to use; the "data" and "code" suffixes take the index from
57 * cpu_mmu_index().
58 *
59 * The "mmu" suffix carries the full MemOpIdx, with both mmu_idx and the
60 * MemOp including alignment requirements. The alignment will be enforced.
61 */
62 #ifndef ACCEL_TCG_CPU_LDST_H
63 #define ACCEL_TCG_CPU_LDST_H
64
65 #ifndef CONFIG_TCG
66 #error Can only include this header with TCG
67 #endif
68
69 #include "exec/cpu-common.h"
70 #include "accel/tcg/cpu-ldst-common.h"
71 #include "accel/tcg/cpu-mmu-index.h"
72 #include "exec/abi_ptr.h"
73
74 #if defined(CONFIG_USER_ONLY)
75 #include "user/guest-host.h"
76 #endif /* CONFIG_USER_ONLY */
77
78 static inline uint32_t
cpu_ldub_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)79 cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr, int mmu_idx, uintptr_t ra)
80 {
81 MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
82 return cpu_ldb_mmu(env, addr, oi, ra);
83 }
84
85 static inline int
cpu_ldsb_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)86 cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr, int mmu_idx, uintptr_t ra)
87 {
88 return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra);
89 }
90
91 static inline uint32_t
cpu_lduw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)92 cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
93 int mmu_idx, uintptr_t ra)
94 {
95 MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
96 return cpu_ldw_mmu(env, addr, oi, ra);
97 }
98
99 static inline int
cpu_ldsw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)100 cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
101 int mmu_idx, uintptr_t ra)
102 {
103 return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra);
104 }
105
106 static inline uint32_t
cpu_ldl_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)107 cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
108 int mmu_idx, uintptr_t ra)
109 {
110 MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
111 return cpu_ldl_mmu(env, addr, oi, ra);
112 }
113
114 static inline uint64_t
cpu_ldq_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)115 cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
116 int mmu_idx, uintptr_t ra)
117 {
118 MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
119 return cpu_ldq_mmu(env, addr, oi, ra);
120 }
121
122 static inline uint32_t
cpu_lduw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)123 cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
124 int mmu_idx, uintptr_t ra)
125 {
126 MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
127 return cpu_ldw_mmu(env, addr, oi, ra);
128 }
129
130 static inline int
cpu_ldsw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)131 cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
132 int mmu_idx, uintptr_t ra)
133 {
134 return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra);
135 }
136
137 static inline uint32_t
cpu_ldl_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)138 cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
139 int mmu_idx, uintptr_t ra)
140 {
141 MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
142 return cpu_ldl_mmu(env, addr, oi, ra);
143 }
144
145 static inline uint64_t
cpu_ldq_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,int mmu_idx,uintptr_t ra)146 cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
147 int mmu_idx, uintptr_t ra)
148 {
149 MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
150 return cpu_ldq_mmu(env, addr, oi, ra);
151 }
152
153 static inline void
cpu_stb_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)154 cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
155 int mmu_idx, uintptr_t ra)
156 {
157 MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
158 cpu_stb_mmu(env, addr, val, oi, ra);
159 }
160
161 static inline void
cpu_stw_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)162 cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
163 int mmu_idx, uintptr_t ra)
164 {
165 MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
166 cpu_stw_mmu(env, addr, val, oi, ra);
167 }
168
169 static inline void
cpu_stl_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)170 cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
171 int mmu_idx, uintptr_t ra)
172 {
173 MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
174 cpu_stl_mmu(env, addr, val, oi, ra);
175 }
176
177 static inline void
cpu_stq_be_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint64_t val,int mmu_idx,uintptr_t ra)178 cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
179 int mmu_idx, uintptr_t ra)
180 {
181 MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
182 cpu_stq_mmu(env, addr, val, oi, ra);
183 }
184
185 static inline void
cpu_stw_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)186 cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
187 int mmu_idx, uintptr_t ra)
188 {
189 MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
190 cpu_stw_mmu(env, addr, val, oi, ra);
191 }
192
193 static inline void
cpu_stl_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint32_t val,int mmu_idx,uintptr_t ra)194 cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
195 int mmu_idx, uintptr_t ra)
196 {
197 MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
198 cpu_stl_mmu(env, addr, val, oi, ra);
199 }
200
201 static inline void
cpu_stq_le_mmuidx_ra(CPUArchState * env,abi_ptr addr,uint64_t val,int mmu_idx,uintptr_t ra)202 cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
203 int mmu_idx, uintptr_t ra)
204 {
205 MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
206 cpu_stq_mmu(env, addr, val, oi, ra);
207 }
208
209 /*--------------------------*/
210
211 static inline uint32_t
cpu_ldub_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)212 cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
213 {
214 int mmu_index = cpu_mmu_index(env_cpu(env), false);
215 return cpu_ldub_mmuidx_ra(env, addr, mmu_index, ra);
216 }
217
218 static inline int
cpu_ldsb_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)219 cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
220 {
221 return (int8_t)cpu_ldub_data_ra(env, addr, ra);
222 }
223
224 static inline uint32_t
cpu_lduw_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)225 cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
226 {
227 int mmu_index = cpu_mmu_index(env_cpu(env), false);
228 return cpu_lduw_be_mmuidx_ra(env, addr, mmu_index, ra);
229 }
230
231 static inline int
cpu_ldsw_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)232 cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
233 {
234 return (int16_t)cpu_lduw_be_data_ra(env, addr, ra);
235 }
236
237 static inline uint32_t
cpu_ldl_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)238 cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
239 {
240 int mmu_index = cpu_mmu_index(env_cpu(env), false);
241 return cpu_ldl_be_mmuidx_ra(env, addr, mmu_index, ra);
242 }
243
244 static inline uint64_t
cpu_ldq_be_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)245 cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
246 {
247 int mmu_index = cpu_mmu_index(env_cpu(env), false);
248 return cpu_ldq_be_mmuidx_ra(env, addr, mmu_index, ra);
249 }
250
251 static inline uint32_t
cpu_lduw_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)252 cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
253 {
254 int mmu_index = cpu_mmu_index(env_cpu(env), false);
255 return cpu_lduw_le_mmuidx_ra(env, addr, mmu_index, ra);
256 }
257
258 static inline int
cpu_ldsw_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)259 cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
260 {
261 return (int16_t)cpu_lduw_le_data_ra(env, addr, ra);
262 }
263
264 static inline uint32_t
cpu_ldl_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)265 cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
266 {
267 int mmu_index = cpu_mmu_index(env_cpu(env), false);
268 return cpu_ldl_le_mmuidx_ra(env, addr, mmu_index, ra);
269 }
270
271 static inline uint64_t
cpu_ldq_le_data_ra(CPUArchState * env,abi_ptr addr,uintptr_t ra)272 cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
273 {
274 int mmu_index = cpu_mmu_index(env_cpu(env), false);
275 return cpu_ldq_le_mmuidx_ra(env, addr, mmu_index, ra);
276 }
277
278 static inline void
cpu_stb_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)279 cpu_stb_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
280 {
281 int mmu_index = cpu_mmu_index(env_cpu(env), false);
282 cpu_stb_mmuidx_ra(env, addr, val, mmu_index, ra);
283 }
284
285 static inline void
cpu_stw_be_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)286 cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
287 {
288 int mmu_index = cpu_mmu_index(env_cpu(env), false);
289 cpu_stw_be_mmuidx_ra(env, addr, val, mmu_index, ra);
290 }
291
292 static inline void
cpu_stl_be_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)293 cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
294 {
295 int mmu_index = cpu_mmu_index(env_cpu(env), false);
296 cpu_stl_be_mmuidx_ra(env, addr, val, mmu_index, ra);
297 }
298
299 static inline void
cpu_stq_be_data_ra(CPUArchState * env,abi_ptr addr,uint64_t val,uintptr_t ra)300 cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr, uint64_t val, uintptr_t ra)
301 {
302 int mmu_index = cpu_mmu_index(env_cpu(env), false);
303 cpu_stq_be_mmuidx_ra(env, addr, val, mmu_index, ra);
304 }
305
306 static inline void
cpu_stw_le_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)307 cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
308 {
309 int mmu_index = cpu_mmu_index(env_cpu(env), false);
310 cpu_stw_le_mmuidx_ra(env, addr, val, mmu_index, ra);
311 }
312
313 static inline void
cpu_stl_le_data_ra(CPUArchState * env,abi_ptr addr,uint32_t val,uintptr_t ra)314 cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr, uint32_t val, uintptr_t ra)
315 {
316 int mmu_index = cpu_mmu_index(env_cpu(env), false);
317 cpu_stl_le_mmuidx_ra(env, addr, val, mmu_index, ra);
318 }
319
320 static inline void
cpu_stq_le_data_ra(CPUArchState * env,abi_ptr addr,uint64_t val,uintptr_t ra)321 cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr, uint64_t val, uintptr_t ra)
322 {
323 int mmu_index = cpu_mmu_index(env_cpu(env), false);
324 cpu_stq_le_mmuidx_ra(env, addr, val, mmu_index, ra);
325 }
326
327 /*--------------------------*/
328
329 static inline uint32_t
cpu_ldub_data(CPUArchState * env,abi_ptr addr)330 cpu_ldub_data(CPUArchState *env, abi_ptr addr)
331 {
332 return cpu_ldub_data_ra(env, addr, 0);
333 }
334
335 static inline int
cpu_ldsb_data(CPUArchState * env,abi_ptr addr)336 cpu_ldsb_data(CPUArchState *env, abi_ptr addr)
337 {
338 return (int8_t)cpu_ldub_data(env, addr);
339 }
340
341 static inline uint32_t
cpu_lduw_be_data(CPUArchState * env,abi_ptr addr)342 cpu_lduw_be_data(CPUArchState *env, abi_ptr addr)
343 {
344 return cpu_lduw_be_data_ra(env, addr, 0);
345 }
346
347 static inline int
cpu_ldsw_be_data(CPUArchState * env,abi_ptr addr)348 cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr)
349 {
350 return (int16_t)cpu_lduw_be_data(env, addr);
351 }
352
353 static inline uint32_t
cpu_ldl_be_data(CPUArchState * env,abi_ptr addr)354 cpu_ldl_be_data(CPUArchState *env, abi_ptr addr)
355 {
356 return cpu_ldl_be_data_ra(env, addr, 0);
357 }
358
359 static inline uint64_t
cpu_ldq_be_data(CPUArchState * env,abi_ptr addr)360 cpu_ldq_be_data(CPUArchState *env, abi_ptr addr)
361 {
362 return cpu_ldq_be_data_ra(env, addr, 0);
363 }
364
365 static inline uint32_t
cpu_lduw_le_data(CPUArchState * env,abi_ptr addr)366 cpu_lduw_le_data(CPUArchState *env, abi_ptr addr)
367 {
368 return cpu_lduw_le_data_ra(env, addr, 0);
369 }
370
371 static inline int
cpu_ldsw_le_data(CPUArchState * env,abi_ptr addr)372 cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr)
373 {
374 return (int16_t)cpu_lduw_le_data(env, addr);
375 }
376
377 static inline uint32_t
cpu_ldl_le_data(CPUArchState * env,abi_ptr addr)378 cpu_ldl_le_data(CPUArchState *env, abi_ptr addr)
379 {
380 return cpu_ldl_le_data_ra(env, addr, 0);
381 }
382
383 static inline uint64_t
cpu_ldq_le_data(CPUArchState * env,abi_ptr addr)384 cpu_ldq_le_data(CPUArchState *env, abi_ptr addr)
385 {
386 return cpu_ldq_le_data_ra(env, addr, 0);
387 }
388
389 static inline void
cpu_stb_data(CPUArchState * env,abi_ptr addr,uint32_t val)390 cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val)
391 {
392 cpu_stb_data_ra(env, addr, val, 0);
393 }
394
395 static inline void
cpu_stw_be_data(CPUArchState * env,abi_ptr addr,uint32_t val)396 cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
397 {
398 cpu_stw_be_data_ra(env, addr, val, 0);
399 }
400
401 static inline void
cpu_stl_be_data(CPUArchState * env,abi_ptr addr,uint32_t val)402 cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
403 {
404 cpu_stl_be_data_ra(env, addr, val, 0);
405 }
406
407 static inline void
cpu_stq_be_data(CPUArchState * env,abi_ptr addr,uint64_t val)408 cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val)
409 {
410 cpu_stq_be_data_ra(env, addr, val, 0);
411 }
412
413 static inline void
cpu_stw_le_data(CPUArchState * env,abi_ptr addr,uint32_t val)414 cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
415 {
416 cpu_stw_le_data_ra(env, addr, val, 0);
417 }
418
419 static inline void
cpu_stl_le_data(CPUArchState * env,abi_ptr addr,uint32_t val)420 cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
421 {
422 cpu_stl_le_data_ra(env, addr, val, 0);
423 }
424
425 static inline void
cpu_stq_le_data(CPUArchState * env,abi_ptr addr,uint64_t val)426 cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val)
427 {
428 cpu_stq_le_data_ra(env, addr, val, 0);
429 }
430
431 #if TARGET_BIG_ENDIAN
432 # define cpu_lduw_data cpu_lduw_be_data
433 # define cpu_ldsw_data cpu_ldsw_be_data
434 # define cpu_ldl_data cpu_ldl_be_data
435 # define cpu_ldq_data cpu_ldq_be_data
436 # define cpu_lduw_data_ra cpu_lduw_be_data_ra
437 # define cpu_ldsw_data_ra cpu_ldsw_be_data_ra
438 # define cpu_ldl_data_ra cpu_ldl_be_data_ra
439 # define cpu_ldq_data_ra cpu_ldq_be_data_ra
440 # define cpu_lduw_mmuidx_ra cpu_lduw_be_mmuidx_ra
441 # define cpu_ldsw_mmuidx_ra cpu_ldsw_be_mmuidx_ra
442 # define cpu_ldl_mmuidx_ra cpu_ldl_be_mmuidx_ra
443 # define cpu_ldq_mmuidx_ra cpu_ldq_be_mmuidx_ra
444 # define cpu_stw_data cpu_stw_be_data
445 # define cpu_stl_data cpu_stl_be_data
446 # define cpu_stq_data cpu_stq_be_data
447 # define cpu_stw_data_ra cpu_stw_be_data_ra
448 # define cpu_stl_data_ra cpu_stl_be_data_ra
449 # define cpu_stq_data_ra cpu_stq_be_data_ra
450 # define cpu_stw_mmuidx_ra cpu_stw_be_mmuidx_ra
451 # define cpu_stl_mmuidx_ra cpu_stl_be_mmuidx_ra
452 # define cpu_stq_mmuidx_ra cpu_stq_be_mmuidx_ra
453 #else
454 # define cpu_lduw_data cpu_lduw_le_data
455 # define cpu_ldsw_data cpu_ldsw_le_data
456 # define cpu_ldl_data cpu_ldl_le_data
457 # define cpu_ldq_data cpu_ldq_le_data
458 # define cpu_lduw_data_ra cpu_lduw_le_data_ra
459 # define cpu_ldsw_data_ra cpu_ldsw_le_data_ra
460 # define cpu_ldl_data_ra cpu_ldl_le_data_ra
461 # define cpu_ldq_data_ra cpu_ldq_le_data_ra
462 # define cpu_lduw_mmuidx_ra cpu_lduw_le_mmuidx_ra
463 # define cpu_ldsw_mmuidx_ra cpu_ldsw_le_mmuidx_ra
464 # define cpu_ldl_mmuidx_ra cpu_ldl_le_mmuidx_ra
465 # define cpu_ldq_mmuidx_ra cpu_ldq_le_mmuidx_ra
466 # define cpu_stw_data cpu_stw_le_data
467 # define cpu_stl_data cpu_stl_le_data
468 # define cpu_stq_data cpu_stq_le_data
469 # define cpu_stw_data_ra cpu_stw_le_data_ra
470 # define cpu_stl_data_ra cpu_stl_le_data_ra
471 # define cpu_stq_data_ra cpu_stq_le_data_ra
472 # define cpu_stw_mmuidx_ra cpu_stw_le_mmuidx_ra
473 # define cpu_stl_mmuidx_ra cpu_stl_le_mmuidx_ra
474 # define cpu_stq_mmuidx_ra cpu_stq_le_mmuidx_ra
475 #endif
476
cpu_ldub_code(CPUArchState * env,abi_ptr addr)477 static inline uint32_t cpu_ldub_code(CPUArchState *env, abi_ptr addr)
478 {
479 CPUState *cs = env_cpu(env);
480 MemOpIdx oi = make_memop_idx(MO_UB, cpu_mmu_index(cs, true));
481 return cpu_ldb_code_mmu(env, addr, oi, 0);
482 }
483
cpu_lduw_code(CPUArchState * env,abi_ptr addr)484 static inline uint32_t cpu_lduw_code(CPUArchState *env, abi_ptr addr)
485 {
486 CPUState *cs = env_cpu(env);
487 MemOpIdx oi = make_memop_idx(MO_TEUW, cpu_mmu_index(cs, true));
488 return cpu_ldw_code_mmu(env, addr, oi, 0);
489 }
490
cpu_ldl_code(CPUArchState * env,abi_ptr addr)491 static inline uint32_t cpu_ldl_code(CPUArchState *env, abi_ptr addr)
492 {
493 CPUState *cs = env_cpu(env);
494 MemOpIdx oi = make_memop_idx(MO_TEUL, cpu_mmu_index(cs, true));
495 return cpu_ldl_code_mmu(env, addr, oi, 0);
496 }
497
cpu_ldq_code(CPUArchState * env,abi_ptr addr)498 static inline uint64_t cpu_ldq_code(CPUArchState *env, abi_ptr addr)
499 {
500 CPUState *cs = env_cpu(env);
501 MemOpIdx oi = make_memop_idx(MO_TEUQ, cpu_mmu_index(cs, true));
502 return cpu_ldq_code_mmu(env, addr, oi, 0);
503 }
504
505 #endif /* ACCEL_TCG_CPU_LDST_H */
506