mirror of https://github.com/proxmox/mirror_qemu
trace: Remove trace_mem_build_info_no_se_[bl]e
It is easy for the atomic helpers to use trace_mem_build_info directly, without resorting to symbol pasting. For this usage, we cannot use trace_mem_get_info, because the MemOp does not support 16-byte accesses. Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>master
parent
f3bee8d337
commit
4e6b138495
|
@ -64,13 +64,10 @@
|
||||||
the ATOMIC_NAME macro, and redefined below. */
|
the ATOMIC_NAME macro, and redefined below. */
|
||||||
#if DATA_SIZE == 1
|
#if DATA_SIZE == 1
|
||||||
# define END
|
# define END
|
||||||
# define MEND _be /* either le or be would be fine */
|
|
||||||
#elif defined(HOST_WORDS_BIGENDIAN)
|
#elif defined(HOST_WORDS_BIGENDIAN)
|
||||||
# define END _be
|
# define END _be
|
||||||
# define MEND _be
|
|
||||||
#else
|
#else
|
||||||
# define END _le
|
# define END _le
|
||||||
# define MEND _le
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
||||||
|
@ -79,7 +76,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
DATA_TYPE ret;
|
DATA_TYPE ret;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false,
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, false,
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_rmw_pre(env, addr, info);
|
atomic_trace_rmw_pre(env, addr, info);
|
||||||
|
@ -99,7 +96,7 @@ ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr EXTRA_ARGS)
|
||||||
{
|
{
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false,
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, false,
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_ld_pre(env, addr, info);
|
atomic_trace_ld_pre(env, addr, info);
|
||||||
|
@ -114,7 +111,7 @@ void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr,
|
||||||
{
|
{
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, true,
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, true,
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_st_pre(env, addr, info);
|
atomic_trace_st_pre(env, addr, info);
|
||||||
|
@ -130,7 +127,7 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr,
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
DATA_TYPE ret;
|
DATA_TYPE ret;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false,
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, false,
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_rmw_pre(env, addr, info);
|
atomic_trace_rmw_pre(env, addr, info);
|
||||||
|
@ -147,10 +144,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
|
||||||
ATOMIC_MMU_DECLS; \
|
ATOMIC_MMU_DECLS; \
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
||||||
DATA_TYPE ret; \
|
DATA_TYPE ret; \
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, \
|
||||||
false, \
|
|
||||||
ATOMIC_MMU_IDX); \
|
ATOMIC_MMU_IDX); \
|
||||||
\
|
|
||||||
atomic_trace_rmw_pre(env, addr, info); \
|
atomic_trace_rmw_pre(env, addr, info); \
|
||||||
ret = atomic_##X(haddr, val); \
|
ret = atomic_##X(haddr, val); \
|
||||||
ATOMIC_MMU_CLEANUP; \
|
ATOMIC_MMU_CLEANUP; \
|
||||||
|
@ -183,10 +178,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
|
||||||
ATOMIC_MMU_DECLS; \
|
ATOMIC_MMU_DECLS; \
|
||||||
XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
||||||
XDATA_TYPE cmp, old, new, val = xval; \
|
XDATA_TYPE cmp, old, new, val = xval; \
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \
|
uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, \
|
||||||
false, \
|
|
||||||
ATOMIC_MMU_IDX); \
|
ATOMIC_MMU_IDX); \
|
||||||
\
|
|
||||||
atomic_trace_rmw_pre(env, addr, info); \
|
atomic_trace_rmw_pre(env, addr, info); \
|
||||||
smp_mb(); \
|
smp_mb(); \
|
||||||
cmp = atomic_read__nocheck(haddr); \
|
cmp = atomic_read__nocheck(haddr); \
|
||||||
|
@ -213,7 +206,6 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new)
|
||||||
#endif /* DATA SIZE >= 16 */
|
#endif /* DATA SIZE >= 16 */
|
||||||
|
|
||||||
#undef END
|
#undef END
|
||||||
#undef MEND
|
|
||||||
|
|
||||||
#if DATA_SIZE > 1
|
#if DATA_SIZE > 1
|
||||||
|
|
||||||
|
@ -221,10 +213,8 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new)
|
||||||
within the ATOMIC_NAME macro. */
|
within the ATOMIC_NAME macro. */
|
||||||
#ifdef HOST_WORDS_BIGENDIAN
|
#ifdef HOST_WORDS_BIGENDIAN
|
||||||
# define END _le
|
# define END _le
|
||||||
# define MEND _le
|
|
||||||
#else
|
#else
|
||||||
# define END _be
|
# define END _be
|
||||||
# define MEND _be
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
||||||
|
@ -233,8 +223,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
DATA_TYPE ret;
|
DATA_TYPE ret;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT,
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, false,
|
||||||
false,
|
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_rmw_pre(env, addr, info);
|
atomic_trace_rmw_pre(env, addr, info);
|
||||||
|
@ -254,8 +243,7 @@ ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr EXTRA_ARGS)
|
||||||
{
|
{
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT,
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, false,
|
||||||
false,
|
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_ld_pre(env, addr, info);
|
atomic_trace_ld_pre(env, addr, info);
|
||||||
|
@ -270,8 +258,7 @@ void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr,
|
||||||
{
|
{
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT,
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, true,
|
||||||
true,
|
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
val = BSWAP(val);
|
val = BSWAP(val);
|
||||||
|
@ -289,8 +276,7 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr,
|
||||||
ATOMIC_MMU_DECLS;
|
ATOMIC_MMU_DECLS;
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP;
|
||||||
ABI_TYPE ret;
|
ABI_TYPE ret;
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT,
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, false,
|
||||||
false,
|
|
||||||
ATOMIC_MMU_IDX);
|
ATOMIC_MMU_IDX);
|
||||||
|
|
||||||
atomic_trace_rmw_pre(env, addr, info);
|
atomic_trace_rmw_pre(env, addr, info);
|
||||||
|
@ -307,10 +293,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
|
||||||
ATOMIC_MMU_DECLS; \
|
ATOMIC_MMU_DECLS; \
|
||||||
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
||||||
DATA_TYPE ret; \
|
DATA_TYPE ret; \
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, \
|
||||||
false, \
|
false, ATOMIC_MMU_IDX); \
|
||||||
ATOMIC_MMU_IDX); \
|
|
||||||
\
|
|
||||||
atomic_trace_rmw_pre(env, addr, info); \
|
atomic_trace_rmw_pre(env, addr, info); \
|
||||||
ret = atomic_##X(haddr, BSWAP(val)); \
|
ret = atomic_##X(haddr, BSWAP(val)); \
|
||||||
ATOMIC_MMU_CLEANUP; \
|
ATOMIC_MMU_CLEANUP; \
|
||||||
|
@ -341,10 +325,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
|
||||||
ATOMIC_MMU_DECLS; \
|
ATOMIC_MMU_DECLS; \
|
||||||
XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \
|
||||||
XDATA_TYPE ldo, ldn, old, new, val = xval; \
|
XDATA_TYPE ldo, ldn, old, new, val = xval; \
|
||||||
uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \
|
uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, \
|
||||||
false, \
|
false, ATOMIC_MMU_IDX); \
|
||||||
ATOMIC_MMU_IDX); \
|
|
||||||
\
|
|
||||||
atomic_trace_rmw_pre(env, addr, info); \
|
atomic_trace_rmw_pre(env, addr, info); \
|
||||||
smp_mb(); \
|
smp_mb(); \
|
||||||
ldn = atomic_read__nocheck(haddr); \
|
ldn = atomic_read__nocheck(haddr); \
|
||||||
|
@ -378,7 +360,6 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new)
|
||||||
#endif /* DATA_SIZE >= 16 */
|
#endif /* DATA_SIZE >= 16 */
|
||||||
|
|
||||||
#undef END
|
#undef END
|
||||||
#undef MEND
|
|
||||||
#endif /* DATA_SIZE > 1 */
|
#endif /* DATA_SIZE > 1 */
|
||||||
|
|
||||||
#undef BSWAP
|
#undef BSWAP
|
||||||
|
|
|
@ -47,21 +47,4 @@ static inline uint16_t trace_mem_get_info(MemOp op,
|
||||||
mmu_idx);
|
mmu_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Used by the atomic helpers */
|
|
||||||
static inline
|
|
||||||
uint16_t trace_mem_build_info_no_se_be(int size_shift, bool store,
|
|
||||||
TCGMemOpIdx oi)
|
|
||||||
{
|
|
||||||
return trace_mem_build_info(size_shift, false, MO_BE, store,
|
|
||||||
get_mmuidx(oi));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint16_t trace_mem_build_info_no_se_le(int size_shift, bool store,
|
|
||||||
TCGMemOpIdx oi)
|
|
||||||
{
|
|
||||||
return trace_mem_build_info(size_shift, false, MO_LE, store,
|
|
||||||
get_mmuidx(oi));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* TRACE__MEM_INTERNAL_H */
|
#endif /* TRACE__MEM_INTERNAL_H */
|
||||||
|
|
Loading…
Reference in New Issue