@@ -73,8 +73,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
73
73
ABI_TYPE cmpv , ABI_TYPE newv ,
74
74
MemOpIdx oi , uintptr_t retaddr )
75
75
{
76
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
77
- PAGE_READ | PAGE_WRITE , retaddr );
76
+ DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr );
78
77
DATA_TYPE ret ;
79
78
80
79
#if DATA_SIZE == 16
@@ -87,38 +86,11 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
87
86
return ret ;
88
87
}
89
88
90
- #if DATA_SIZE >= 16
91
- #if HAVE_ATOMIC128
92
- ABI_TYPE ATOMIC_NAME (ld )(CPUArchState * env , target_ulong addr ,
93
- MemOpIdx oi , uintptr_t retaddr )
94
- {
95
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
96
- PAGE_READ , retaddr );
97
- DATA_TYPE val ;
98
-
99
- val = atomic16_read (haddr );
100
- ATOMIC_MMU_CLEANUP ;
101
- atomic_trace_ld_post (env , addr , oi );
102
- return val ;
103
- }
104
-
105
- void ATOMIC_NAME (st )(CPUArchState * env , target_ulong addr , ABI_TYPE val ,
106
- MemOpIdx oi , uintptr_t retaddr )
107
- {
108
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
109
- PAGE_WRITE , retaddr );
110
-
111
- atomic16_set (haddr , val );
112
- ATOMIC_MMU_CLEANUP ;
113
- atomic_trace_st_post (env , addr , oi );
114
- }
115
- #endif
116
- #else
89
+ #if DATA_SIZE < 16
117
90
ABI_TYPE ATOMIC_NAME (xchg )(CPUArchState * env , target_ulong addr , ABI_TYPE val ,
118
91
MemOpIdx oi , uintptr_t retaddr )
119
92
{
120
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
121
- PAGE_READ | PAGE_WRITE , retaddr );
93
+ DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr );
122
94
DATA_TYPE ret ;
123
95
124
96
ret = qatomic_xchg__nocheck (haddr , val );
@@ -131,9 +103,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
131
103
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
132
104
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
133
105
{ \
134
- DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
135
- PAGE_READ | PAGE_WRITE, retaddr); \
136
- DATA_TYPE ret; \
106
+ DATA_TYPE *haddr, ret; \
107
+ haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, retaddr); \
137
108
ret = qatomic_##X(haddr, val); \
138
109
ATOMIC_MMU_CLEANUP; \
139
110
atomic_trace_rmw_post(env, addr, oi); \
@@ -163,9 +134,8 @@ GEN_ATOMIC_HELPER(xor_fetch)
163
134
ABI_TYPE ATOMIC_NAME (X )(CPUArchState * env , target_ulong addr , \
164
135
ABI_TYPE xval , MemOpIdx oi , uintptr_t retaddr ) \
165
136
{ \
166
- XDATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , \
167
- PAGE_READ | PAGE_WRITE , retaddr ); \
168
- XDATA_TYPE cmp , old , new , val = xval ; \
137
+ XDATA_TYPE * haddr , cmp , old , new , val = xval ; \
138
+ haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr ); \
169
139
smp_mb (); \
170
140
cmp = qatomic_read__nocheck (haddr ); \
171
141
do { \
@@ -188,7 +158,7 @@ GEN_ATOMIC_HELPER_FN(smax_fetch, MAX, SDATA_TYPE, new)
188
158
GEN_ATOMIC_HELPER_FN (umax_fetch , MAX , DATA_TYPE , new )
189
159
190
160
#undef GEN_ATOMIC_HELPER_FN
191
- #endif /* DATA SIZE >= 16 */
161
+ #endif /* DATA SIZE < 16 */
192
162
193
163
#undef END
194
164
@@ -206,8 +176,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
206
176
ABI_TYPE cmpv , ABI_TYPE newv ,
207
177
MemOpIdx oi , uintptr_t retaddr )
208
178
{
209
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
210
- PAGE_READ | PAGE_WRITE , retaddr );
179
+ DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr );
211
180
DATA_TYPE ret ;
212
181
213
182
#if DATA_SIZE == 16
@@ -220,39 +189,11 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
220
189
return BSWAP (ret );
221
190
}
222
191
223
- #if DATA_SIZE >= 16
224
- #if HAVE_ATOMIC128
225
- ABI_TYPE ATOMIC_NAME (ld )(CPUArchState * env , target_ulong addr ,
226
- MemOpIdx oi , uintptr_t retaddr )
227
- {
228
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
229
- PAGE_READ , retaddr );
230
- DATA_TYPE val ;
231
-
232
- val = atomic16_read (haddr );
233
- ATOMIC_MMU_CLEANUP ;
234
- atomic_trace_ld_post (env , addr , oi );
235
- return BSWAP (val );
236
- }
237
-
238
- void ATOMIC_NAME (st )(CPUArchState * env , target_ulong addr , ABI_TYPE val ,
239
- MemOpIdx oi , uintptr_t retaddr )
240
- {
241
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
242
- PAGE_WRITE , retaddr );
243
-
244
- val = BSWAP (val );
245
- atomic16_set (haddr , val );
246
- ATOMIC_MMU_CLEANUP ;
247
- atomic_trace_st_post (env , addr , oi );
248
- }
249
- #endif
250
- #else
192
+ #if DATA_SIZE < 16
251
193
ABI_TYPE ATOMIC_NAME (xchg )(CPUArchState * env , target_ulong addr , ABI_TYPE val ,
252
194
MemOpIdx oi , uintptr_t retaddr )
253
195
{
254
- DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE ,
255
- PAGE_READ | PAGE_WRITE , retaddr );
196
+ DATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr );
256
197
ABI_TYPE ret ;
257
198
258
199
ret = qatomic_xchg__nocheck (haddr , BSWAP (val ));
@@ -265,9 +206,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
265
206
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
266
207
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
267
208
{ \
268
- DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
269
- PAGE_READ | PAGE_WRITE, retaddr); \
270
- DATA_TYPE ret; \
209
+ DATA_TYPE *haddr, ret; \
210
+ haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, retaddr); \
271
211
ret = qatomic_##X(haddr, BSWAP(val)); \
272
212
ATOMIC_MMU_CLEANUP; \
273
213
atomic_trace_rmw_post(env, addr, oi); \
@@ -294,9 +234,8 @@ GEN_ATOMIC_HELPER(xor_fetch)
294
234
ABI_TYPE ATOMIC_NAME (X )(CPUArchState * env , target_ulong addr , \
295
235
ABI_TYPE xval , MemOpIdx oi , uintptr_t retaddr ) \
296
236
{ \
297
- XDATA_TYPE * haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , \
298
- PAGE_READ | PAGE_WRITE , retaddr ); \
299
- XDATA_TYPE ldo , ldn , old , new , val = xval ; \
237
+ XDATA_TYPE * haddr , ldo , ldn , old , new , val = xval ; \
238
+ haddr = atomic_mmu_lookup (env , addr , oi , DATA_SIZE , retaddr ); \
300
239
smp_mb (); \
301
240
ldn = qatomic_read__nocheck (haddr ); \
302
241
do { \
@@ -326,7 +265,7 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new)
326
265
#undef ADD
327
266
328
267
#undef GEN_ATOMIC_HELPER_FN
329
- #endif /* DATA_SIZE >= 16 */
268
+ #endif /* DATA_SIZE < 16 */
330
269
331
270
#undef END
332
271
#endif /* DATA_SIZE > 1 */
0 commit comments