Richard Henderson <richard.hender...@linaro.org> writes:
> 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. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > accel/tcg/atomic_template.h | 67 +++++++++++++------------------------ > trace/mem-internal.h | 17 ---------- > 2 files changed, 24 insertions(+), 60 deletions(-) > > diff --git a/accel/tcg/atomic_template.h b/accel/tcg/atomic_template.h > index 837676231f..26969487d6 100644 > --- a/accel/tcg/atomic_template.h > +++ b/accel/tcg/atomic_template.h > @@ -64,13 +64,10 @@ > the ATOMIC_NAME macro, and redefined below. */ > #if DATA_SIZE == 1 > # define END > -# define MEND _be /* either le or be would be fine */ > #elif defined(HOST_WORDS_BIGENDIAN) > # define END _be > -# define MEND _be > #else > # define END _le > -# define MEND _le > #endif > > ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr, > @@ -79,8 +76,8 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, > target_ulong addr, > ATOMIC_MMU_DECLS; > DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; > DATA_TYPE ret; > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false, > - ATOMIC_MMU_IDX); > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, What is MEND meant to be? Shouldn't we use the appropriate MO_TE instead of 0 for these helpers? > + ATOMIC_MMU_IDX); > > atomic_trace_rmw_pre(env, addr, info); > #if DATA_SIZE == 16 > @@ -99,8 +96,8 @@ ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong > addr EXTRA_ARGS) > { > ATOMIC_MMU_DECLS; > DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP; > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false, > - ATOMIC_MMU_IDX); > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, > + ATOMIC_MMU_IDX); > > atomic_trace_ld_pre(env, addr, info); > val = atomic16_read(haddr); > @@ -114,8 +111,8 @@ void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, > { > ATOMIC_MMU_DECLS; > DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, true, > - ATOMIC_MMU_IDX); > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, true, > + ATOMIC_MMU_IDX); > > atomic_trace_st_pre(env, addr, info); > atomic16_set(haddr, val); > @@ -130,8 +127,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, > target_ulong addr, > ATOMIC_MMU_DECLS; > DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; > DATA_TYPE ret; > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, false, > - ATOMIC_MMU_IDX); > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, > + ATOMIC_MMU_IDX); > > atomic_trace_rmw_pre(env, addr, info); > ret = atomic_xchg__nocheck(haddr, val); > @@ -147,10 +144,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong > addr, \ > ATOMIC_MMU_DECLS; \ > DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \ > DATA_TYPE ret; \ > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \ > - false, \ > - ATOMIC_MMU_IDX); \ > - \ > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, \ > + ATOMIC_MMU_IDX); \ > atomic_trace_rmw_pre(env, addr, info); \ > ret = atomic_##X(haddr, val); \ > ATOMIC_MMU_CLEANUP; \ > @@ -183,10 +178,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong > addr, \ > ATOMIC_MMU_DECLS; \ > XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \ > XDATA_TYPE cmp, old, new, val = xval; \ > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, \ > - false, \ > - ATOMIC_MMU_IDX); \ > - \ > + uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, \ > + ATOMIC_MMU_IDX); \ > atomic_trace_rmw_pre(env, addr, info); \ > smp_mb(); \ > cmp = atomic_read__nocheck(haddr); \ > @@ -213,7 +206,6 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new) > #endif /* DATA SIZE >= 16 */ > > #undef END > -#undef MEND > > #if DATA_SIZE > 1 > > @@ -221,10 +213,8 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new) > within the ATOMIC_NAME macro. */ > #ifdef HOST_WORDS_BIGENDIAN > # define END _le > -# define MEND _le > #else > # define END _be > -# define MEND _be > #endif > > ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr, > @@ -233,9 +223,8 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, > target_ulong addr, > ATOMIC_MMU_DECLS; > DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; > DATA_TYPE ret; > - uint16_t info = glue(trace_mem_build_info_no_se, MEND)(SHIFT, > - false, > - ATOMIC_MMU_IDX); > + uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, false, > + ATOMIC_MMU_IDX); These are fine with MO_BSWAP. So otherwise: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée