1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#if !defined(CODE_ACCESS)
27#include "trace.h"
28#endif
29
30#include "trace/mem.h"
31
32#if DATA_SIZE == 8
33#define SUFFIX q
34#define USUFFIX q
35#define DATA_TYPE uint64_t
36#elif DATA_SIZE == 4
37#define SUFFIX l
38#define USUFFIX l
39#define DATA_TYPE uint32_t
40#elif DATA_SIZE == 2
41#define SUFFIX w
42#define USUFFIX uw
43#define DATA_TYPE uint16_t
44#define DATA_STYPE int16_t
45#elif DATA_SIZE == 1
46#define SUFFIX b
47#define USUFFIX ub
48#define DATA_TYPE uint8_t
49#define DATA_STYPE int8_t
50#else
51#error unsupported data size
52#endif
53
54#if DATA_SIZE == 8
55#define RES_TYPE uint64_t
56#else
57#define RES_TYPE uint32_t
58#endif
59
60static inline RES_TYPE
61glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(CPUArchState *env, target_ulong ptr)
62{
63#if !defined(CODE_ACCESS)
64 trace_guest_mem_before_exec(
65 ENV_GET_CPU(env), ptr,
66 trace_mem_build_info(DATA_SIZE, false, MO_TE, false));
67#endif
68 return glue(glue(ld, USUFFIX), _p)(g2h(ptr));
69}
70
71static inline RES_TYPE
72glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
73 target_ulong ptr,
74 uintptr_t retaddr)
75{
76 return glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(env, ptr);
77}
78
79#if DATA_SIZE <= 2
80static inline int
81glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(CPUArchState *env, target_ulong ptr)
82{
83#if !defined(CODE_ACCESS)
84 trace_guest_mem_before_exec(
85 ENV_GET_CPU(env), ptr,
86 trace_mem_build_info(DATA_SIZE, true, MO_TE, false));
87#endif
88 return glue(glue(lds, SUFFIX), _p)(g2h(ptr));
89}
90
91static inline int
92glue(glue(glue(cpu_lds, SUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
93 target_ulong ptr,
94 uintptr_t retaddr)
95{
96 return glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(env, ptr);
97}
98#endif
99
100#ifndef CODE_ACCESS
101static inline void
102glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(CPUArchState *env, target_ulong ptr,
103 RES_TYPE v)
104{
105#if !defined(CODE_ACCESS)
106 trace_guest_mem_before_exec(
107 ENV_GET_CPU(env), ptr,
108 trace_mem_build_info(DATA_SIZE, false, MO_TE, true));
109#endif
110 glue(glue(st, SUFFIX), _p)(g2h(ptr), v);
111}
112
113static inline void
114glue(glue(glue(cpu_st, SUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
115 target_ulong ptr,
116 RES_TYPE v,
117 uintptr_t retaddr)
118{
119 glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(env, ptr, v);
120}
121#endif
122
123#undef RES_TYPE
124#undef DATA_TYPE
125#undef DATA_STYPE
126#undef SUFFIX
127#undef USUFFIX
128#undef DATA_SIZE
129