Message ID | 20191216221158.29572-4-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | cputlb: Remove support for MMU_MODE*_SUFFIX | expand |
Richard Henderson <richard.henderson@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.henderson@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.bennee@linaro.org> -- Alex Bennée
On 12/21/19 3:38 AM, Alex Bennée wrote: > > Richard Henderson <richard.henderson@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.henderson@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? See the first hunk, where MEND is removed. It's based on HOST_WORDS_BIGENDIAN, so no we don't use MO_TE. r~
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, + 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); atomic_trace_rmw_pre(env, addr, info); #if DATA_SIZE == 16 @@ -254,9 +243,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, MO_BSWAP, false, + ATOMIC_MMU_IDX); atomic_trace_ld_pre(env, addr, info); val = atomic16_read(haddr); @@ -270,9 +258,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, MO_BSWAP, true, + ATOMIC_MMU_IDX); val = BSWAP(val); atomic_trace_st_pre(env, addr, info); @@ -289,9 +276,8 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ATOMIC_MMU_DECLS; DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; ABI_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); atomic_trace_rmw_pre(env, addr, info); ret = atomic_xchg__nocheck(haddr, BSWAP(val)); @@ -307,10 +293,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, MO_BSWAP, \ + false, ATOMIC_MMU_IDX); \ atomic_trace_rmw_pre(env, addr, info); \ ret = atomic_##X(haddr, BSWAP(val)); \ ATOMIC_MMU_CLEANUP; \ @@ -341,10 +325,8 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \ ATOMIC_MMU_DECLS; \ XDATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; \ XDATA_TYPE ldo, ldn, 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, MO_BSWAP, \ + false, ATOMIC_MMU_IDX); \ atomic_trace_rmw_pre(env, addr, info); \ smp_mb(); \ ldn = atomic_read__nocheck(haddr); \ @@ -378,7 +360,6 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new) #endif /* DATA_SIZE >= 16 */ #undef END -#undef MEND #endif /* DATA_SIZE > 1 */ #undef BSWAP diff --git a/trace/mem-internal.h b/trace/mem-internal.h index 0a32aa22ca..8b72b678fa 100644 --- a/trace/mem-internal.h +++ b/trace/mem-internal.h @@ -47,21 +47,4 @@ static inline uint16_t trace_mem_get_info(MemOp op, 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 */
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.henderson@linaro.org> --- accel/tcg/atomic_template.h | 67 +++++++++++++------------------------ trace/mem-internal.h | 17 ---------- 2 files changed, 24 insertions(+), 60 deletions(-) -- 2.20.1