Skip to content

Commit 6723ff6

Browse files
committed
Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20211006' into staging
More fixes for fedora-i386-cross Add dup_const_tl Expand MemOp MO_SIZE Move MemOpIdx out of tcg.h Vector support for tcg/s390x # gpg: Signature made Wed 06 Oct 2021 08:12:53 AM PDT # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "[email protected]" # gpg: Good signature from "Richard Henderson <[email protected]>" [ultimate] * remotes/rth/tags/pull-tcg-20211006: (28 commits) tcg/s390x: Implement TCG_TARGET_HAS_cmpsel_vec tcg/s390x: Implement TCG_TARGET_HAS_bitsel_vec tcg/s390x: Implement TCG_TARGET_HAS_sat_vec tcg/s390x: Implement TCG_TARGET_HAS_minmax_vec tcg/s390x: Implement vector shift operations tcg/s390x: Implement TCG_TARGET_HAS_mul_vec tcg/s390x: Implement andc, orc, abs, neg, not vector operations tcg/s390x: Implement minimal vector operations tcg/s390x: Implement tcg_out_dup*_vec tcg/s390x: Implement tcg_out_mov for vector types tcg/s390x: Implement tcg_out_ld/st for vector types tcg/s390x: Add host vector framework tcg/s390x: Merge TCG_AREG0 and TCG_REG_CALL_STACK into TCGReg tcg/s390x: Change FACILITY representation tcg/s390x: Rename from tcg/s390 tcg: Expand usadd/ussub with umin/umax hw/core/cpu: Re-sort the non-pointers to the end of CPUClass trace: Split guest_mem_before plugins: Reorg arguments to qemu_plugin_vcpu_mem_cb accel/tcg: Pass MemOpIdx to atomic_trace_*_post ... Signed-off-by: Richard Henderson <[email protected]>
2 parents 5564f06 + ea3f2af commit 6723ff6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1445
-610
lines changed

accel/tcg/atomic_common.c.inc

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,56 +13,43 @@
1313
* See the COPYING file in the top-level directory.
1414
*/
1515

16-
static uint16_t atomic_trace_rmw_pre(CPUArchState *env, target_ulong addr,
17-
TCGMemOpIdx oi)
16+
static void atomic_trace_rmw_pre(CPUArchState *env, target_ulong addr,
17+
MemOpIdx oi)
1818
{
1919
CPUState *cpu = env_cpu(env);
20-
uint16_t info = trace_mem_get_info(get_memop(oi), get_mmuidx(oi), false);
2120

22-
trace_guest_mem_before_exec(cpu, addr, info);
23-
trace_guest_mem_before_exec(cpu, addr, info | TRACE_MEM_ST);
24-
25-
return info;
21+
trace_guest_rmw_before_exec(cpu, addr, oi);
2622
}
2723

2824
static void atomic_trace_rmw_post(CPUArchState *env, target_ulong addr,
29-
uint16_t info)
25+
MemOpIdx oi)
3026
{
31-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, info);
32-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, info | TRACE_MEM_ST);
27+
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_RW);
3328
}
3429

3530
#if HAVE_ATOMIC128
36-
static uint16_t atomic_trace_ld_pre(CPUArchState *env, target_ulong addr,
37-
TCGMemOpIdx oi)
31+
static void atomic_trace_ld_pre(CPUArchState *env, target_ulong addr,
32+
MemOpIdx oi)
3833
{
39-
uint16_t info = trace_mem_get_info(get_memop(oi), get_mmuidx(oi), false);
40-
41-
trace_guest_mem_before_exec(env_cpu(env), addr, info);
42-
43-
return info;
34+
trace_guest_ld_before_exec(env_cpu(env), addr, oi);
4435
}
4536

4637
static void atomic_trace_ld_post(CPUArchState *env, target_ulong addr,
47-
uint16_t info)
38+
MemOpIdx oi)
4839
{
49-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, info);
40+
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
5041
}
5142

52-
static uint16_t atomic_trace_st_pre(CPUArchState *env, target_ulong addr,
53-
TCGMemOpIdx oi)
43+
static void atomic_trace_st_pre(CPUArchState *env, target_ulong addr,
44+
MemOpIdx oi)
5445
{
55-
uint16_t info = trace_mem_get_info(get_memop(oi), get_mmuidx(oi), true);
56-
57-
trace_guest_mem_before_exec(env_cpu(env), addr, info);
58-
59-
return info;
46+
trace_guest_st_before_exec(env_cpu(env), addr, oi);
6047
}
6148

6249
static void atomic_trace_st_post(CPUArchState *env, target_ulong addr,
63-
uint16_t info)
50+
MemOpIdx oi)
6451
{
65-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, info);
52+
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W);
6653
}
6754
#endif
6855

accel/tcg/atomic_template.h

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020

2121
#include "qemu/plugin.h"
22-
#include "trace/mem.h"
2322

2423
#if DATA_SIZE == 16
2524
# define SUFFIX o
@@ -72,77 +71,77 @@
7271

7372
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
7473
ABI_TYPE cmpv, ABI_TYPE newv,
75-
TCGMemOpIdx oi, uintptr_t retaddr)
74+
MemOpIdx oi, uintptr_t retaddr)
7675
{
7776
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
7877
PAGE_READ | PAGE_WRITE, retaddr);
7978
DATA_TYPE ret;
80-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi);
8179

80+
atomic_trace_rmw_pre(env, addr, oi);
8281
#if DATA_SIZE == 16
8382
ret = atomic16_cmpxchg(haddr, cmpv, newv);
8483
#else
8584
ret = qatomic_cmpxchg__nocheck(haddr, cmpv, newv);
8685
#endif
8786
ATOMIC_MMU_CLEANUP;
88-
atomic_trace_rmw_post(env, addr, info);
87+
atomic_trace_rmw_post(env, addr, oi);
8988
return ret;
9089
}
9190

9291
#if DATA_SIZE >= 16
9392
#if HAVE_ATOMIC128
9493
ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr,
95-
TCGMemOpIdx oi, uintptr_t retaddr)
94+
MemOpIdx oi, uintptr_t retaddr)
9695
{
9796
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
9897
PAGE_READ, retaddr);
9998
DATA_TYPE val;
100-
uint16_t info = atomic_trace_ld_pre(env, addr, oi);
10199

100+
atomic_trace_ld_pre(env, addr, oi);
102101
val = atomic16_read(haddr);
103102
ATOMIC_MMU_CLEANUP;
104-
atomic_trace_ld_post(env, addr, info);
103+
atomic_trace_ld_post(env, addr, oi);
105104
return val;
106105
}
107106

108107
void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
109-
TCGMemOpIdx oi, uintptr_t retaddr)
108+
MemOpIdx oi, uintptr_t retaddr)
110109
{
111110
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
112111
PAGE_WRITE, retaddr);
113-
uint16_t info = atomic_trace_st_pre(env, addr, oi);
114112

113+
atomic_trace_st_pre(env, addr, oi);
115114
atomic16_set(haddr, val);
116115
ATOMIC_MMU_CLEANUP;
117-
atomic_trace_st_post(env, addr, info);
116+
atomic_trace_st_post(env, addr, oi);
118117
}
119118
#endif
120119
#else
121120
ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
122-
TCGMemOpIdx oi, uintptr_t retaddr)
121+
MemOpIdx oi, uintptr_t retaddr)
123122
{
124123
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
125124
PAGE_READ | PAGE_WRITE, retaddr);
126125
DATA_TYPE ret;
127-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi);
128126

127+
atomic_trace_rmw_pre(env, addr, oi);
129128
ret = qatomic_xchg__nocheck(haddr, val);
130129
ATOMIC_MMU_CLEANUP;
131-
atomic_trace_rmw_post(env, addr, info);
130+
atomic_trace_rmw_post(env, addr, oi);
132131
return ret;
133132
}
134133

135134
#define GEN_ATOMIC_HELPER(X) \
136135
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
137-
ABI_TYPE val, TCGMemOpIdx oi, uintptr_t retaddr) \
136+
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
138137
{ \
139138
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
140139
PAGE_READ | PAGE_WRITE, retaddr); \
141140
DATA_TYPE ret; \
142-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi); \
141+
atomic_trace_rmw_pre(env, addr, oi); \
143142
ret = qatomic_##X(haddr, val); \
144143
ATOMIC_MMU_CLEANUP; \
145-
atomic_trace_rmw_post(env, addr, info); \
144+
atomic_trace_rmw_post(env, addr, oi); \
146145
return ret; \
147146
}
148147

@@ -167,20 +166,20 @@ GEN_ATOMIC_HELPER(xor_fetch)
167166
*/
168167
#define GEN_ATOMIC_HELPER_FN(X, FN, XDATA_TYPE, RET) \
169168
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
170-
ABI_TYPE xval, TCGMemOpIdx oi, uintptr_t retaddr) \
169+
ABI_TYPE xval, MemOpIdx oi, uintptr_t retaddr) \
171170
{ \
172171
XDATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
173172
PAGE_READ | PAGE_WRITE, retaddr); \
174173
XDATA_TYPE cmp, old, new, val = xval; \
175-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi); \
174+
atomic_trace_rmw_pre(env, addr, oi); \
176175
smp_mb(); \
177176
cmp = qatomic_read__nocheck(haddr); \
178177
do { \
179178
old = cmp; new = FN(old, val); \
180179
cmp = qatomic_cmpxchg__nocheck(haddr, old, new); \
181180
} while (cmp != old); \
182181
ATOMIC_MMU_CLEANUP; \
183-
atomic_trace_rmw_post(env, addr, info); \
182+
atomic_trace_rmw_post(env, addr, oi); \
184183
return RET; \
185184
}
186185

@@ -211,78 +210,78 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new)
211210

212211
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
213212
ABI_TYPE cmpv, ABI_TYPE newv,
214-
TCGMemOpIdx oi, uintptr_t retaddr)
213+
MemOpIdx oi, uintptr_t retaddr)
215214
{
216215
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
217216
PAGE_READ | PAGE_WRITE, retaddr);
218217
DATA_TYPE ret;
219-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi);
220218

219+
atomic_trace_rmw_pre(env, addr, oi);
221220
#if DATA_SIZE == 16
222221
ret = atomic16_cmpxchg(haddr, BSWAP(cmpv), BSWAP(newv));
223222
#else
224223
ret = qatomic_cmpxchg__nocheck(haddr, BSWAP(cmpv), BSWAP(newv));
225224
#endif
226225
ATOMIC_MMU_CLEANUP;
227-
atomic_trace_rmw_post(env, addr, info);
226+
atomic_trace_rmw_post(env, addr, oi);
228227
return BSWAP(ret);
229228
}
230229

231230
#if DATA_SIZE >= 16
232231
#if HAVE_ATOMIC128
233232
ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr,
234-
TCGMemOpIdx oi, uintptr_t retaddr)
233+
MemOpIdx oi, uintptr_t retaddr)
235234
{
236235
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
237236
PAGE_READ, retaddr);
238237
DATA_TYPE val;
239-
uint16_t info = atomic_trace_ld_pre(env, addr, oi);
240238

239+
atomic_trace_ld_pre(env, addr, oi);
241240
val = atomic16_read(haddr);
242241
ATOMIC_MMU_CLEANUP;
243-
atomic_trace_ld_post(env, addr, info);
242+
atomic_trace_ld_post(env, addr, oi);
244243
return BSWAP(val);
245244
}
246245

247246
void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
248-
TCGMemOpIdx oi, uintptr_t retaddr)
247+
MemOpIdx oi, uintptr_t retaddr)
249248
{
250249
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
251250
PAGE_WRITE, retaddr);
252-
uint16_t info = atomic_trace_st_pre(env, addr, oi);
253251

252+
atomic_trace_st_pre(env, addr, oi);
254253
val = BSWAP(val);
255254
atomic16_set(haddr, val);
256255
ATOMIC_MMU_CLEANUP;
257-
atomic_trace_st_post(env, addr, info);
256+
atomic_trace_st_post(env, addr, oi);
258257
}
259258
#endif
260259
#else
261260
ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
262-
TCGMemOpIdx oi, uintptr_t retaddr)
261+
MemOpIdx oi, uintptr_t retaddr)
263262
{
264263
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
265264
PAGE_READ | PAGE_WRITE, retaddr);
266265
ABI_TYPE ret;
267-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi);
268266

267+
atomic_trace_rmw_pre(env, addr, oi);
269268
ret = qatomic_xchg__nocheck(haddr, BSWAP(val));
270269
ATOMIC_MMU_CLEANUP;
271-
atomic_trace_rmw_post(env, addr, info);
270+
atomic_trace_rmw_post(env, addr, oi);
272271
return BSWAP(ret);
273272
}
274273

275274
#define GEN_ATOMIC_HELPER(X) \
276275
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
277-
ABI_TYPE val, TCGMemOpIdx oi, uintptr_t retaddr) \
276+
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
278277
{ \
279278
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
280279
PAGE_READ | PAGE_WRITE, retaddr); \
281280
DATA_TYPE ret; \
282-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi); \
281+
atomic_trace_rmw_pre(env, addr, oi); \
283282
ret = qatomic_##X(haddr, BSWAP(val)); \
284283
ATOMIC_MMU_CLEANUP; \
285-
atomic_trace_rmw_post(env, addr, info); \
284+
atomic_trace_rmw_post(env, addr, oi); \
286285
return BSWAP(ret); \
287286
}
288287

@@ -304,20 +303,20 @@ GEN_ATOMIC_HELPER(xor_fetch)
304303
*/
305304
#define GEN_ATOMIC_HELPER_FN(X, FN, XDATA_TYPE, RET) \
306305
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
307-
ABI_TYPE xval, TCGMemOpIdx oi, uintptr_t retaddr) \
306+
ABI_TYPE xval, MemOpIdx oi, uintptr_t retaddr) \
308307
{ \
309308
XDATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
310309
PAGE_READ | PAGE_WRITE, retaddr); \
311310
XDATA_TYPE ldo, ldn, old, new, val = xval; \
312-
uint16_t info = atomic_trace_rmw_pre(env, addr, oi); \
311+
atomic_trace_rmw_pre(env, addr, oi); \
313312
smp_mb(); \
314313
ldn = qatomic_read__nocheck(haddr); \
315314
do { \
316315
ldo = ldn; old = BSWAP(ldo); new = FN(old, val); \
317316
ldn = qatomic_cmpxchg__nocheck(haddr, ldo, BSWAP(new)); \
318317
} while (ldo != ldn); \
319318
ATOMIC_MMU_CLEANUP; \
320-
atomic_trace_rmw_post(env, addr, info); \
319+
atomic_trace_rmw_post(env, addr, oi); \
321320
return RET; \
322321
}
323322

0 commit comments

Comments
 (0)