Skip to content

Commit 5fe3f55

Browse files
Merge commit '1c12355b31' into merge
Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com>
2 parents a93d623 + 1c12355 commit 5fe3f55

Some content is hidden

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

56 files changed

+1030
-2061
lines changed

MAINTAINERS

+3
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ F: include/exec/helper*.h
157157
F: include/sysemu/cpus.h
158158
F: include/sysemu/tcg.h
159159
F: include/hw/core/tcg-cpu-ops.h
160+
F: host/include/*/host/cpuinfo.h
161+
F: util/cpuinfo-*.c
162+
F: include/tcg/
160163

161164
FPU emulation
162165
M: Aurelien Jarno <aurelien@aurel32.net>

accel/tcg/atomic_common.c.inc

+4-38
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,6 @@ static void atomic_trace_rmw_post(CPUArchState *env, uint64_t addr,
1919
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_RW);
2020
}
2121

22-
#if HAVE_ATOMIC128
23-
static void atomic_trace_ld_post(CPUArchState *env, uint64_t addr,
24-
MemOpIdx oi)
25-
{
26-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
27-
}
28-
29-
static void atomic_trace_st_post(CPUArchState *env, uint64_t addr,
30-
MemOpIdx oi)
31-
{
32-
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W);
33-
}
34-
#endif
35-
3622
/*
3723
* Atomic helpers callable from TCG.
3824
* These have a common interface and all defer to cpu_atomic_*
@@ -62,36 +48,16 @@ CMPXCHG_HELPER(cmpxchgo_le, Int128)
6248

6349
#undef CMPXCHG_HELPER
6450

65-
Int128 HELPER(nonatomic_cmpxchgo_be)(CPUArchState *env, uint64_t addr,
66-
Int128 cmpv, Int128 newv, uint32_t oi)
67-
{
68-
#if TCG_TARGET_REG_BITS == 32
69-
uintptr_t ra = GETPC();
70-
Int128 oldv;
71-
72-
oldv = cpu_ld16_be_mmu(env, addr, oi, ra);
73-
if (int128_eq(oldv, cmpv)) {
74-
cpu_st16_be_mmu(env, addr, newv, oi, ra);
75-
} else {
76-
/* Even with comparison failure, still need a write cycle. */
77-
probe_write(env, addr, 16, get_mmuidx(oi), ra);
78-
}
79-
return oldv;
80-
#else
81-
g_assert_not_reached();
82-
#endif
83-
}
84-
85-
Int128 HELPER(nonatomic_cmpxchgo_le)(CPUArchState *env, uint64_t addr,
86-
Int128 cmpv, Int128 newv, uint32_t oi)
51+
Int128 HELPER(nonatomic_cmpxchgo)(CPUArchState *env, uint64_t addr,
52+
Int128 cmpv, Int128 newv, uint32_t oi)
8753
{
8854
#if TCG_TARGET_REG_BITS == 32
8955
uintptr_t ra = GETPC();
9056
Int128 oldv;
9157

92-
oldv = cpu_ld16_le_mmu(env, addr, oi, ra);
58+
oldv = cpu_ld16_mmu(env, addr, oi, ra);
9359
if (int128_eq(oldv, cmpv)) {
94-
cpu_st16_le_mmu(env, addr, newv, oi, ra);
60+
cpu_st16_mmu(env, addr, newv, oi, ra);
9561
} else {
9662
/* Even with comparison failure, still need a write cycle. */
9763
probe_write(env, addr, 16, get_mmuidx(oi), ra);

accel/tcg/atomic_template.h

+16-77
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
7373
ABI_TYPE cmpv, ABI_TYPE newv,
7474
MemOpIdx oi, uintptr_t retaddr)
7575
{
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);
7877
DATA_TYPE ret;
7978

8079
#if DATA_SIZE == 16
@@ -87,38 +86,11 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
8786
return ret;
8887
}
8988

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
11790
ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
11891
MemOpIdx oi, uintptr_t retaddr)
11992
{
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);
12294
DATA_TYPE ret;
12395

12496
ret = qatomic_xchg__nocheck(haddr, val);
@@ -131,9 +103,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
131103
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
132104
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
133105
{ \
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); \
137108
ret = qatomic_##X(haddr, val); \
138109
ATOMIC_MMU_CLEANUP; \
139110
atomic_trace_rmw_post(env, addr, oi); \
@@ -163,9 +134,8 @@ GEN_ATOMIC_HELPER(xor_fetch)
163134
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
164135
ABI_TYPE xval, MemOpIdx oi, uintptr_t retaddr) \
165136
{ \
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); \
169139
smp_mb(); \
170140
cmp = qatomic_read__nocheck(haddr); \
171141
do { \
@@ -188,7 +158,7 @@ GEN_ATOMIC_HELPER_FN(smax_fetch, MAX, SDATA_TYPE, new)
188158
GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new)
189159

190160
#undef GEN_ATOMIC_HELPER_FN
191-
#endif /* DATA SIZE >= 16 */
161+
#endif /* DATA SIZE < 16 */
192162

193163
#undef END
194164

@@ -206,8 +176,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
206176
ABI_TYPE cmpv, ABI_TYPE newv,
207177
MemOpIdx oi, uintptr_t retaddr)
208178
{
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);
211180
DATA_TYPE ret;
212181

213182
#if DATA_SIZE == 16
@@ -220,39 +189,11 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
220189
return BSWAP(ret);
221190
}
222191

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
251193
ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
252194
MemOpIdx oi, uintptr_t retaddr)
253195
{
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);
256197
ABI_TYPE ret;
257198

258199
ret = qatomic_xchg__nocheck(haddr, BSWAP(val));
@@ -265,9 +206,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
265206
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
266207
ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \
267208
{ \
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); \
271211
ret = qatomic_##X(haddr, BSWAP(val)); \
272212
ATOMIC_MMU_CLEANUP; \
273213
atomic_trace_rmw_post(env, addr, oi); \
@@ -294,9 +234,8 @@ GEN_ATOMIC_HELPER(xor_fetch)
294234
ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
295235
ABI_TYPE xval, MemOpIdx oi, uintptr_t retaddr) \
296236
{ \
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); \
300239
smp_mb(); \
301240
ldn = qatomic_read__nocheck(haddr); \
302241
do { \
@@ -326,7 +265,7 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new)
326265
#undef ADD
327266

328267
#undef GEN_ATOMIC_HELPER_FN
329-
#endif /* DATA_SIZE >= 16 */
268+
#endif /* DATA_SIZE < 16 */
330269

331270
#undef END
332271
#endif /* DATA_SIZE > 1 */

accel/tcg/cpu-exec.c

-2
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,6 @@ static void log_cpu_exec(target_ulong pc, CPUState *cpu,
308308
cpu->cpu_index, tb->tc.ptr, tb->cs_base, pc,
309309
tb->flags, tb->cflags, lookup_symbol(pc));
310310

311-
#if defined(DEBUG_DISAS)
312311
if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
313312
FILE *logfile = qemu_log_trylock();
314313
if (logfile) {
@@ -324,7 +323,6 @@ static void log_cpu_exec(target_ulong pc, CPUState *cpu,
324323
qemu_log_unlock(logfile);
325324
}
326325
}
327-
#endif /* DEBUG_DISAS */
328326
}
329327
}
330328

0 commit comments

Comments
 (0)