diff mbox series

[v5,01/15] tcg: TCGMemOp is now accelerator independent MemOp

Message ID 1564123405954.22175@bt.com
State New
Headers show
Series Invert Endian bit in SPARCv9 MMU TTE | expand

Commit Message

Tony Nguyen July 26, 2019, 6:43 a.m. UTC
Preparation for collapsing the two byte swaps, adjust_endianness and
handle_bswap, along the I/O path.

Target dependant attributes are conditionalize upon NEED_CPU_H.

Signed-off-by: Tony Nguyen <tony.nguyen@bt.com>
---
 MAINTAINERS                             |   1 +
 accel/tcg/cputlb.c                      |   2 +-
 include/exec/memop.h                    | 109 ++++++++++++++++++++++++++
 target/alpha/translate.c                |   2 +-
 target/arm/translate-a64.c              |  48 ++++++------
 target/arm/translate-a64.h              |   2 +-
 target/arm/translate-sve.c              |   2 +-
 target/arm/translate.c                  |  32 ++++----
 target/arm/translate.h                  |   2 +-
 target/hppa/translate.c                 |  14 ++--
 target/i386/translate.c                 | 132 ++++++++++++++++----------------
 target/m68k/translate.c                 |   2 +-
 target/microblaze/translate.c           |   4 +-
 target/mips/translate.c                 |   8 +-
 target/openrisc/translate.c             |   4 +-
 target/ppc/translate.c                  |  12 +--
 target/riscv/insn_trans/trans_rva.inc.c |   8 +-
 target/riscv/insn_trans/trans_rvi.inc.c |   4 +-
 target/s390x/translate.c                |   6 +-
 target/s390x/translate_vx.inc.c         |  10 +--
 target/sparc/translate.c                |  14 ++--
 target/tilegx/translate.c               |  10 +--
 target/tricore/translate.c              |   8 +-
 tcg/README                              |   2 +-
 tcg/aarch64/tcg-target.inc.c            |  26 +++----
 tcg/arm/tcg-target.inc.c                |  26 +++----
 tcg/i386/tcg-target.inc.c               |  24 +++---
 tcg/mips/tcg-target.inc.c               |  16 ++--
 tcg/optimize.c                          |   2 +-
 tcg/ppc/tcg-target.inc.c                |  12 +--
 tcg/riscv/tcg-target.inc.c              |  20 ++---
 tcg/s390/tcg-target.inc.c               |  14 ++--
 tcg/sparc/tcg-target.inc.c              |   6 +-
 tcg/tcg-op.c                            |  38 ++++-----
 tcg/tcg-op.h                            |  86 ++++++++++-----------
 tcg/tcg.c                               |   2 +-
 tcg/tcg.h                               |  99 ++----------------------
 trace/mem-internal.h                    |   4 +-
 trace/mem.h                             |   4 +-
 39 files changed, 420 insertions(+), 397 deletions(-)
 create mode 100644 include/exec/memop.h

--
1.8.3.1

Comments

David Gibson July 26, 2019, 7:43 a.m. UTC | #1
On Fri, Jul 26, 2019 at 06:43:27AM +0000, tony.nguyen@bt.com wrote:
> Preparation for collapsing the two byte swaps, adjust_endianness and
> handle_bswap, along the I/O path.
> 
> Target dependant attributes are conditionalize upon NEED_CPU_H.
> 
> Signed-off-by: Tony Nguyen <tony.nguyen@bt.com>

ppc parts
Acked-by: David Gibson <david@gibson.dropbear.id.au>

> ---
>  MAINTAINERS                             |   1 +
>  accel/tcg/cputlb.c                      |   2 +-
>  include/exec/memop.h                    | 109 ++++++++++++++++++++++++++
>  target/alpha/translate.c                |   2 +-
>  target/arm/translate-a64.c              |  48 ++++++------
>  target/arm/translate-a64.h              |   2 +-
>  target/arm/translate-sve.c              |   2 +-
>  target/arm/translate.c                  |  32 ++++----
>  target/arm/translate.h                  |   2 +-
>  target/hppa/translate.c                 |  14 ++--
>  target/i386/translate.c                 | 132 ++++++++++++++++----------------
>  target/m68k/translate.c                 |   2 +-
>  target/microblaze/translate.c           |   4 +-
>  target/mips/translate.c                 |   8 +-
>  target/openrisc/translate.c             |   4 +-
>  target/ppc/translate.c                  |  12 +--
>  target/riscv/insn_trans/trans_rva.inc.c |   8 +-
>  target/riscv/insn_trans/trans_rvi.inc.c |   4 +-
>  target/s390x/translate.c                |   6 +-
>  target/s390x/translate_vx.inc.c         |  10 +--
>  target/sparc/translate.c                |  14 ++--
>  target/tilegx/translate.c               |  10 +--
>  target/tricore/translate.c              |   8 +-
>  tcg/README                              |   2 +-
>  tcg/aarch64/tcg-target.inc.c            |  26 +++----
>  tcg/arm/tcg-target.inc.c                |  26 +++----
>  tcg/i386/tcg-target.inc.c               |  24 +++---
>  tcg/mips/tcg-target.inc.c               |  16 ++--
>  tcg/optimize.c                          |   2 +-
>  tcg/ppc/tcg-target.inc.c                |  12 +--
>  tcg/riscv/tcg-target.inc.c              |  20 ++---
>  tcg/s390/tcg-target.inc.c               |  14 ++--
>  tcg/sparc/tcg-target.inc.c              |   6 +-
>  tcg/tcg-op.c                            |  38 ++++-----
>  tcg/tcg-op.h                            |  86 ++++++++++-----------
>  tcg/tcg.c                               |   2 +-
>  tcg/tcg.h                               |  99 ++----------------------
>  trace/mem-internal.h                    |   4 +-
>  trace/mem.h                             |   4 +-
>  39 files changed, 420 insertions(+), 397 deletions(-)
>  create mode 100644 include/exec/memop.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index cc9636b..3f148cd 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1890,6 +1890,7 @@ M: Paolo Bonzini <pbonzini@redhat.com>
>  S: Supported
>  F: include/exec/ioport.h
>  F: ioport.c
> +F: include/exec/memop.h
>  F: include/exec/memory.h
>  F: include/exec/ram_addr.h
>  F: memory.c
> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
> index bb9897b..523be4c 100644
> --- a/accel/tcg/cputlb.c
> +++ b/accel/tcg/cputlb.c
> @@ -1133,7 +1133,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
>      uintptr_t index = tlb_index(env, mmu_idx, addr);
>      CPUTLBEntry *tlbe = tlb_entry(env, mmu_idx, addr);
>      target_ulong tlb_addr = tlb_addr_write(tlbe);
> -    TCGMemOp mop = get_memop(oi);
> +    MemOp mop = get_memop(oi);
>      int a_bits = get_alignment_bits(mop);
>      int s_bits = mop & MO_SIZE;
>      void *hostaddr;
> diff --git a/include/exec/memop.h b/include/exec/memop.h
> new file mode 100644
> index 0000000..ac58066
> --- /dev/null
> +++ b/include/exec/memop.h
> @@ -0,0 +1,109 @@
> +/*
> + * Constants for memory operations
> + *
> + * Authors:
> + *  Richard Henderson <rth@twiddle.net>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + *
> + */
> +
> +#ifndef MEMOP_H
> +#define MEMOP_H
> +
> +typedef enum MemOp {
> +    MO_8     = 0,
> +    MO_16    = 1,
> +    MO_32    = 2,
> +    MO_64    = 3,
> +    MO_SIZE  = 3,   /* Mask for the above.  */
> +
> +    MO_SIGN  = 4,   /* Sign-extended, otherwise zero-extended.  */
> +
> +    MO_BSWAP = 8,   /* Host reverse endian.  */
> +#ifdef HOST_WORDS_BIGENDIAN
> +    MO_LE    = MO_BSWAP,
> +    MO_BE    = 0,
> +#else
> +    MO_LE    = 0,
> +    MO_BE    = MO_BSWAP,
> +#endif
> +#ifdef NEED_CPU_H
> +#ifdef TARGET_WORDS_BIGENDIAN
> +    MO_TE    = MO_BE,
> +#else
> +    MO_TE    = MO_LE,
> +#endif
> +#endif
> +
> +    /*
> +     * MO_UNALN accesses are never checked for alignment.
> +     * MO_ALIGN accesses will result in a call to the CPU's
> +     * do_unaligned_access hook if the guest address is not aligned.
> +     * The default depends on whether the target CPU defines ALIGNED_ONLY.
> +     *
> +     * Some architectures (e.g. ARMv8) need the address which is aligned
> +     * to a size more than the size of the memory access.
> +     * Some architectures (e.g. SPARCv9) need an address which is aligned,
> +     * but less strictly than the natural alignment.
> +     *
> +     * MO_ALIGN supposes the alignment size is the size of a memory access.
> +     *
> +     * There are three options:
> +     * - unaligned access permitted (MO_UNALN).
> +     * - an alignment to the size of an access (MO_ALIGN);
> +     * - an alignment to a specified size, which may be more or less than
> +     *   the access size (MO_ALIGN_x where 'x' is a size in bytes);
> +     */
> +    MO_ASHIFT = 4,
> +    MO_AMASK = 7 << MO_ASHIFT,
> +#ifdef NEED_CPU_H
> +#ifdef ALIGNED_ONLY
> +    MO_ALIGN = 0,
> +    MO_UNALN = MO_AMASK,
> +#else
> +    MO_ALIGN = MO_AMASK,
> +    MO_UNALN = 0,
> +#endif
> +#endif
> +    MO_ALIGN_2  = 1 << MO_ASHIFT,
> +    MO_ALIGN_4  = 2 << MO_ASHIFT,
> +    MO_ALIGN_8  = 3 << MO_ASHIFT,
> +    MO_ALIGN_16 = 4 << MO_ASHIFT,
> +    MO_ALIGN_32 = 5 << MO_ASHIFT,
> +    MO_ALIGN_64 = 6 << MO_ASHIFT,
> +
> +    /* Combinations of the above, for ease of use.  */
> +    MO_UB    = MO_8,
> +    MO_UW    = MO_16,
> +    MO_UL    = MO_32,
> +    MO_SB    = MO_SIGN | MO_8,
> +    MO_SW    = MO_SIGN | MO_16,
> +    MO_SL    = MO_SIGN | MO_32,
> +    MO_Q     = MO_64,
> +
> +    MO_LEUW  = MO_LE | MO_UW,
> +    MO_LEUL  = MO_LE | MO_UL,
> +    MO_LESW  = MO_LE | MO_SW,
> +    MO_LESL  = MO_LE | MO_SL,
> +    MO_LEQ   = MO_LE | MO_Q,
> +
> +    MO_BEUW  = MO_BE | MO_UW,
> +    MO_BEUL  = MO_BE | MO_UL,
> +    MO_BESW  = MO_BE | MO_SW,
> +    MO_BESL  = MO_BE | MO_SL,
> +    MO_BEQ   = MO_BE | MO_Q,
> +
> +#ifdef NEED_CPU_H
> +    MO_TEUW  = MO_TE | MO_UW,
> +    MO_TEUL  = MO_TE | MO_UL,
> +    MO_TESW  = MO_TE | MO_SW,
> +    MO_TESL  = MO_TE | MO_SL,
> +    MO_TEQ   = MO_TE | MO_Q,
> +#endif
> +
> +    MO_SSIZE = MO_SIZE | MO_SIGN,
> +} MemOp;
> +
> +#endif
> diff --git a/target/alpha/translate.c b/target/alpha/translate.c
> index 2c9cccf..d5d4888 100644
> --- a/target/alpha/translate.c
> +++ b/target/alpha/translate.c
> @@ -403,7 +403,7 @@ static inline void gen_store_mem(DisasContext *ctx,
> 
>  static DisasJumpType gen_store_conditional(DisasContext *ctx, int ra, int rb,
>                                             int32_t disp16, int mem_idx,
> -                                           TCGMemOp op)
> +                                           MemOp op)
>  {
>      TCGLabel *lab_fail, *lab_done;
>      TCGv addr, val;
> diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
> index d323147..b6c07d6 100644
> --- a/target/arm/translate-a64.c
> +++ b/target/arm/translate-a64.c
> @@ -85,7 +85,7 @@ typedef void NeonGenOneOpFn(TCGv_i64, TCGv_i64);
>  typedef void CryptoTwoOpFn(TCGv_ptr, TCGv_ptr);
>  typedef void CryptoThreeOpIntFn(TCGv_ptr, TCGv_ptr, TCGv_i32);
>  typedef void CryptoThreeOpFn(TCGv_ptr, TCGv_ptr, TCGv_ptr);
> -typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, TCGMemOp);
> +typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, MemOp);
> 
>  /* initialize TCG globals.  */
>  void a64_translate_init(void)
> @@ -455,7 +455,7 @@ TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
>   * Dn, Sn, Hn or Bn).
>   * (Note that this is not the same mapping as for A32; see cpu.h)
>   */
> -static inline int fp_reg_offset(DisasContext *s, int regno, TCGMemOp size)
> +static inline int fp_reg_offset(DisasContext *s, int regno, MemOp size)
>  {
>      return vec_reg_offset(s, regno, 0, size);
>  }
> @@ -871,7 +871,7 @@ static void do_gpr_ld_memidx(DisasContext *s,
>                               bool iss_valid, unsigned int iss_srt,
>                               bool iss_sf, bool iss_ar)
>  {
> -    TCGMemOp memop = s->be_data + size;
> +    MemOp memop = s->be_data + size;
> 
>      g_assert(size <= 3);
> 
> @@ -948,7 +948,7 @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
>      TCGv_i64 tmphi;
> 
>      if (size < 4) {
> -        TCGMemOp memop = s->be_data + size;
> +        MemOp memop = s->be_data + size;
>          tmphi = tcg_const_i64(0);
>          tcg_gen_qemu_ld_i64(tmplo, tcg_addr, get_mem_index(s), memop);
>      } else {
> @@ -989,7 +989,7 @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
> 
>  /* Get value of an element within a vector register */
>  static void read_vec_element(DisasContext *s, TCGv_i64 tcg_dest, int srcidx,
> -                             int element, TCGMemOp memop)
> +                             int element, MemOp memop)
>  {
>      int vect_off = vec_reg_offset(s, srcidx, element, memop & MO_SIZE);
>      switch (memop) {
> @@ -1021,7 +1021,7 @@ static void read_vec_element(DisasContext *s, TCGv_i64 tcg_dest, int srcidx,
>  }
> 
>  static void read_vec_element_i32(DisasContext *s, TCGv_i32 tcg_dest, int srcidx,
> -                                 int element, TCGMemOp memop)
> +                                 int element, MemOp memop)
>  {
>      int vect_off = vec_reg_offset(s, srcidx, element, memop & MO_SIZE);
>      switch (memop) {
> @@ -1048,7 +1048,7 @@ static void read_vec_element_i32(DisasContext *s, TCGv_i32 tcg_dest, int srcidx,
> 
>  /* Set value of an element within a vector register */
>  static void write_vec_element(DisasContext *s, TCGv_i64 tcg_src, int destidx,
> -                              int element, TCGMemOp memop)
> +                              int element, MemOp memop)
>  {
>      int vect_off = vec_reg_offset(s, destidx, element, memop & MO_SIZE);
>      switch (memop) {
> @@ -1070,7 +1070,7 @@ static void write_vec_element(DisasContext *s, TCGv_i64 tcg_src, int destidx,
>  }
> 
>  static void write_vec_element_i32(DisasContext *s, TCGv_i32 tcg_src,
> -                                  int destidx, int element, TCGMemOp memop)
> +                                  int destidx, int element, MemOp memop)
>  {
>      int vect_off = vec_reg_offset(s, destidx, element, memop & MO_SIZE);
>      switch (memop) {
> @@ -1090,7 +1090,7 @@ static void write_vec_element_i32(DisasContext *s, TCGv_i32 tcg_src,
> 
>  /* Store from vector register to memory */
>  static void do_vec_st(DisasContext *s, int srcidx, int element,
> -                      TCGv_i64 tcg_addr, int size, TCGMemOp endian)
> +                      TCGv_i64 tcg_addr, int size, MemOp endian)
>  {
>      TCGv_i64 tcg_tmp = tcg_temp_new_i64();
> 
> @@ -1102,7 +1102,7 @@ static void do_vec_st(DisasContext *s, int srcidx, int element,
> 
>  /* Load from memory to vector register */
>  static void do_vec_ld(DisasContext *s, int destidx, int element,
> -                      TCGv_i64 tcg_addr, int size, TCGMemOp endian)
> +                      TCGv_i64 tcg_addr, int size, MemOp endian)
>  {
>      TCGv_i64 tcg_tmp = tcg_temp_new_i64();
> 
> @@ -2200,7 +2200,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
>                                 TCGv_i64 addr, int size, bool is_pair)
>  {
>      int idx = get_mem_index(s);
> -    TCGMemOp memop = s->be_data;
> +    MemOp memop = s->be_data;
> 
>      g_assert(size <= 3);
>      if (is_pair) {
> @@ -3286,7 +3286,7 @@ static void disas_ldst_multiple_struct(DisasContext *s, uint32_t insn)
>      bool is_postidx = extract32(insn, 23, 1);
>      bool is_q = extract32(insn, 30, 1);
>      TCGv_i64 clean_addr, tcg_rn, tcg_ebytes;
> -    TCGMemOp endian = s->be_data;
> +    MemOp endian = s->be_data;
> 
>      int ebytes;   /* bytes per element */
>      int elements; /* elements per vector */
> @@ -5455,7 +5455,7 @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
>      unsigned int mos, type, rm, cond, rn, rd;
>      TCGv_i64 t_true, t_false, t_zero;
>      DisasCompare64 c;
> -    TCGMemOp sz;
> +    MemOp sz;
> 
>      mos = extract32(insn, 29, 3);
>      type = extract32(insn, 22, 2);
> @@ -6267,7 +6267,7 @@ static void disas_fp_imm(DisasContext *s, uint32_t insn)
>      int mos = extract32(insn, 29, 3);
>      uint64_t imm;
>      TCGv_i64 tcg_res;
> -    TCGMemOp sz;
> +    MemOp sz;
> 
>      if (mos || imm5) {
>          unallocated_encoding(s);
> @@ -7030,7 +7030,7 @@ static TCGv_i32 do_reduction_op(DisasContext *s, int fpopcode, int rn,
>  {
>      if (esize == size) {
>          int element;
> -        TCGMemOp msize = esize == 16 ? MO_16 : MO_32;
> +        MemOp msize = esize == 16 ? MO_16 : MO_32;
>          TCGv_i32 tcg_elem;
> 
>          /* We should have one register left here */
> @@ -8022,7 +8022,7 @@ static void handle_vec_simd_sqshrn(DisasContext *s, bool is_scalar, bool is_q,
>      int shift = (2 * esize) - immhb;
>      int elements = is_scalar ? 1 : (64 / esize);
>      bool round = extract32(opcode, 0, 1);
> -    TCGMemOp ldop = (size + 1) | (is_u_shift ? 0 : MO_SIGN);
> +    MemOp ldop = (size + 1) | (is_u_shift ? 0 : MO_SIGN);
>      TCGv_i64 tcg_rn, tcg_rd, tcg_round;
>      TCGv_i32 tcg_rd_narrowed;
>      TCGv_i64 tcg_final;
> @@ -8181,7 +8181,7 @@ static void handle_simd_qshl(DisasContext *s, bool scalar, bool is_q,
>              }
>          };
>          NeonGenTwoOpEnvFn *genfn = fns[src_unsigned][dst_unsigned][size];
> -        TCGMemOp memop = scalar ? size : MO_32;
> +        MemOp memop = scalar ? size : MO_32;
>          int maxpass = scalar ? 1 : is_q ? 4 : 2;
> 
>          for (pass = 0; pass < maxpass; pass++) {
> @@ -8225,7 +8225,7 @@ static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
>      TCGv_ptr tcg_fpst = get_fpstatus_ptr(size == MO_16);
>      TCGv_i32 tcg_shift = NULL;
> 
> -    TCGMemOp mop = size | (is_signed ? MO_SIGN : 0);
> +    MemOp mop = size | (is_signed ? MO_SIGN : 0);
>      int pass;
> 
>      if (fracbits || size == MO_64) {
> @@ -10004,7 +10004,7 @@ static void handle_vec_simd_shri(DisasContext *s, bool is_q, bool is_u,
>      int dsize = is_q ? 128 : 64;
>      int esize = 8 << size;
>      int elements = dsize/esize;
> -    TCGMemOp memop = size | (is_u ? 0 : MO_SIGN);
> +    MemOp memop = size | (is_u ? 0 : MO_SIGN);
>      TCGv_i64 tcg_rn = new_tmp_a64(s);
>      TCGv_i64 tcg_rd = new_tmp_a64(s);
>      TCGv_i64 tcg_round;
> @@ -10347,7 +10347,7 @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
>              TCGv_i64 tcg_op1 = tcg_temp_new_i64();
>              TCGv_i64 tcg_op2 = tcg_temp_new_i64();
>              TCGv_i64 tcg_passres;
> -            TCGMemOp memop = MO_32 | (is_u ? 0 : MO_SIGN);
> +            MemOp memop = MO_32 | (is_u ? 0 : MO_SIGN);
> 
>              int elt = pass + is_q * 2;
> 
> @@ -11827,7 +11827,7 @@ static void handle_2misc_pairwise(DisasContext *s, int opcode, bool u,
> 
>      if (size == 2) {
>          /* 32 + 32 -> 64 op */
> -        TCGMemOp memop = size + (u ? 0 : MO_SIGN);
> +        MemOp memop = size + (u ? 0 : MO_SIGN);
> 
>          for (pass = 0; pass < maxpass; pass++) {
>              TCGv_i64 tcg_op1 = tcg_temp_new_i64();
> @@ -12849,7 +12849,7 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
> 
>      switch (is_fp) {
>      case 1: /* normal fp */
> -        /* convert insn encoded size to TCGMemOp size */
> +        /* convert insn encoded size to MemOp size */
>          switch (size) {
>          case 0: /* half-precision */
>              size = MO_16;
> @@ -12897,7 +12897,7 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
>          return;
>      }
> 
> -    /* Given TCGMemOp size, adjust register and indexing.  */
> +    /* Given MemOp size, adjust register and indexing.  */
>      switch (size) {
>      case MO_16:
>          index = h << 2 | l << 1 | m;
> @@ -13194,7 +13194,7 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
>          TCGv_i64 tcg_res[2];
>          int pass;
>          bool satop = extract32(opcode, 0, 1);
> -        TCGMemOp memop = MO_32;
> +        MemOp memop = MO_32;
> 
>          if (satop || !u) {
>              memop |= MO_SIGN;
> diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h
> index 9ab4087..f1246b7 100644
> --- a/target/arm/translate-a64.h
> +++ b/target/arm/translate-a64.h
> @@ -64,7 +64,7 @@ static inline void assert_fp_access_checked(DisasContext *s)
>   * the FP/vector register Qn.
>   */
>  static inline int vec_reg_offset(DisasContext *s, int regno,
> -                                 int element, TCGMemOp size)
> +                                 int element, MemOp size)
>  {
>      int element_size = 1 << size;
>      int offs = element * element_size;
> diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
> index fa068b0..5d7edd0 100644
> --- a/target/arm/translate-sve.c
> +++ b/target/arm/translate-sve.c
> @@ -4567,7 +4567,7 @@ static bool trans_STR_pri(DisasContext *s, arg_rri *a)
>   */
> 
>  /* The memory mode of the dtype.  */
> -static const TCGMemOp dtype_mop[16] = {
> +static const MemOp dtype_mop[16] = {
>      MO_UB, MO_UB, MO_UB, MO_UB,
>      MO_SL, MO_UW, MO_UW, MO_UW,
>      MO_SW, MO_SW, MO_UL, MO_UL,
> diff --git a/target/arm/translate.c b/target/arm/translate.c
> index 7853462..d116c8c 100644
> --- a/target/arm/translate.c
> +++ b/target/arm/translate.c
> @@ -114,7 +114,7 @@ typedef enum ISSInfo {
>  } ISSInfo;
> 
>  /* Save the syndrome information for a Data Abort */
> -static void disas_set_da_iss(DisasContext *s, TCGMemOp memop, ISSInfo issinfo)
> +static void disas_set_da_iss(DisasContext *s, MemOp memop, ISSInfo issinfo)
>  {
>      uint32_t syn;
>      int sas = memop & MO_SIZE;
> @@ -1079,7 +1079,7 @@ static inline void store_reg_from_load(DisasContext *s, int reg, TCGv_i32 var)
>   * that the address argument is TCGv_i32 rather than TCGv.
>   */
> 
> -static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, TCGMemOp op)
> +static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, MemOp op)
>  {
>      TCGv addr = tcg_temp_new();
>      tcg_gen_extu_i32_tl(addr, a32);
> @@ -1092,7 +1092,7 @@ static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, TCGMemOp op)
>  }
> 
>  static void gen_aa32_ld_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
> -                            int index, TCGMemOp opc)
> +                            int index, MemOp opc)
>  {
>      TCGv addr;
> 
> @@ -1107,7 +1107,7 @@ static void gen_aa32_ld_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
>  }
> 
>  static void gen_aa32_st_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
> -                            int index, TCGMemOp opc)
> +                            int index, MemOp opc)
>  {
>      TCGv addr;
> 
> @@ -1160,7 +1160,7 @@ static inline void gen_aa32_frob64(DisasContext *s, TCGv_i64 val)
>  }
> 
>  static void gen_aa32_ld_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
> -                            int index, TCGMemOp opc)
> +                            int index, MemOp opc)
>  {
>      TCGv addr = gen_aa32_addr(s, a32, opc);
>      tcg_gen_qemu_ld_i64(val, addr, index, opc);
> @@ -1175,7 +1175,7 @@ static inline void gen_aa32_ld64(DisasContext *s, TCGv_i64 val,
>  }
> 
>  static void gen_aa32_st_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
> -                            int index, TCGMemOp opc)
> +                            int index, MemOp opc)
>  {
>      TCGv addr = gen_aa32_addr(s, a32, opc);
> 
> @@ -1400,7 +1400,7 @@ neon_reg_offset (int reg, int n)
>   * where 0 is the least significant end of the register.
>   */
>  static inline long
> -neon_element_offset(int reg, int element, TCGMemOp size)
> +neon_element_offset(int reg, int element, MemOp size)
>  {
>      int element_size = 1 << size;
>      int ofs = element * element_size;
> @@ -1422,7 +1422,7 @@ static TCGv_i32 neon_load_reg(int reg, int pass)
>      return tmp;
>  }
> 
> -static void neon_load_element(TCGv_i32 var, int reg, int ele, TCGMemOp mop)
> +static void neon_load_element(TCGv_i32 var, int reg, int ele, MemOp mop)
>  {
>      long offset = neon_element_offset(reg, ele, mop & MO_SIZE);
> 
> @@ -1441,7 +1441,7 @@ static void neon_load_element(TCGv_i32 var, int reg, int ele, TCGMemOp mop)
>      }
>  }
> 
> -static void neon_load_element64(TCGv_i64 var, int reg, int ele, TCGMemOp mop)
> +static void neon_load_element64(TCGv_i64 var, int reg, int ele, MemOp mop)
>  {
>      long offset = neon_element_offset(reg, ele, mop & MO_SIZE);
> 
> @@ -1469,7 +1469,7 @@ static void neon_store_reg(int reg, int pass, TCGv_i32 var)
>      tcg_temp_free_i32(var);
>  }
> 
> -static void neon_store_element(int reg, int ele, TCGMemOp size, TCGv_i32 var)
> +static void neon_store_element(int reg, int ele, MemOp size, TCGv_i32 var)
>  {
>      long offset = neon_element_offset(reg, ele, size);
> 
> @@ -1488,7 +1488,7 @@ static void neon_store_element(int reg, int ele, TCGMemOp size, TCGv_i32 var)
>      }
>  }
> 
> -static void neon_store_element64(int reg, int ele, TCGMemOp size, TCGv_i64 var)
> +static void neon_store_element64(int reg, int ele, MemOp size, TCGv_i64 var)
>  {
>      long offset = neon_element_offset(reg, ele, size);
> 
> @@ -3558,7 +3558,7 @@ static int disas_neon_ls_insn(DisasContext *s, uint32_t insn)
>      int n;
>      int vec_size;
>      int mmu_idx;
> -    TCGMemOp endian;
> +    MemOp endian;
>      TCGv_i32 addr;
>      TCGv_i32 tmp;
>      TCGv_i32 tmp2;
> @@ -6867,7 +6867,7 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn)
>              } else if ((insn & 0x380) == 0) {
>                  /* VDUP */
>                  int element;
> -                TCGMemOp size;
> +                MemOp size;
> 
>                  if ((insn & (7 << 16)) == 0 || (q && (rd & 1))) {
>                      return 1;
> @@ -7435,7 +7435,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
>                                 TCGv_i32 addr, int size)
>  {
>      TCGv_i32 tmp = tcg_temp_new_i32();
> -    TCGMemOp opc = size | MO_ALIGN | s->be_data;
> +    MemOp opc = size | MO_ALIGN | s->be_data;
> 
>      s->is_ldex = true;
> 
> @@ -7489,7 +7489,7 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
>      TCGv taddr;
>      TCGLabel *done_label;
>      TCGLabel *fail_label;
> -    TCGMemOp opc = size | MO_ALIGN | s->be_data;
> +    MemOp opc = size | MO_ALIGN | s->be_data;
> 
>      /* if (env->exclusive_addr == addr && env->exclusive_val == [addr]) {
>           [addr] = {Rt};
> @@ -8603,7 +8603,7 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn)
>                          */
> 
>                          TCGv taddr;
> -                        TCGMemOp opc = s->be_data;
> +                        MemOp opc = s->be_data;
> 
>                          rm = (insn) & 0xf;
> 
> diff --git a/target/arm/translate.h b/target/arm/translate.h
> index a20f6e2..284c510 100644
> --- a/target/arm/translate.h
> +++ b/target/arm/translate.h
> @@ -21,7 +21,7 @@ typedef struct DisasContext {
>      int condexec_cond;
>      int thumb;
>      int sctlr_b;
> -    TCGMemOp be_data;
> +    MemOp be_data;
>  #if !defined(CONFIG_USER_ONLY)
>      int user;
>  #endif
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index 188fe68..ff4802a 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -1500,7 +1500,7 @@ static void form_gva(DisasContext *ctx, TCGv_tl *pgva, TCGv_reg *pofs,
>   */
>  static void do_load_32(DisasContext *ctx, TCGv_i32 dest, unsigned rb,
>                         unsigned rx, int scale, target_sreg disp,
> -                       unsigned sp, int modify, TCGMemOp mop)
> +                       unsigned sp, int modify, MemOp mop)
>  {
>      TCGv_reg ofs;
>      TCGv_tl addr;
> @@ -1518,7 +1518,7 @@ static void do_load_32(DisasContext *ctx, TCGv_i32 dest, unsigned rb,
> 
>  static void do_load_64(DisasContext *ctx, TCGv_i64 dest, unsigned rb,
>                         unsigned rx, int scale, target_sreg disp,
> -                       unsigned sp, int modify, TCGMemOp mop)
> +                       unsigned sp, int modify, MemOp mop)
>  {
>      TCGv_reg ofs;
>      TCGv_tl addr;
> @@ -1536,7 +1536,7 @@ static void do_load_64(DisasContext *ctx, TCGv_i64 dest, unsigned rb,
> 
>  static void do_store_32(DisasContext *ctx, TCGv_i32 src, unsigned rb,
>                          unsigned rx, int scale, target_sreg disp,
> -                        unsigned sp, int modify, TCGMemOp mop)
> +                        unsigned sp, int modify, MemOp mop)
>  {
>      TCGv_reg ofs;
>      TCGv_tl addr;
> @@ -1554,7 +1554,7 @@ static void do_store_32(DisasContext *ctx, TCGv_i32 src, unsigned rb,
> 
>  static void do_store_64(DisasContext *ctx, TCGv_i64 src, unsigned rb,
>                          unsigned rx, int scale, target_sreg disp,
> -                        unsigned sp, int modify, TCGMemOp mop)
> +                        unsigned sp, int modify, MemOp mop)
>  {
>      TCGv_reg ofs;
>      TCGv_tl addr;
> @@ -1580,7 +1580,7 @@ static void do_store_64(DisasContext *ctx, TCGv_i64 src, unsigned rb,
> 
>  static bool do_load(DisasContext *ctx, unsigned rt, unsigned rb,
>                      unsigned rx, int scale, target_sreg disp,
> -                    unsigned sp, int modify, TCGMemOp mop)
> +                    unsigned sp, int modify, MemOp mop)
>  {
>      TCGv_reg dest;
> 
> @@ -1653,7 +1653,7 @@ static bool trans_fldd(DisasContext *ctx, arg_ldst *a)
> 
>  static bool do_store(DisasContext *ctx, unsigned rt, unsigned rb,
>                       target_sreg disp, unsigned sp,
> -                     int modify, TCGMemOp mop)
> +                     int modify, MemOp mop)
>  {
>      nullify_over(ctx);
>      do_store_reg(ctx, load_gpr(ctx, rt), rb, 0, 0, disp, sp, modify, mop);
> @@ -2940,7 +2940,7 @@ static bool trans_st(DisasContext *ctx, arg_ldst *a)
> 
>  static bool trans_ldc(DisasContext *ctx, arg_ldst *a)
>  {
> -    TCGMemOp mop = MO_TEUL | MO_ALIGN_16 | a->size;
> +    MemOp mop = MO_TEUL | MO_ALIGN_16 | a->size;
>      TCGv_reg zero, dest, ofs;
>      TCGv_tl addr;
> 
> diff --git a/target/i386/translate.c b/target/i386/translate.c
> index 03150a8..def9867 100644
> --- a/target/i386/translate.c
> +++ b/target/i386/translate.c
> @@ -87,8 +87,8 @@ typedef struct DisasContext {
>      /* current insn context */
>      int override; /* -1 if no override */
>      int prefix;
> -    TCGMemOp aflag;
> -    TCGMemOp dflag;
> +    MemOp aflag;
> +    MemOp dflag;
>      target_ulong pc_start;
>      target_ulong pc; /* pc = eip + cs_base */
>      /* current block context */
> @@ -149,7 +149,7 @@ static void gen_eob(DisasContext *s);
>  static void gen_jr(DisasContext *s, TCGv dest);
>  static void gen_jmp(DisasContext *s, target_ulong eip);
>  static void gen_jmp_tb(DisasContext *s, target_ulong eip, int tb_num);
> -static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d);
> +static void gen_op(DisasContext *s1, int op, MemOp ot, int d);
> 
>  /* i386 arith/logic operations */
>  enum {
> @@ -320,7 +320,7 @@ static inline bool byte_reg_is_xH(DisasContext *s, int reg)
>  }
> 
>  /* Select the size of a push/pop operation.  */
> -static inline TCGMemOp mo_pushpop(DisasContext *s, TCGMemOp ot)
> +static inline MemOp mo_pushpop(DisasContext *s, MemOp ot)
>  {
>      if (CODE64(s)) {
>          return ot == MO_16 ? MO_16 : MO_64;
> @@ -330,13 +330,13 @@ static inline TCGMemOp mo_pushpop(DisasContext *s, TCGMemOp ot)
>  }
> 
>  /* Select the size of the stack pointer.  */
> -static inline TCGMemOp mo_stacksize(DisasContext *s)
> +static inline MemOp mo_stacksize(DisasContext *s)
>  {
>      return CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
>  }
> 
>  /* Select only size 64 else 32.  Used for SSE operand sizes.  */
> -static inline TCGMemOp mo_64_32(TCGMemOp ot)
> +static inline MemOp mo_64_32(MemOp ot)
>  {
>  #ifdef TARGET_X86_64
>      return ot == MO_64 ? MO_64 : MO_32;
> @@ -347,19 +347,19 @@ static inline TCGMemOp mo_64_32(TCGMemOp ot)
> 
>  /* Select size 8 if lsb of B is clear, else OT.  Used for decoding
>     byte vs word opcodes.  */
> -static inline TCGMemOp mo_b_d(int b, TCGMemOp ot)
> +static inline MemOp mo_b_d(int b, MemOp ot)
>  {
>      return b & 1 ? ot : MO_8;
>  }
> 
>  /* Select size 8 if lsb of B is clear, else OT capped at 32.
>     Used for decoding operand size of port opcodes.  */
> -static inline TCGMemOp mo_b_d32(int b, TCGMemOp ot)
> +static inline MemOp mo_b_d32(int b, MemOp ot)
>  {
>      return b & 1 ? (ot == MO_16 ? MO_16 : MO_32) : MO_8;
>  }
> 
> -static void gen_op_mov_reg_v(DisasContext *s, TCGMemOp ot, int reg, TCGv t0)
> +static void gen_op_mov_reg_v(DisasContext *s, MemOp ot, int reg, TCGv t0)
>  {
>      switch(ot) {
>      case MO_8:
> @@ -388,7 +388,7 @@ static void gen_op_mov_reg_v(DisasContext *s, TCGMemOp ot, int reg, TCGv t0)
>  }
> 
>  static inline
> -void gen_op_mov_v_reg(DisasContext *s, TCGMemOp ot, TCGv t0, int reg)
> +void gen_op_mov_v_reg(DisasContext *s, MemOp ot, TCGv t0, int reg)
>  {
>      if (ot == MO_8 && byte_reg_is_xH(s, reg)) {
>          tcg_gen_extract_tl(t0, cpu_regs[reg - 4], 8, 8);
> @@ -411,13 +411,13 @@ static inline void gen_op_jmp_v(TCGv dest)
>  }
> 
>  static inline
> -void gen_op_add_reg_im(DisasContext *s, TCGMemOp size, int reg, int32_t val)
> +void gen_op_add_reg_im(DisasContext *s, MemOp size, int reg, int32_t val)
>  {
>      tcg_gen_addi_tl(s->tmp0, cpu_regs[reg], val);
>      gen_op_mov_reg_v(s, size, reg, s->tmp0);
>  }
> 
> -static inline void gen_op_add_reg_T0(DisasContext *s, TCGMemOp size, int reg)
> +static inline void gen_op_add_reg_T0(DisasContext *s, MemOp size, int reg)
>  {
>      tcg_gen_add_tl(s->tmp0, cpu_regs[reg], s->T0);
>      gen_op_mov_reg_v(s, size, reg, s->tmp0);
> @@ -451,7 +451,7 @@ static inline void gen_jmp_im(DisasContext *s, target_ulong pc)
>  /* Compute SEG:REG into A0.  SEG is selected from the override segment
>     (OVR_SEG) and the default segment (DEF_SEG).  OVR_SEG may be -1 to
>     indicate no override.  */
> -static void gen_lea_v_seg(DisasContext *s, TCGMemOp aflag, TCGv a0,
> +static void gen_lea_v_seg(DisasContext *s, MemOp aflag, TCGv a0,
>                            int def_seg, int ovr_seg)
>  {
>      switch (aflag) {
> @@ -514,13 +514,13 @@ static inline void gen_string_movl_A0_EDI(DisasContext *s)
>      gen_lea_v_seg(s, s->aflag, cpu_regs[R_EDI], R_ES, -1);
>  }
> 
> -static inline void gen_op_movl_T0_Dshift(DisasContext *s, TCGMemOp ot)
> +static inline void gen_op_movl_T0_Dshift(DisasContext *s, MemOp ot)
>  {
>      tcg_gen_ld32s_tl(s->T0, cpu_env, offsetof(CPUX86State, df));
>      tcg_gen_shli_tl(s->T0, s->T0, ot);
>  };
> 
> -static TCGv gen_ext_tl(TCGv dst, TCGv src, TCGMemOp size, bool sign)
> +static TCGv gen_ext_tl(TCGv dst, TCGv src, MemOp size, bool sign)
>  {
>      switch (size) {
>      case MO_8:
> @@ -551,18 +551,18 @@ static TCGv gen_ext_tl(TCGv dst, TCGv src, TCGMemOp size, bool sign)
>      }
>  }
> 
> -static void gen_extu(TCGMemOp ot, TCGv reg)
> +static void gen_extu(MemOp ot, TCGv reg)
>  {
>      gen_ext_tl(reg, reg, ot, false);
>  }
> 
> -static void gen_exts(TCGMemOp ot, TCGv reg)
> +static void gen_exts(MemOp ot, TCGv reg)
>  {
>      gen_ext_tl(reg, reg, ot, true);
>  }
> 
>  static inline
> -void gen_op_jnz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
> +void gen_op_jnz_ecx(DisasContext *s, MemOp size, TCGLabel *label1)
>  {
>      tcg_gen_mov_tl(s->tmp0, cpu_regs[R_ECX]);
>      gen_extu(size, s->tmp0);
> @@ -570,14 +570,14 @@ void gen_op_jnz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
>  }
> 
>  static inline
> -void gen_op_jz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
> +void gen_op_jz_ecx(DisasContext *s, MemOp size, TCGLabel *label1)
>  {
>      tcg_gen_mov_tl(s->tmp0, cpu_regs[R_ECX]);
>      gen_extu(size, s->tmp0);
>      tcg_gen_brcondi_tl(TCG_COND_EQ, s->tmp0, 0, label1);
>  }
> 
> -static void gen_helper_in_func(TCGMemOp ot, TCGv v, TCGv_i32 n)
> +static void gen_helper_in_func(MemOp ot, TCGv v, TCGv_i32 n)
>  {
>      switch (ot) {
>      case MO_8:
> @@ -594,7 +594,7 @@ static void gen_helper_in_func(TCGMemOp ot, TCGv v, TCGv_i32 n)
>      }
>  }
> 
> -static void gen_helper_out_func(TCGMemOp ot, TCGv_i32 v, TCGv_i32 n)
> +static void gen_helper_out_func(MemOp ot, TCGv_i32 v, TCGv_i32 n)
>  {
>      switch (ot) {
>      case MO_8:
> @@ -611,7 +611,7 @@ static void gen_helper_out_func(TCGMemOp ot, TCGv_i32 v, TCGv_i32 n)
>      }
>  }
> 
> -static void gen_check_io(DisasContext *s, TCGMemOp ot, target_ulong cur_eip,
> +static void gen_check_io(DisasContext *s, MemOp ot, target_ulong cur_eip,
>                           uint32_t svm_flags)
>  {
>      target_ulong next_eip;
> @@ -644,7 +644,7 @@ static void gen_check_io(DisasContext *s, TCGMemOp ot, target_ulong cur_eip,
>      }
>  }
> 
> -static inline void gen_movs(DisasContext *s, TCGMemOp ot)
> +static inline void gen_movs(DisasContext *s, MemOp ot)
>  {
>      gen_string_movl_A0_ESI(s);
>      gen_op_ld_v(s, ot, s->T0, s->A0);
> @@ -840,7 +840,7 @@ static CCPrepare gen_prepare_eflags_s(DisasContext *s, TCGv reg)
>          return (CCPrepare) { .cond = TCG_COND_NEVER, .mask = -1 };
>      default:
>          {
> -            TCGMemOp size = (s->cc_op - CC_OP_ADDB) & 3;
> +            MemOp size = (s->cc_op - CC_OP_ADDB) & 3;
>              TCGv t0 = gen_ext_tl(reg, cpu_cc_dst, size, true);
>              return (CCPrepare) { .cond = TCG_COND_LT, .reg = t0, .mask = -1 };
>          }
> @@ -885,7 +885,7 @@ static CCPrepare gen_prepare_eflags_z(DisasContext *s, TCGv reg)
>                               .mask = -1 };
>      default:
>          {
> -            TCGMemOp size = (s->cc_op - CC_OP_ADDB) & 3;
> +            MemOp size = (s->cc_op - CC_OP_ADDB) & 3;
>              TCGv t0 = gen_ext_tl(reg, cpu_cc_dst, size, false);
>              return (CCPrepare) { .cond = TCG_COND_EQ, .reg = t0, .mask = -1 };
>          }
> @@ -897,7 +897,7 @@ static CCPrepare gen_prepare_eflags_z(DisasContext *s, TCGv reg)
>  static CCPrepare gen_prepare_cc(DisasContext *s, int b, TCGv reg)
>  {
>      int inv, jcc_op, cond;
> -    TCGMemOp size;
> +    MemOp size;
>      CCPrepare cc;
>      TCGv t0;
> 
> @@ -1075,7 +1075,7 @@ static TCGLabel *gen_jz_ecx_string(DisasContext *s, target_ulong next_eip)
>      return l2;
>  }
> 
> -static inline void gen_stos(DisasContext *s, TCGMemOp ot)
> +static inline void gen_stos(DisasContext *s, MemOp ot)
>  {
>      gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX);
>      gen_string_movl_A0_EDI(s);
> @@ -1084,7 +1084,7 @@ static inline void gen_stos(DisasContext *s, TCGMemOp ot)
>      gen_op_add_reg_T0(s, s->aflag, R_EDI);
>  }
> 
> -static inline void gen_lods(DisasContext *s, TCGMemOp ot)
> +static inline void gen_lods(DisasContext *s, MemOp ot)
>  {
>      gen_string_movl_A0_ESI(s);
>      gen_op_ld_v(s, ot, s->T0, s->A0);
> @@ -1093,7 +1093,7 @@ static inline void gen_lods(DisasContext *s, TCGMemOp ot)
>      gen_op_add_reg_T0(s, s->aflag, R_ESI);
>  }
> 
> -static inline void gen_scas(DisasContext *s, TCGMemOp ot)
> +static inline void gen_scas(DisasContext *s, MemOp ot)
>  {
>      gen_string_movl_A0_EDI(s);
>      gen_op_ld_v(s, ot, s->T1, s->A0);
> @@ -1102,7 +1102,7 @@ static inline void gen_scas(DisasContext *s, TCGMemOp ot)
>      gen_op_add_reg_T0(s, s->aflag, R_EDI);
>  }
> 
> -static inline void gen_cmps(DisasContext *s, TCGMemOp ot)
> +static inline void gen_cmps(DisasContext *s, MemOp ot)
>  {
>      gen_string_movl_A0_EDI(s);
>      gen_op_ld_v(s, ot, s->T1, s->A0);
> @@ -1126,7 +1126,7 @@ static void gen_bpt_io(DisasContext *s, TCGv_i32 t_port, int ot)
>  }
> 
> 
> -static inline void gen_ins(DisasContext *s, TCGMemOp ot)
> +static inline void gen_ins(DisasContext *s, MemOp ot)
>  {
>      if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) {
>          gen_io_start();
> @@ -1148,7 +1148,7 @@ static inline void gen_ins(DisasContext *s, TCGMemOp ot)
>      }
>  }
> 
> -static inline void gen_outs(DisasContext *s, TCGMemOp ot)
> +static inline void gen_outs(DisasContext *s, MemOp ot)
>  {
>      if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) {
>          gen_io_start();
> @@ -1171,7 +1171,7 @@ static inline void gen_outs(DisasContext *s, TCGMemOp ot)
>  /* same method as Valgrind : we generate jumps to current or next
>     instruction */
>  #define GEN_REPZ(op)                                                          \
> -static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
> +static inline void gen_repz_ ## op(DisasContext *s, MemOp ot,              \
>                                   target_ulong cur_eip, target_ulong next_eip) \
>  {                                                                             \
>      TCGLabel *l2;                                                             \
> @@ -1187,7 +1187,7 @@ static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
>  }
> 
>  #define GEN_REPZ2(op)                                                         \
> -static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
> +static inline void gen_repz_ ## op(DisasContext *s, MemOp ot,              \
>                                     target_ulong cur_eip,                      \
>                                     target_ulong next_eip,                     \
>                                     int nz)                                    \
> @@ -1284,7 +1284,7 @@ static void gen_illegal_opcode(DisasContext *s)
>  }
> 
>  /* if d == OR_TMP0, it means memory operand (address in A0) */
> -static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
> +static void gen_op(DisasContext *s1, int op, MemOp ot, int d)
>  {
>      if (d != OR_TMP0) {
>          if (s1->prefix & PREFIX_LOCK) {
> @@ -1395,7 +1395,7 @@ static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
>  }
> 
>  /* if d == OR_TMP0, it means memory operand (address in A0) */
> -static void gen_inc(DisasContext *s1, TCGMemOp ot, int d, int c)
> +static void gen_inc(DisasContext *s1, MemOp ot, int d, int c)
>  {
>      if (s1->prefix & PREFIX_LOCK) {
>          if (d != OR_TMP0) {
> @@ -1421,7 +1421,7 @@ static void gen_inc(DisasContext *s1, TCGMemOp ot, int d, int c)
>      set_cc_op(s1, (c > 0 ? CC_OP_INCB : CC_OP_DECB) + ot);
>  }
> 
> -static void gen_shift_flags(DisasContext *s, TCGMemOp ot, TCGv result,
> +static void gen_shift_flags(DisasContext *s, MemOp ot, TCGv result,
>                              TCGv shm1, TCGv count, bool is_right)
>  {
>      TCGv_i32 z32, s32, oldop;
> @@ -1466,7 +1466,7 @@ static void gen_shift_flags(DisasContext *s, TCGMemOp ot, TCGv result,
>      set_cc_op(s, CC_OP_DYNAMIC);
>  }
> 
> -static void gen_shift_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
> +static void gen_shift_rm_T1(DisasContext *s, MemOp ot, int op1,
>                              int is_right, int is_arith)
>  {
>      target_ulong mask = (ot == MO_64 ? 0x3f : 0x1f);
> @@ -1502,7 +1502,7 @@ static void gen_shift_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
>      gen_shift_flags(s, ot, s->T0, s->tmp0, s->T1, is_right);
>  }
> 
> -static void gen_shift_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
> +static void gen_shift_rm_im(DisasContext *s, MemOp ot, int op1, int op2,
>                              int is_right, int is_arith)
>  {
>      int mask = (ot == MO_64 ? 0x3f : 0x1f);
> @@ -1542,7 +1542,7 @@ static void gen_shift_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
>      }
>  }
> 
> -static void gen_rot_rm_T1(DisasContext *s, TCGMemOp ot, int op1, int is_right)
> +static void gen_rot_rm_T1(DisasContext *s, MemOp ot, int op1, int is_right)
>  {
>      target_ulong mask = (ot == MO_64 ? 0x3f : 0x1f);
>      TCGv_i32 t0, t1;
> @@ -1627,7 +1627,7 @@ static void gen_rot_rm_T1(DisasContext *s, TCGMemOp ot, int op1, int is_right)
>      set_cc_op(s, CC_OP_DYNAMIC);
>  }
> 
> -static void gen_rot_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
> +static void gen_rot_rm_im(DisasContext *s, MemOp ot, int op1, int op2,
>                            int is_right)
>  {
>      int mask = (ot == MO_64 ? 0x3f : 0x1f);
> @@ -1705,7 +1705,7 @@ static void gen_rot_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
>  }
> 
>  /* XXX: add faster immediate = 1 case */
> -static void gen_rotc_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
> +static void gen_rotc_rm_T1(DisasContext *s, MemOp ot, int op1,
>                             int is_right)
>  {
>      gen_compute_eflags(s);
> @@ -1761,7 +1761,7 @@ static void gen_rotc_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
>  }
> 
>  /* XXX: add faster immediate case */
> -static void gen_shiftd_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
> +static void gen_shiftd_rm_T1(DisasContext *s, MemOp ot, int op1,
>                               bool is_right, TCGv count_in)
>  {
>      target_ulong mask = (ot == MO_64 ? 63 : 31);
> @@ -1842,7 +1842,7 @@ static void gen_shiftd_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
>      tcg_temp_free(count);
>  }
> 
> -static void gen_shift(DisasContext *s1, int op, TCGMemOp ot, int d, int s)
> +static void gen_shift(DisasContext *s1, int op, MemOp ot, int d, int s)
>  {
>      if (s != OR_TMP1)
>          gen_op_mov_v_reg(s1, ot, s1->T1, s);
> @@ -1872,7 +1872,7 @@ static void gen_shift(DisasContext *s1, int op, TCGMemOp ot, int d, int s)
>      }
>  }
> 
> -static void gen_shifti(DisasContext *s1, int op, TCGMemOp ot, int d, int c)
> +static void gen_shifti(DisasContext *s1, int op, MemOp ot, int d, int c)
>  {
>      switch(op) {
>      case OP_ROL:
> @@ -2149,7 +2149,7 @@ static void gen_add_A0_ds_seg(DisasContext *s)
>  /* generate modrm memory load or store of 'reg'. TMP0 is used if reg ==
>     OR_TMP0 */
>  static void gen_ldst_modrm(CPUX86State *env, DisasContext *s, int modrm,
> -                           TCGMemOp ot, int reg, int is_store)
> +                           MemOp ot, int reg, int is_store)
>  {
>      int mod, rm;
> 
> @@ -2179,7 +2179,7 @@ static void gen_ldst_modrm(CPUX86State *env, DisasContext *s, int modrm,
>      }
>  }
> 
> -static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, TCGMemOp ot)
> +static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, MemOp ot)
>  {
>      uint32_t ret;
> 
> @@ -2202,7 +2202,7 @@ static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, TCGMemOp ot)
>      return ret;
>  }
> 
> -static inline int insn_const_size(TCGMemOp ot)
> +static inline int insn_const_size(MemOp ot)
>  {
>      if (ot <= MO_32) {
>          return 1 << ot;
> @@ -2266,7 +2266,7 @@ static inline void gen_jcc(DisasContext *s, int b,
>      }
>  }
> 
> -static void gen_cmovcc1(CPUX86State *env, DisasContext *s, TCGMemOp ot, int b,
> +static void gen_cmovcc1(CPUX86State *env, DisasContext *s, MemOp ot, int b,
>                          int modrm, int reg)
>  {
>      CCPrepare cc;
> @@ -2363,8 +2363,8 @@ static inline void gen_stack_update(DisasContext *s, int addend)
>  /* Generate a push. It depends on ss32, addseg and dflag.  */
>  static void gen_push_v(DisasContext *s, TCGv val)
>  {
> -    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
> -    TCGMemOp a_ot = mo_stacksize(s);
> +    MemOp d_ot = mo_pushpop(s, s->dflag);
> +    MemOp a_ot = mo_stacksize(s);
>      int size = 1 << d_ot;
>      TCGv new_esp = s->A0;
> 
> @@ -2383,9 +2383,9 @@ static void gen_push_v(DisasContext *s, TCGv val)
>  }
> 
>  /* two step pop is necessary for precise exceptions */
> -static TCGMemOp gen_pop_T0(DisasContext *s)
> +static MemOp gen_pop_T0(DisasContext *s)
>  {
> -    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
> +    MemOp d_ot = mo_pushpop(s, s->dflag);
> 
>      gen_lea_v_seg(s, mo_stacksize(s), cpu_regs[R_ESP], R_SS, -1);
>      gen_op_ld_v(s, d_ot, s->T0, s->A0);
> @@ -2393,7 +2393,7 @@ static TCGMemOp gen_pop_T0(DisasContext *s)
>      return d_ot;
>  }
> 
> -static inline void gen_pop_update(DisasContext *s, TCGMemOp ot)
> +static inline void gen_pop_update(DisasContext *s, MemOp ot)
>  {
>      gen_stack_update(s, 1 << ot);
>  }
> @@ -2405,8 +2405,8 @@ static inline void gen_stack_A0(DisasContext *s)
> 
>  static void gen_pusha(DisasContext *s)
>  {
> -    TCGMemOp s_ot = s->ss32 ? MO_32 : MO_16;
> -    TCGMemOp d_ot = s->dflag;
> +    MemOp s_ot = s->ss32 ? MO_32 : MO_16;
> +    MemOp d_ot = s->dflag;
>      int size = 1 << d_ot;
>      int i;
> 
> @@ -2421,8 +2421,8 @@ static void gen_pusha(DisasContext *s)
> 
>  static void gen_popa(DisasContext *s)
>  {
> -    TCGMemOp s_ot = s->ss32 ? MO_32 : MO_16;
> -    TCGMemOp d_ot = s->dflag;
> +    MemOp s_ot = s->ss32 ? MO_32 : MO_16;
> +    MemOp d_ot = s->dflag;
>      int size = 1 << d_ot;
>      int i;
> 
> @@ -2442,8 +2442,8 @@ static void gen_popa(DisasContext *s)
> 
>  static void gen_enter(DisasContext *s, int esp_addend, int level)
>  {
> -    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
> -    TCGMemOp a_ot = CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
> +    MemOp d_ot = mo_pushpop(s, s->dflag);
> +    MemOp a_ot = CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
>      int size = 1 << d_ot;
> 
>      /* Push BP; compute FrameTemp into T1.  */
> @@ -2482,8 +2482,8 @@ static void gen_enter(DisasContext *s, int esp_addend, int level)
> 
>  static void gen_leave(DisasContext *s)
>  {
> -    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
> -    TCGMemOp a_ot = mo_stacksize(s);
> +    MemOp d_ot = mo_pushpop(s, s->dflag);
> +    MemOp a_ot = mo_stacksize(s);
> 
>      gen_lea_v_seg(s, a_ot, cpu_regs[R_EBP], R_SS, -1);
>      gen_op_ld_v(s, d_ot, s->T0, s->A0);
> @@ -3045,7 +3045,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
>      SSEFunc_0_eppi sse_fn_eppi;
>      SSEFunc_0_ppi sse_fn_ppi;
>      SSEFunc_0_eppt sse_fn_eppt;
> -    TCGMemOp ot;
> +    MemOp ot;
> 
>      b &= 0xff;
>      if (s->prefix & PREFIX_DATA)
> @@ -4488,7 +4488,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
>      CPUX86State *env = cpu->env_ptr;
>      int b, prefixes;
>      int shift;
> -    TCGMemOp ot, aflag, dflag;
> +    MemOp ot, aflag, dflag;
>      int modrm, reg, rm, mod, op, opreg, val;
>      target_ulong next_eip, tval;
>      int rex_w, rex_r;
> @@ -5567,8 +5567,8 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
>      case 0x1be: /* movsbS Gv, Eb */
>      case 0x1bf: /* movswS Gv, Eb */
>          {
> -            TCGMemOp d_ot;
> -            TCGMemOp s_ot;
> +            MemOp d_ot;
> +            MemOp s_ot;
> 
>              /* d_ot is the size of destination */
>              d_ot = dflag;
> diff --git a/target/m68k/translate.c b/target/m68k/translate.c
> index 60bcfb7..24c1dd3 100644
> --- a/target/m68k/translate.c
> +++ b/target/m68k/translate.c
> @@ -2414,7 +2414,7 @@ DISAS_INSN(cas)
>      uint16_t ext;
>      TCGv load;
>      TCGv cmp;
> -    TCGMemOp opc;
> +    MemOp opc;
> 
>      switch ((insn >> 9) & 3) {
>      case 1:
> diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
> index 9ce65f3..41d1b8b 100644
> --- a/target/microblaze/translate.c
> +++ b/target/microblaze/translate.c
> @@ -919,7 +919,7 @@ static void dec_load(DisasContext *dc)
>      unsigned int size;
>      bool rev = false, ex = false, ea = false;
>      int mem_index = cpu_mmu_index(&dc->cpu->env, false);
> -    TCGMemOp mop;
> +    MemOp mop;
> 
>      mop = dc->opcode & 3;
>      size = 1 << mop;
> @@ -1035,7 +1035,7 @@ static void dec_store(DisasContext *dc)
>      unsigned int size;
>      bool rev = false, ex = false, ea = false;
>      int mem_index = cpu_mmu_index(&dc->cpu->env, false);
> -    TCGMemOp mop;
> +    MemOp mop;
> 
>      mop = dc->opcode & 3;
>      size = 1 << mop;
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index ca62800..59b5d85 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -2526,7 +2526,7 @@ typedef struct DisasContext {
>      int32_t CP0_Config5;
>      /* Routine used to access memory */
>      int mem_idx;
> -    TCGMemOp default_tcg_memop_mask;
> +    MemOp default_tcg_memop_mask;
>      uint32_t hflags, saved_hflags;
>      target_ulong btarget;
>      bool ulri;
> @@ -3706,7 +3706,7 @@ static void gen_st(DisasContext *ctx, uint32_t opc, int rt,
> 
>  /* Store conditional */
>  static void gen_st_cond(DisasContext *ctx, int rt, int base, int offset,
> -                        TCGMemOp tcg_mo, bool eva)
> +                        MemOp tcg_mo, bool eva)
>  {
>      TCGv addr, t0, val;
>      TCGLabel *l1 = gen_new_label();
> @@ -4546,7 +4546,7 @@ static void gen_HILO(DisasContext *ctx, uint32_t opc, int acc, int reg)
>  }
> 
>  static inline void gen_r6_ld(target_long addr, int reg, int memidx,
> -                             TCGMemOp memop)
> +                             MemOp memop)
>  {
>      TCGv t0 = tcg_const_tl(addr);
>      tcg_gen_qemu_ld_tl(t0, t0, memidx, memop);
> @@ -21828,7 +21828,7 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
>                               extract32(ctx->opcode, 0, 8);
>                      TCGv va = tcg_temp_new();
>                      TCGv t1 = tcg_temp_new();
> -                    TCGMemOp memop = (extract32(ctx->opcode, 8, 3)) ==
> +                    MemOp memop = (extract32(ctx->opcode, 8, 3)) ==
>                                        NM_P_LS_UAWM ? MO_UNALN : 0;
> 
>                      count = (count == 0) ? 8 : count;
> diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c
> index 4360ce4..b189c50 100644
> --- a/target/openrisc/translate.c
> +++ b/target/openrisc/translate.c
> @@ -681,7 +681,7 @@ static bool trans_l_lwa(DisasContext *dc, arg_load *a)
>      return true;
>  }
> 
> -static void do_load(DisasContext *dc, arg_load *a, TCGMemOp mop)
> +static void do_load(DisasContext *dc, arg_load *a, MemOp mop)
>  {
>      TCGv ea;
> 
> @@ -763,7 +763,7 @@ static bool trans_l_swa(DisasContext *dc, arg_store *a)
>      return true;
>  }
> 
> -static void do_store(DisasContext *dc, arg_store *a, TCGMemOp mop)
> +static void do_store(DisasContext *dc, arg_store *a, MemOp mop)
>  {
>      TCGv t0 = tcg_temp_new();
>      tcg_gen_addi_tl(t0, cpu_R[a->a], a->i);
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index 4a5de28..31800ed 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -162,7 +162,7 @@ struct DisasContext {
>      int mem_idx;
>      int access_type;
>      /* Translation flags */
> -    TCGMemOp default_tcg_memop_mask;
> +    MemOp default_tcg_memop_mask;
>  #if defined(TARGET_PPC64)
>      bool sf_mode;
>      bool has_cfar;
> @@ -3142,7 +3142,7 @@ static void gen_isync(DisasContext *ctx)
> 
>  #define MEMOP_GET_SIZE(x)  (1 << ((x) & MO_SIZE))
> 
> -static void gen_load_locked(DisasContext *ctx, TCGMemOp memop)
> +static void gen_load_locked(DisasContext *ctx, MemOp memop)
>  {
>      TCGv gpr = cpu_gpr[rD(ctx->opcode)];
>      TCGv t0 = tcg_temp_new();
> @@ -3167,7 +3167,7 @@ LARX(lbarx, DEF_MEMOP(MO_UB))
>  LARX(lharx, DEF_MEMOP(MO_UW))
>  LARX(lwarx, DEF_MEMOP(MO_UL))
> 
> -static void gen_fetch_inc_conditional(DisasContext *ctx, TCGMemOp memop,
> +static void gen_fetch_inc_conditional(DisasContext *ctx, MemOp memop,
>                                        TCGv EA, TCGCond cond, int addend)
>  {
>      TCGv t = tcg_temp_new();
> @@ -3193,7 +3193,7 @@ static void gen_fetch_inc_conditional(DisasContext *ctx, TCGMemOp memop,
>      tcg_temp_free(u);
>  }
> 
> -static void gen_ld_atomic(DisasContext *ctx, TCGMemOp memop)
> +static void gen_ld_atomic(DisasContext *ctx, MemOp memop)
>  {
>      uint32_t gpr_FC = FC(ctx->opcode);
>      TCGv EA = tcg_temp_new();
> @@ -3306,7 +3306,7 @@ static void gen_ldat(DisasContext *ctx)
>  }
>  #endif
> 
> -static void gen_st_atomic(DisasContext *ctx, TCGMemOp memop)
> +static void gen_st_atomic(DisasContext *ctx, MemOp memop)
>  {
>      uint32_t gpr_FC = FC(ctx->opcode);
>      TCGv EA = tcg_temp_new();
> @@ -3389,7 +3389,7 @@ static void gen_stdat(DisasContext *ctx)
>  }
>  #endif
> 
> -static void gen_conditional_store(DisasContext *ctx, TCGMemOp memop)
> +static void gen_conditional_store(DisasContext *ctx, MemOp memop)
>  {
>      TCGLabel *l1 = gen_new_label();
>      TCGLabel *l2 = gen_new_label();
> diff --git a/target/riscv/insn_trans/trans_rva.inc.c b/target/riscv/insn_trans/trans_rva.inc.c
> index fadd888..be8a9f0 100644
> --- a/target/riscv/insn_trans/trans_rva.inc.c
> +++ b/target/riscv/insn_trans/trans_rva.inc.c
> @@ -18,7 +18,7 @@
>   * this program.  If not, see <http://www.gnu.org/licenses/>.
>   */
> 
> -static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
> +static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, MemOp mop)
>  {
>      TCGv src1 = tcg_temp_new();
>      /* Put addr in load_res, data in load_val.  */
> @@ -37,7 +37,7 @@ static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
>      return true;
>  }
> 
> -static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
> +static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, MemOp mop)
>  {
>      TCGv src1 = tcg_temp_new();
>      TCGv src2 = tcg_temp_new();
> @@ -82,8 +82,8 @@ static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
>  }
> 
>  static bool gen_amo(DisasContext *ctx, arg_atomic *a,
> -                    void(*func)(TCGv, TCGv, TCGv, TCGArg, TCGMemOp),
> -                    TCGMemOp mop)
> +                    void(*func)(TCGv, TCGv, TCGv, TCGArg, MemOp),
> +                    MemOp mop)
>  {
>      TCGv src1 = tcg_temp_new();
>      TCGv src2 = tcg_temp_new();
> diff --git a/target/riscv/insn_trans/trans_rvi.inc.c b/target/riscv/insn_trans/trans_rvi.inc.c
> index ea64731..cf440d1 100644
> --- a/target/riscv/insn_trans/trans_rvi.inc.c
> +++ b/target/riscv/insn_trans/trans_rvi.inc.c
> @@ -135,7 +135,7 @@ static bool trans_bgeu(DisasContext *ctx, arg_bgeu *a)
>      return gen_branch(ctx, a, TCG_COND_GEU);
>  }
> 
> -static bool gen_load(DisasContext *ctx, arg_lb *a, TCGMemOp memop)
> +static bool gen_load(DisasContext *ctx, arg_lb *a, MemOp memop)
>  {
>      TCGv t0 = tcg_temp_new();
>      TCGv t1 = tcg_temp_new();
> @@ -174,7 +174,7 @@ static bool trans_lhu(DisasContext *ctx, arg_lhu *a)
>      return gen_load(ctx, a, MO_TEUW);
>  }
> 
> -static bool gen_store(DisasContext *ctx, arg_sb *a, TCGMemOp memop)
> +static bool gen_store(DisasContext *ctx, arg_sb *a, MemOp memop)
>  {
>      TCGv t0 = tcg_temp_new();
>      TCGv dat = tcg_temp_new();
> diff --git a/target/s390x/translate.c b/target/s390x/translate.c
> index ac0d8b6..2927247 100644
> --- a/target/s390x/translate.c
> +++ b/target/s390x/translate.c
> @@ -152,7 +152,7 @@ static inline int vec_full_reg_offset(uint8_t reg)
>      return offsetof(CPUS390XState, vregs[reg][0]);
>  }
> 
> -static inline int vec_reg_offset(uint8_t reg, uint8_t enr, TCGMemOp es)
> +static inline int vec_reg_offset(uint8_t reg, uint8_t enr, MemOp es)
>  {
>      /* Convert element size (es) - e.g. MO_8 - to bytes */
>      const uint8_t bytes = 1 << es;
> @@ -2262,7 +2262,7 @@ static DisasJumpType op_csst(DisasContext *s, DisasOps *o)
>  #ifndef CONFIG_USER_ONLY
>  static DisasJumpType op_csp(DisasContext *s, DisasOps *o)
>  {
> -    TCGMemOp mop = s->insn->data;
> +    MemOp mop = s->insn->data;
>      TCGv_i64 addr, old, cc;
>      TCGLabel *lab = gen_new_label();
> 
> @@ -3228,7 +3228,7 @@ static DisasJumpType op_lm64(DisasContext *s, DisasOps *o)
>  static DisasJumpType op_lpd(DisasContext *s, DisasOps *o)
>  {
>      TCGv_i64 a1, a2;
> -    TCGMemOp mop = s->insn->data;
> +    MemOp mop = s->insn->data;
> 
>      /* In a parallel context, stop the world and single step.  */
>      if (tb_cflags(s->base.tb) & CF_PARALLEL) {
> diff --git a/target/s390x/translate_vx.inc.c b/target/s390x/translate_vx.inc.c
> index 41d5cf8..4c56bbb 100644
> --- a/target/s390x/translate_vx.inc.c
> +++ b/target/s390x/translate_vx.inc.c
> @@ -57,13 +57,13 @@
>  #define FPF_LONG        3
>  #define FPF_EXT         4
> 
> -static inline bool valid_vec_element(uint8_t enr, TCGMemOp es)
> +static inline bool valid_vec_element(uint8_t enr, MemOp es)
>  {
>      return !(enr & ~(NUM_VEC_ELEMENTS(es) - 1));
>  }
> 
>  static void read_vec_element_i64(TCGv_i64 dst, uint8_t reg, uint8_t enr,
> -                                 TCGMemOp memop)
> +                                 MemOp memop)
>  {
>      const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);
> 
> @@ -96,7 +96,7 @@ static void read_vec_element_i64(TCGv_i64 dst, uint8_t reg, uint8_t enr,
>  }
> 
>  static void read_vec_element_i32(TCGv_i32 dst, uint8_t reg, uint8_t enr,
> -                                 TCGMemOp memop)
> +                                 MemOp memop)
>  {
>      const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);
> 
> @@ -123,7 +123,7 @@ static void read_vec_element_i32(TCGv_i32 dst, uint8_t reg, uint8_t enr,
>  }
> 
>  static void write_vec_element_i64(TCGv_i64 src, int reg, uint8_t enr,
> -                                  TCGMemOp memop)
> +                                  MemOp memop)
>  {
>      const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);
> 
> @@ -146,7 +146,7 @@ static void write_vec_element_i64(TCGv_i64 src, int reg, uint8_t enr,
>  }
> 
>  static void write_vec_element_i32(TCGv_i32 src, int reg, uint8_t enr,
> -                                  TCGMemOp memop)
> +                                  MemOp memop)
>  {
>      const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);
> 
> diff --git a/target/sparc/translate.c b/target/sparc/translate.c
> index 091bab5..bef9ce6 100644
> --- a/target/sparc/translate.c
> +++ b/target/sparc/translate.c
> @@ -2019,7 +2019,7 @@ static inline void gen_ne_fop_QD(DisasContext *dc, int rd, int rs,
>  }
> 
>  static void gen_swap(DisasContext *dc, TCGv dst, TCGv src,
> -                     TCGv addr, int mmu_idx, TCGMemOp memop)
> +                     TCGv addr, int mmu_idx, MemOp memop)
>  {
>      gen_address_mask(dc, addr);
>      tcg_gen_atomic_xchg_tl(dst, addr, src, mmu_idx, memop);
> @@ -2050,10 +2050,10 @@ typedef struct {
>      ASIType type;
>      int asi;
>      int mem_idx;
> -    TCGMemOp memop;
> +    MemOp memop;
>  } DisasASI;
> 
> -static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
> +static DisasASI get_asi(DisasContext *dc, int insn, MemOp memop)
>  {
>      int asi = GET_FIELD(insn, 19, 26);
>      ASIType type = GET_ASI_HELPER;
> @@ -2267,7 +2267,7 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
>  }
> 
>  static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
> -                       int insn, TCGMemOp memop)
> +                       int insn, MemOp memop)
>  {
>      DisasASI da = get_asi(dc, insn, memop);
> 
> @@ -2305,7 +2305,7 @@ static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
>  }
> 
>  static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
> -                       int insn, TCGMemOp memop)
> +                       int insn, MemOp memop)
>  {
>      DisasASI da = get_asi(dc, insn, memop);
> 
> @@ -2511,7 +2511,7 @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
>      case GET_ASI_BLOCK:
>          /* Valid for lddfa on aligned registers only.  */
>          if (size == 8 && (rd & 7) == 0) {
> -            TCGMemOp memop;
> +            MemOp memop;
>              TCGv eight;
>              int i;
> 
> @@ -2625,7 +2625,7 @@ static void gen_stf_asi(DisasContext *dc, TCGv addr,
>      case GET_ASI_BLOCK:
>          /* Valid for stdfa on aligned registers only.  */
>          if (size == 8 && (rd & 7) == 0) {
> -            TCGMemOp memop;
> +            MemOp memop;
>              TCGv eight;
>              int i;
> 
> diff --git a/target/tilegx/translate.c b/target/tilegx/translate.c
> index c46a4ab..68dd4aa 100644
> --- a/target/tilegx/translate.c
> +++ b/target/tilegx/translate.c
> @@ -290,7 +290,7 @@ static void gen_cmul2(TCGv tdest, TCGv tsrca, TCGv tsrcb, int sh, int rd)
>  }
> 
>  static TileExcp gen_st_opcode(DisasContext *dc, unsigned dest, unsigned srca,
> -                              unsigned srcb, TCGMemOp memop, const char *name)
> +                              unsigned srcb, MemOp memop, const char *name)
>  {
>      if (dest) {
>          return TILEGX_EXCP_OPCODE_UNKNOWN;
> @@ -305,7 +305,7 @@ static TileExcp gen_st_opcode(DisasContext *dc, unsigned dest, unsigned srca,
>  }
> 
>  static TileExcp gen_st_add_opcode(DisasContext *dc, unsigned srca, unsigned srcb,
> -                                  int imm, TCGMemOp memop, const char *name)
> +                                  int imm, MemOp memop, const char *name)
>  {
>      TCGv tsrca = load_gr(dc, srca);
>      TCGv tsrcb = load_gr(dc, srcb);
> @@ -496,7 +496,7 @@ static TileExcp gen_rr_opcode(DisasContext *dc, unsigned opext,
>  {
>      TCGv tdest, tsrca;
>      const char *mnemonic;
> -    TCGMemOp memop;
> +    MemOp memop;
>      TileExcp ret = TILEGX_EXCP_NONE;
>      bool prefetch_nofault = false;
> 
> @@ -1478,7 +1478,7 @@ static TileExcp gen_rri_opcode(DisasContext *dc, unsigned opext,
>      TCGv tsrca = load_gr(dc, srca);
>      bool prefetch_nofault = false;
>      const char *mnemonic;
> -    TCGMemOp memop;
> +    MemOp memop;
>      int i2, i3;
>      TCGv t0;
> 
> @@ -2106,7 +2106,7 @@ static TileExcp decode_y2(DisasContext *dc, tilegx_bundle_bits bundle)
>      unsigned srca = get_SrcA_Y2(bundle);
>      unsigned srcbdest = get_SrcBDest_Y2(bundle);
>      const char *mnemonic;
> -    TCGMemOp memop;
> +    MemOp memop;
>      bool prefetch_nofault = false;
> 
>      switch (OEY2(opc, mode)) {
> diff --git a/target/tricore/translate.c b/target/tricore/translate.c
> index dc2a65f..87a5f50 100644
> --- a/target/tricore/translate.c
> +++ b/target/tricore/translate.c
> @@ -227,7 +227,7 @@ static inline void generate_trap(DisasContext *ctx, int class, int tin);
>  /* Functions for load/save to/from memory */
> 
>  static inline void gen_offset_ld(DisasContext *ctx, TCGv r1, TCGv r2,
> -                                 int16_t con, TCGMemOp mop)
> +                                 int16_t con, MemOp mop)
>  {
>      TCGv temp = tcg_temp_new();
>      tcg_gen_addi_tl(temp, r2, con);
> @@ -236,7 +236,7 @@ static inline void gen_offset_ld(DisasContext *ctx, TCGv r1, TCGv r2,
>  }
> 
>  static inline void gen_offset_st(DisasContext *ctx, TCGv r1, TCGv r2,
> -                                 int16_t con, TCGMemOp mop)
> +                                 int16_t con, MemOp mop)
>  {
>      TCGv temp = tcg_temp_new();
>      tcg_gen_addi_tl(temp, r2, con);
> @@ -284,7 +284,7 @@ static void gen_offset_ld_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
>  }
> 
>  static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
> -                           TCGMemOp mop)
> +                           MemOp mop)
>  {
>      TCGv temp = tcg_temp_new();
>      tcg_gen_addi_tl(temp, r2, off);
> @@ -294,7 +294,7 @@ static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
>  }
> 
>  static void gen_ld_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
> -                           TCGMemOp mop)
> +                           MemOp mop)
>  {
>      TCGv temp = tcg_temp_new();
>      tcg_gen_addi_tl(temp, r2, off);
> diff --git a/tcg/README b/tcg/README
> index 21fcdf7..b4382fa 100644
> --- a/tcg/README
> +++ b/tcg/README
> @@ -512,7 +512,7 @@ Both t0 and t1 may be split into little-endian ordered pairs of registers
>  if dealing with 64-bit quantities on a 32-bit host.
> 
>  The memidx selects the qemu tlb index to use (e.g. user or kernel access).
> -The flags are the TCGMemOp bits, selecting the sign, width, and endianness
> +The flags are the MemOp bits, selecting the sign, width, and endianness
>  of the memory access.
> 
>  For a 32-bit host, qemu_ld/st_i64 is guaranteed to only be used with a
> diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c
> index 0713448..3f92101 100644
> --- a/tcg/aarch64/tcg-target.inc.c
> +++ b/tcg/aarch64/tcg-target.inc.c
> @@ -1423,7 +1423,7 @@ static inline void tcg_out_rev16(TCGContext *s, TCGReg rd, TCGReg rn)
>      tcg_out_insn(s, 3507, REV16, TCG_TYPE_I32, rd, rn);
>  }
> 
> -static inline void tcg_out_sxt(TCGContext *s, TCGType ext, TCGMemOp s_bits,
> +static inline void tcg_out_sxt(TCGContext *s, TCGType ext, MemOp s_bits,
>                                 TCGReg rd, TCGReg rn)
>  {
>      /* Using ALIASes SXTB, SXTH, SXTW, of SBFM Xd, Xn, #0, #7|15|31 */
> @@ -1431,7 +1431,7 @@ static inline void tcg_out_sxt(TCGContext *s, TCGType ext, TCGMemOp s_bits,
>      tcg_out_sbfm(s, ext, rd, rn, 0, bits);
>  }
> 
> -static inline void tcg_out_uxt(TCGContext *s, TCGMemOp s_bits,
> +static inline void tcg_out_uxt(TCGContext *s, MemOp s_bits,
>                                 TCGReg rd, TCGReg rn)
>  {
>      /* Using ALIASes UXTB, UXTH of UBFM Wd, Wn, #0, #7|15 */
> @@ -1580,8 +1580,8 @@ static inline void tcg_out_adr(TCGContext *s, TCGReg rd, void *target)
>  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp size = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp size = opc & MO_SIZE;
> 
>      if (!reloc_pc19(lb->label_ptr[0], s->code_ptr)) {
>          return false;
> @@ -1605,8 +1605,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp size = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp size = opc & MO_SIZE;
> 
>      if (!reloc_pc19(lb->label_ptr[0], s->code_ptr)) {
>          return false;
> @@ -1649,7 +1649,7 @@ QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) != 8);
>     slow path for the failure case, which will be patched later when finalizing
>     the slow path. Generated code returns the host addend in X1,
>     clobbers X0,X2,X3,TMP. */
> -static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, TCGMemOp opc,
> +static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, MemOp opc,
>                               tcg_insn_unit **label_ptr, int mem_index,
>                               bool is_read)
>  {
> @@ -1709,11 +1709,11 @@ static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, TCGMemOp opc,
> 
>  #endif /* CONFIG_SOFTMMU */
> 
> -static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp memop, TCGType ext,
> +static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp memop, TCGType ext,
>                                     TCGReg data_r, TCGReg addr_r,
>                                     TCGType otype, TCGReg off_r)
>  {
> -    const TCGMemOp bswap = memop & MO_BSWAP;
> +    const MemOp bswap = memop & MO_BSWAP;
> 
>      switch (memop & MO_SSIZE) {
>      case MO_UB:
> @@ -1765,11 +1765,11 @@ static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp memop, TCGType ext,
>      }
>  }
> 
> -static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp memop,
> +static void tcg_out_qemu_st_direct(TCGContext *s, MemOp memop,
>                                     TCGReg data_r, TCGReg addr_r,
>                                     TCGType otype, TCGReg off_r)
>  {
> -    const TCGMemOp bswap = memop & MO_BSWAP;
> +    const MemOp bswap = memop & MO_BSWAP;
> 
>      switch (memop & MO_SIZE) {
>      case MO_8:
> @@ -1804,7 +1804,7 @@ static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp memop,
>  static void tcg_out_qemu_ld(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
>                              TCGMemOpIdx oi, TCGType ext)
>  {
> -    TCGMemOp memop = get_memop(oi);
> +    MemOp memop = get_memop(oi);
>      const TCGType otype = TARGET_LONG_BITS == 64 ? TCG_TYPE_I64 : TCG_TYPE_I32;
>  #ifdef CONFIG_SOFTMMU
>      unsigned mem_index = get_mmuidx(oi);
> @@ -1829,7 +1829,7 @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
>  static void tcg_out_qemu_st(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
>                              TCGMemOpIdx oi)
>  {
> -    TCGMemOp memop = get_memop(oi);
> +    MemOp memop = get_memop(oi);
>      const TCGType otype = TARGET_LONG_BITS == 64 ? TCG_TYPE_I64 : TCG_TYPE_I32;
>  #ifdef CONFIG_SOFTMMU
>      unsigned mem_index = get_mmuidx(oi);
> diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
> index ece88dc..94d80d7 100644
> --- a/tcg/arm/tcg-target.inc.c
> +++ b/tcg/arm/tcg-target.inc.c
> @@ -1233,7 +1233,7 @@ QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) != 4);
>     containing the addend of the tlb entry.  Clobbers R0, R1, R2, TMP.  */
> 
>  static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi,
> -                               TCGMemOp opc, int mem_index, bool is_load)
> +                               MemOp opc, int mem_index, bool is_load)
>  {
>      int cmp_off = (is_load ? offsetof(CPUTLBEntry, addr_read)
>                     : offsetof(CPUTLBEntry, addr_write));
> @@ -1348,7 +1348,7 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGReg argreg, datalo, datahi;
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      void *func;
> 
>      if (!reloc_pc24(lb->label_ptr[0], s->code_ptr)) {
> @@ -1412,7 +1412,7 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGReg argreg, datalo, datahi;
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
> 
>      if (!reloc_pc24(lb->label_ptr[0], s->code_ptr)) {
>          return false;
> @@ -1453,11 +1453,11 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  }
>  #endif /* SOFTMMU */
> 
> -static inline void tcg_out_qemu_ld_index(TCGContext *s, TCGMemOp opc,
> +static inline void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc,
>                                           TCGReg datalo, TCGReg datahi,
>                                           TCGReg addrlo, TCGReg addend)
>  {
> -    TCGMemOp bswap = opc & MO_BSWAP;
> +    MemOp bswap = opc & MO_BSWAP;
> 
>      switch (opc & MO_SSIZE) {
>      case MO_UB:
> @@ -1514,11 +1514,11 @@ static inline void tcg_out_qemu_ld_index(TCGContext *s, TCGMemOp opc,
>      }
>  }
> 
> -static inline void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc,
> +static inline void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc,
>                                            TCGReg datalo, TCGReg datahi,
>                                            TCGReg addrlo)
>  {
> -    TCGMemOp bswap = opc & MO_BSWAP;
> +    MemOp bswap = opc & MO_BSWAP;
> 
>      switch (opc & MO_SSIZE) {
>      case MO_UB:
> @@ -1577,7 +1577,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
>  {
>      TCGReg addrlo, datalo, datahi, addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #ifdef CONFIG_SOFTMMU
>      int mem_index;
>      TCGReg addend;
> @@ -1614,11 +1614,11 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
>  #endif
>  }
> 
> -static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, TCGMemOp opc,
> +static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, MemOp opc,
>                                           TCGReg datalo, TCGReg datahi,
>                                           TCGReg addrlo, TCGReg addend)
>  {
> -    TCGMemOp bswap = opc & MO_BSWAP;
> +    MemOp bswap = opc & MO_BSWAP;
> 
>      switch (opc & MO_SIZE) {
>      case MO_8:
> @@ -1659,11 +1659,11 @@ static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, TCGMemOp opc,
>      }
>  }
> 
> -static inline void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp opc,
> +static inline void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc,
>                                            TCGReg datalo, TCGReg datahi,
>                                            TCGReg addrlo)
>  {
> -    TCGMemOp bswap = opc & MO_BSWAP;
> +    MemOp bswap = opc & MO_BSWAP;
> 
>      switch (opc & MO_SIZE) {
>      case MO_8:
> @@ -1708,7 +1708,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
>  {
>      TCGReg addrlo, datalo, datahi, addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #ifdef CONFIG_SOFTMMU
>      int mem_index;
>      TCGReg addend;
> diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
> index 6ddeebf..9d8ed97 100644
> --- a/tcg/i386/tcg-target.inc.c
> +++ b/tcg/i386/tcg-target.inc.c
> @@ -1697,7 +1697,7 @@ static void * const qemu_st_helpers[16] = {
>     First argument register is clobbered.  */
> 
>  static inline void tcg_out_tlb_load(TCGContext *s, TCGReg addrlo, TCGReg addrhi,
> -                                    int mem_index, TCGMemOp opc,
> +                                    int mem_index, MemOp opc,
>                                      tcg_insn_unit **label_ptr, int which)
>  {
>      const TCGReg r0 = TCG_REG_L0;
> @@ -1810,7 +1810,7 @@ static void add_qemu_ldst_label(TCGContext *s, bool is_ld, bool is_64,
>  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      TCGReg data_reg;
>      tcg_insn_unit **label_ptr = &l->label_ptr[0];
>      int rexw = (l->type == TCG_TYPE_I64 ? P_REXW : 0);
> @@ -1895,8 +1895,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp s_bits = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp s_bits = opc & MO_SIZE;
>      tcg_insn_unit **label_ptr = &l->label_ptr[0];
>      TCGReg retaddr;
> 
> @@ -1995,10 +1995,10 @@ static inline int setup_guest_base_seg(void)
> 
>  static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
>                                     TCGReg base, int index, intptr_t ofs,
> -                                   int seg, bool is64, TCGMemOp memop)
> +                                   int seg, bool is64, MemOp memop)
>  {
> -    const TCGMemOp real_bswap = memop & MO_BSWAP;
> -    TCGMemOp bswap = real_bswap;
> +    const MemOp real_bswap = memop & MO_BSWAP;
> +    MemOp bswap = real_bswap;
>      int rexw = is64 * P_REXW;
>      int movop = OPC_MOVL_GvEv;
> 
> @@ -2103,7 +2103,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
>      TCGReg datalo, datahi, addrlo;
>      TCGReg addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      int mem_index;
>      tcg_insn_unit *label_ptr[2];
> @@ -2137,15 +2137,15 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
> 
>  static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
>                                     TCGReg base, int index, intptr_t ofs,
> -                                   int seg, TCGMemOp memop)
> +                                   int seg, MemOp memop)
>  {
>      /* ??? Ideally we wouldn't need a scratch register.  For user-only,
>         we could perform the bswap twice to restore the original value
>         instead of moving to the scratch.  But as it is, the L constraint
>         means that TCG_REG_L0 is definitely free here.  */
>      const TCGReg scratch = TCG_REG_L0;
> -    const TCGMemOp real_bswap = memop & MO_BSWAP;
> -    TCGMemOp bswap = real_bswap;
> +    const MemOp real_bswap = memop & MO_BSWAP;
> +    MemOp bswap = real_bswap;
>      int movop = OPC_MOVL_EvGv;
> 
>      if (have_movbe && real_bswap) {
> @@ -2221,7 +2221,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
>      TCGReg datalo, datahi, addrlo;
>      TCGReg addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      int mem_index;
>      tcg_insn_unit *label_ptr[2];
> diff --git a/tcg/mips/tcg-target.inc.c b/tcg/mips/tcg-target.inc.c
> index 41bff32..5442167 100644
> --- a/tcg/mips/tcg-target.inc.c
> +++ b/tcg/mips/tcg-target.inc.c
> @@ -1215,7 +1215,7 @@ static void tcg_out_tlb_load(TCGContext *s, TCGReg base, TCGReg addrl,
>                               TCGReg addrh, TCGMemOpIdx oi,
>                               tcg_insn_unit *label_ptr[2], bool is_load)
>  {
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      unsigned s_bits = opc & MO_SIZE;
>      unsigned a_bits = get_alignment_bits(opc);
>      int mem_index = get_mmuidx(oi);
> @@ -1313,7 +1313,7 @@ static void add_qemu_ldst_label(TCGContext *s, int is_ld, TCGMemOpIdx oi,
>  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      TCGReg v0;
>      int i;
> 
> @@ -1363,8 +1363,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp s_bits = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp s_bits = opc & MO_SIZE;
>      int i;
> 
>      /* resolve label address */
> @@ -1413,7 +1413,7 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  #endif
> 
>  static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg lo, TCGReg hi,
> -                                   TCGReg base, TCGMemOp opc, bool is_64)
> +                                   TCGReg base, MemOp opc, bool is_64)
>  {
>      switch (opc & (MO_SSIZE | MO_BSWAP)) {
>      case MO_UB:
> @@ -1521,7 +1521,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg addr_regl, addr_regh __attribute__((unused));
>      TCGReg data_regl, data_regh;
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      tcg_insn_unit *label_ptr[2];
>  #endif
> @@ -1558,7 +1558,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
>  }
> 
>  static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg lo, TCGReg hi,
> -                                   TCGReg base, TCGMemOp opc)
> +                                   TCGReg base, MemOp opc)
>  {
>      /* Don't clutter the code below with checks to avoid bswapping ZERO.  */
>      if ((lo | hi) == 0) {
> @@ -1624,7 +1624,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg addr_regl, addr_regh __attribute__((unused));
>      TCGReg data_regl, data_regh;
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      tcg_insn_unit *label_ptr[2];
>  #endif
> diff --git a/tcg/optimize.c b/tcg/optimize.c
> index d2424de..a89ffda 100644
> --- a/tcg/optimize.c
> +++ b/tcg/optimize.c
> @@ -1014,7 +1014,7 @@ void tcg_optimize(TCGContext *s)
>          CASE_OP_32_64(qemu_ld):
>              {
>                  TCGMemOpIdx oi = op->args[nb_oargs + nb_iargs];
> -                TCGMemOp mop = get_memop(oi);
> +                MemOp mop = get_memop(oi);
>                  if (!(mop & MO_SIGN)) {
>                      mask = (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
>                  }
> diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
> index 852b894..815edac 100644
> --- a/tcg/ppc/tcg-target.inc.c
> +++ b/tcg/ppc/tcg-target.inc.c
> @@ -1506,7 +1506,7 @@ QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -32768);
>     in CR7, loads the addend of the TLB into R3, and returns the register
>     containing the guest address (zero-extended into R4).  Clobbers R0 and R2. */
> 
> -static TCGReg tcg_out_tlb_read(TCGContext *s, TCGMemOp opc,
> +static TCGReg tcg_out_tlb_read(TCGContext *s, MemOp opc,
>                                 TCGReg addrlo, TCGReg addrhi,
>                                 int mem_index, bool is_read)
>  {
> @@ -1633,7 +1633,7 @@ static void add_qemu_ldst_label(TCGContext *s, bool is_ld, TCGMemOpIdx oi,
>  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      TCGReg hi, lo, arg = TCG_REG_R3;
> 
>      if (!reloc_pc14(lb->label_ptr[0], s->code_ptr)) {
> @@ -1680,8 +1680,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>  {
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp s_bits = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp s_bits = opc & MO_SIZE;
>      TCGReg hi, lo, arg = TCG_REG_R3;
> 
>      if (!reloc_pc14(lb->label_ptr[0], s->code_ptr)) {
> @@ -1744,7 +1744,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg datalo, datahi, addrlo, rbase;
>      TCGReg addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc, s_bits;
> +    MemOp opc, s_bits;
>  #ifdef CONFIG_SOFTMMU
>      int mem_index;
>      tcg_insn_unit *label_ptr;
> @@ -1819,7 +1819,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg datalo, datahi, addrlo, rbase;
>      TCGReg addrhi __attribute__((unused));
>      TCGMemOpIdx oi;
> -    TCGMemOp opc, s_bits;
> +    MemOp opc, s_bits;
>  #ifdef CONFIG_SOFTMMU
>      int mem_index;
>      tcg_insn_unit *label_ptr;
> diff --git a/tcg/riscv/tcg-target.inc.c b/tcg/riscv/tcg-target.inc.c
> index 3e76bf5..7018509 100644
> --- a/tcg/riscv/tcg-target.inc.c
> +++ b/tcg/riscv/tcg-target.inc.c
> @@ -970,7 +970,7 @@ static void tcg_out_tlb_load(TCGContext *s, TCGReg addrl,
>                               TCGReg addrh, TCGMemOpIdx oi,
>                               tcg_insn_unit **label_ptr, bool is_load)
>  {
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      unsigned s_bits = opc & MO_SIZE;
>      unsigned a_bits = get_alignment_bits(opc);
>      tcg_target_long compare_mask;
> @@ -1044,7 +1044,7 @@ static void add_qemu_ldst_label(TCGContext *s, int is_ld, TCGMemOpIdx oi,
>  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>      TCGReg a0 = tcg_target_call_iarg_regs[0];
>      TCGReg a1 = tcg_target_call_iarg_regs[1];
>      TCGReg a2 = tcg_target_call_iarg_regs[2];
> @@ -1077,8 +1077,8 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  {
>      TCGMemOpIdx oi = l->oi;
> -    TCGMemOp opc = get_memop(oi);
> -    TCGMemOp s_bits = opc & MO_SIZE;
> +    MemOp opc = get_memop(oi);
> +    MemOp s_bits = opc & MO_SIZE;
>      TCGReg a0 = tcg_target_call_iarg_regs[0];
>      TCGReg a1 = tcg_target_call_iarg_regs[1];
>      TCGReg a2 = tcg_target_call_iarg_regs[2];
> @@ -1121,9 +1121,9 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
>  #endif /* CONFIG_SOFTMMU */
> 
>  static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg lo, TCGReg hi,
> -                                   TCGReg base, TCGMemOp opc, bool is_64)
> +                                   TCGReg base, MemOp opc, bool is_64)
>  {
> -    const TCGMemOp bswap = opc & MO_BSWAP;
> +    const MemOp bswap = opc & MO_BSWAP;
> 
>      /* We don't yet handle byteswapping, assert */
>      g_assert(!bswap);
> @@ -1172,7 +1172,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg addr_regl, addr_regh __attribute__((unused));
>      TCGReg data_regl, data_regh;
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      tcg_insn_unit *label_ptr[1];
>  #endif
> @@ -1208,9 +1208,9 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
>  }
> 
>  static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg lo, TCGReg hi,
> -                                   TCGReg base, TCGMemOp opc)
> +                                   TCGReg base, MemOp opc)
>  {
> -    const TCGMemOp bswap = opc & MO_BSWAP;
> +    const MemOp bswap = opc & MO_BSWAP;
> 
>      /* We don't yet handle byteswapping, assert */
>      g_assert(!bswap);
> @@ -1243,7 +1243,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
>      TCGReg addr_regl, addr_regh __attribute__((unused));
>      TCGReg data_regl, data_regh;
>      TCGMemOpIdx oi;
> -    TCGMemOp opc;
> +    MemOp opc;
>  #if defined(CONFIG_SOFTMMU)
>      tcg_insn_unit *label_ptr[1];
>  #endif
> diff --git a/tcg/s390/tcg-target.inc.c b/tcg/s390/tcg-target.inc.c
> index fe42939..8aaa4ce 100644
> --- a/tcg/s390/tcg-target.inc.c
> +++ b/tcg/s390/tcg-target.inc.c
> @@ -1430,7 +1430,7 @@ static void tcg_out_call(TCGContext *s, tcg_insn_unit *dest)
>      }
>  }
> 
> -static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
> +static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc, TCGReg data,
>                                     TCGReg base, TCGReg index, int disp)
>  {
>      switch (opc & (MO_SSIZE | MO_BSWAP)) {
> @@ -1489,7 +1489,7 @@ static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
>      }
>  }
> 
> -static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
> +static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg data,
>                                     TCGReg base, TCGReg index, int disp)
>  {
>      switch (opc & (MO_SIZE | MO_BSWAP)) {
> @@ -1544,7 +1544,7 @@ QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -(1 << 19));
> 
>  /* Load and compare a TLB entry, leaving the flags set.  Loads the TLB
>     addend into R2.  Returns a register with the santitized guest address.  */
> -static TCGReg tcg_out_tlb_read(TCGContext* s, TCGReg addr_reg, TCGMemOp opc,
> +static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, MemOp opc,
>                                 int mem_index, bool is_ld)
>  {
>      unsigned s_bits = opc & MO_SIZE;
> @@ -1614,7 +1614,7 @@ static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>      TCGReg addr_reg = lb->addrlo_reg;
>      TCGReg data_reg = lb->datalo_reg;
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
> 
>      if (!patch_reloc(lb->label_ptr[0], R_390_PC16DBL,
>                       (intptr_t)s->code_ptr, 2)) {
> @@ -1639,7 +1639,7 @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
>      TCGReg addr_reg = lb->addrlo_reg;
>      TCGReg data_reg = lb->datalo_reg;
>      TCGMemOpIdx oi = lb->oi;
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
> 
>      if (!patch_reloc(lb->label_ptr[0], R_390_PC16DBL,
>                       (intptr_t)s->code_ptr, 2)) {
> @@ -1694,7 +1694,7 @@ static void tcg_prepare_user_ldst(TCGContext *s, TCGReg *addr_reg,
>  static void tcg_out_qemu_ld(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
>                              TCGMemOpIdx oi)
>  {
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>  #ifdef CONFIG_SOFTMMU
>      unsigned mem_index = get_mmuidx(oi);
>      tcg_insn_unit *label_ptr;
> @@ -1721,7 +1721,7 @@ static void tcg_out_qemu_ld(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
>  static void tcg_out_qemu_st(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
>                              TCGMemOpIdx oi)
>  {
> -    TCGMemOp opc = get_memop(oi);
> +    MemOp opc = get_memop(oi);
>  #ifdef CONFIG_SOFTMMU
>      unsigned mem_index = get_mmuidx(oi);
>      tcg_insn_unit *label_ptr;
> diff --git a/tcg/sparc/tcg-target.inc.c b/tcg/sparc/tcg-target.inc.c
> index 10b1cea..d7986cd 100644
> --- a/tcg/sparc/tcg-target.inc.c
> +++ b/tcg/sparc/tcg-target.inc.c
> @@ -1081,7 +1081,7 @@ QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -(1 << 12));
>     is in the returned register, maybe %o0.  The TLB addend is in %o1.  */
> 
>  static TCGReg tcg_out_tlb_load(TCGContext *s, TCGReg addr, int mem_index,
> -                               TCGMemOp opc, int which)
> +                               MemOp opc, int which)
>  {
>      int fast_off = TLB_MASK_TABLE_OFS(mem_index);
>      int mask_off = fast_off + offsetof(CPUTLBDescFast, mask);
> @@ -1164,7 +1164,7 @@ static const int qemu_st_opc[16] = {
>  static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr,
>                              TCGMemOpIdx oi, bool is_64)
>  {
> -    TCGMemOp memop = get_memop(oi);
> +    MemOp memop = get_memop(oi);
>  #ifdef CONFIG_SOFTMMU
>      unsigned memi = get_mmuidx(oi);
>      TCGReg addrz, param;
> @@ -1246,7 +1246,7 @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr,
>  static void tcg_out_qemu_st(TCGContext *s, TCGReg data, TCGReg addr,
>                              TCGMemOpIdx oi)
>  {
> -    TCGMemOp memop = get_memop(oi);
> +    MemOp memop = get_memop(oi);
>  #ifdef CONFIG_SOFTMMU
>      unsigned memi = get_mmuidx(oi);
>      TCGReg addrz, param;
> diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
> index 587d092..e87c327 100644
> --- a/tcg/tcg-op.c
> +++ b/tcg/tcg-op.c
> @@ -2714,7 +2714,7 @@ void tcg_gen_lookup_and_goto_ptr(void)
>      }
>  }
> 
> -static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
> +static inline MemOp tcg_canonicalize_memop(MemOp op, bool is64, bool st)
>  {
>      /* Trigger the asserts within as early as possible.  */
>      (void)get_alignment_bits(op);
> @@ -2743,7 +2743,7 @@ static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
>  }
> 
>  static void gen_ldst_i32(TCGOpcode opc, TCGv_i32 val, TCGv addr,
> -                         TCGMemOp memop, TCGArg idx)
> +                         MemOp memop, TCGArg idx)
>  {
>      TCGMemOpIdx oi = make_memop_idx(memop, idx);
>  #if TARGET_LONG_BITS == 32
> @@ -2758,7 +2758,7 @@ static void gen_ldst_i32(TCGOpcode opc, TCGv_i32 val, TCGv addr,
>  }
> 
>  static void gen_ldst_i64(TCGOpcode opc, TCGv_i64 val, TCGv addr,
> -                         TCGMemOp memop, TCGArg idx)
> +                         MemOp memop, TCGArg idx)
>  {
>      TCGMemOpIdx oi = make_memop_idx(memop, idx);
>  #if TARGET_LONG_BITS == 32
> @@ -2788,9 +2788,9 @@ static void tcg_gen_req_mo(TCGBar type)
>      }
>  }
> 
> -void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
> +void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
>  {
> -    TCGMemOp orig_memop;
> +    MemOp orig_memop;
> 
>      tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
>      memop = tcg_canonicalize_memop(memop, 0, 0);
> @@ -2825,7 +2825,7 @@ void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
>      }
>  }
> 
> -void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
> +void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
>  {
>      TCGv_i32 swap = NULL;
> 
> @@ -2858,9 +2858,9 @@ void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
>      }
>  }
> 
> -void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
> +void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
>  {
> -    TCGMemOp orig_memop;
> +    MemOp orig_memop;
> 
>      if (TCG_TARGET_REG_BITS == 32 && (memop & MO_SIZE) < MO_64) {
>          tcg_gen_qemu_ld_i32(TCGV_LOW(val), addr, idx, memop);
> @@ -2911,7 +2911,7 @@ void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
>      }
>  }
> 
> -void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
> +void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
>  {
>      TCGv_i64 swap = NULL;
> 
> @@ -2953,7 +2953,7 @@ void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
>      }
>  }
> 
> -static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, TCGMemOp opc)
> +static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, MemOp opc)
>  {
>      switch (opc & MO_SSIZE) {
>      case MO_SB:
> @@ -2974,7 +2974,7 @@ static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, TCGMemOp opc)
>      }
>  }
> 
> -static void tcg_gen_ext_i64(TCGv_i64 ret, TCGv_i64 val, TCGMemOp opc)
> +static void tcg_gen_ext_i64(TCGv_i64 ret, TCGv_i64 val, MemOp opc)
>  {
>      switch (opc & MO_SSIZE) {
>      case MO_SB:
> @@ -3034,7 +3034,7 @@ static void * const table_cmpxchg[16] = {
>  };
> 
>  void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv addr, TCGv_i32 cmpv,
> -                                TCGv_i32 newv, TCGArg idx, TCGMemOp memop)
> +                                TCGv_i32 newv, TCGArg idx, MemOp memop)
>  {
>      memop = tcg_canonicalize_memop(memop, 0, 0);
> 
> @@ -3078,7 +3078,7 @@ void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv addr, TCGv_i32 cmpv,
>  }
> 
>  void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv addr, TCGv_i64 cmpv,
> -                                TCGv_i64 newv, TCGArg idx, TCGMemOp memop)
> +                                TCGv_i64 newv, TCGArg idx, MemOp memop)
>  {
>      memop = tcg_canonicalize_memop(memop, 1, 0);
> 
> @@ -3142,7 +3142,7 @@ void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv addr, TCGv_i64 cmpv,
>  }
> 
>  static void do_nonatomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
> -                                TCGArg idx, TCGMemOp memop, bool new_val,
> +                                TCGArg idx, MemOp memop, bool new_val,
>                                  void (*gen)(TCGv_i32, TCGv_i32, TCGv_i32))
>  {
>      TCGv_i32 t1 = tcg_temp_new_i32();
> @@ -3160,7 +3160,7 @@ static void do_nonatomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
>  }
> 
>  static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
> -                             TCGArg idx, TCGMemOp memop, void * const table[])
> +                             TCGArg idx, MemOp memop, void * const table[])
>  {
>      gen_atomic_op_i32 gen;
> 
> @@ -3185,7 +3185,7 @@ static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
>  }
> 
>  static void do_nonatomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
> -                                TCGArg idx, TCGMemOp memop, bool new_val,
> +                                TCGArg idx, MemOp memop, bool new_val,
>                                  void (*gen)(TCGv_i64, TCGv_i64, TCGv_i64))
>  {
>      TCGv_i64 t1 = tcg_temp_new_i64();
> @@ -3203,7 +3203,7 @@ static void do_nonatomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
>  }
> 
>  static void do_atomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
> -                             TCGArg idx, TCGMemOp memop, void * const table[])
> +                             TCGArg idx, MemOp memop, void * const table[])
>  {
>      memop = tcg_canonicalize_memop(memop, 1, 0);
> 
> @@ -3257,7 +3257,7 @@ static void * const table_##NAME[16] = {                                \
>      WITH_ATOMIC64([MO_64 | MO_BE] = gen_helper_atomic_##NAME##q_be)     \
>  };                                                                      \
>  void tcg_gen_atomic_##NAME##_i32                                        \
> -    (TCGv_i32 ret, TCGv addr, TCGv_i32 val, TCGArg idx, TCGMemOp memop) \
> +    (TCGv_i32 ret, TCGv addr, TCGv_i32 val, TCGArg idx, MemOp memop)    \
>  {                                                                       \
>      if (tcg_ctx->tb_cflags & CF_PARALLEL) {                             \
>          do_atomic_op_i32(ret, addr, val, idx, memop, table_##NAME);     \
> @@ -3267,7 +3267,7 @@ void tcg_gen_atomic_##NAME##_i32                                        \
>      }                                                                   \
>  }                                                                       \
>  void tcg_gen_atomic_##NAME##_i64                                        \
> -    (TCGv_i64 ret, TCGv addr, TCGv_i64 val, TCGArg idx, TCGMemOp memop) \
> +    (TCGv_i64 ret, TCGv addr, TCGv_i64 val, TCGArg idx, MemOp memop)    \
>  {                                                                       \
>      if (tcg_ctx->tb_cflags & CF_PARALLEL) {                             \
>          do_atomic_op_i64(ret, addr, val, idx, memop, table_##NAME);     \
> diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
> index 2d4dd5c..e9cf172 100644
> --- a/tcg/tcg-op.h
> +++ b/tcg/tcg-op.h
> @@ -851,10 +851,10 @@ void tcg_gen_lookup_and_goto_ptr(void);
>  #define tcg_gen_qemu_st_tl tcg_gen_qemu_st_i64
>  #endif
> 
> -void tcg_gen_qemu_ld_i32(TCGv_i32, TCGv, TCGArg, TCGMemOp);
> -void tcg_gen_qemu_st_i32(TCGv_i32, TCGv, TCGArg, TCGMemOp);
> -void tcg_gen_qemu_ld_i64(TCGv_i64, TCGv, TCGArg, TCGMemOp);
> -void tcg_gen_qemu_st_i64(TCGv_i64, TCGv, TCGArg, TCGMemOp);
> +void tcg_gen_qemu_ld_i32(TCGv_i32, TCGv, TCGArg, MemOp);
> +void tcg_gen_qemu_st_i32(TCGv_i32, TCGv, TCGArg, MemOp);
> +void tcg_gen_qemu_ld_i64(TCGv_i64, TCGv, TCGArg, MemOp);
> +void tcg_gen_qemu_st_i64(TCGv_i64, TCGv, TCGArg, MemOp);
> 
>  static inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
>  {
> @@ -912,46 +912,46 @@ static inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
>  }
> 
>  void tcg_gen_atomic_cmpxchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGv_i32,
> -                                TCGArg, TCGMemOp);
> +                                TCGArg, MemOp);
>  void tcg_gen_atomic_cmpxchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGv_i64,
> -                                TCGArg, TCGMemOp);
> -
> -void tcg_gen_atomic_xchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_xchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -
> -void tcg_gen_atomic_fetch_add_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_add_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_and_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_and_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_or_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_or_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_xor_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_xor_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_smin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_smin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_umin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_umin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_smax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_smax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_umax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_fetch_umax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -
> -void tcg_gen_atomic_add_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_add_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_and_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_and_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_or_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_or_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_xor_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_xor_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_smin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_smin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_umin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_umin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_smax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_smax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_umax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
> -void tcg_gen_atomic_umax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
> +                                TCGArg, MemOp);
> +
> +void tcg_gen_atomic_xchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_xchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +
> +void tcg_gen_atomic_fetch_add_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_add_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_and_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_and_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_or_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_or_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_xor_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_xor_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_smin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_smin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_umin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_umin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_smax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_smax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_umax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_fetch_umax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +
> +void tcg_gen_atomic_add_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_add_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_and_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_and_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_or_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_or_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_xor_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_xor_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_smin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_smin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_umin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_umin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_smax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_smax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> +void tcg_gen_atomic_umax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
> +void tcg_gen_atomic_umax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
> 
>  void tcg_gen_mov_vec(TCGv_vec, TCGv_vec);
>  void tcg_gen_dup_i32_vec(unsigned vece, TCGv_vec, TCGv_i32);
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index be2c33c..aa9931f 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -2056,7 +2056,7 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs)
>              case INDEX_op_qemu_st_i64:
>                  {
>                      TCGMemOpIdx oi = op->args[k++];
> -                    TCGMemOp op = get_memop(oi);
> +                    MemOp op = get_memop(oi);
>                      unsigned ix = get_mmuidx(oi);
> 
>                      if (op & ~(MO_AMASK | MO_BSWAP | MO_SSIZE)) {
> diff --git a/tcg/tcg.h b/tcg/tcg.h
> index b411e17..a37181c 100644
> --- a/tcg/tcg.h
> +++ b/tcg/tcg.h
> @@ -26,6 +26,7 @@
>  #define TCG_H
> 
>  #include "cpu.h"
> +#include "exec/memop.h"
>  #include "exec/tb-context.h"
>  #include "qemu/bitops.h"
>  #include "qemu/queue.h"
> @@ -309,101 +310,13 @@ typedef enum TCGType {
>  #endif
>  } TCGType;
> 
> -/* Constants for qemu_ld and qemu_st for the Memory Operation field.  */
> -typedef enum TCGMemOp {
> -    MO_8     = 0,
> -    MO_16    = 1,
> -    MO_32    = 2,
> -    MO_64    = 3,
> -    MO_SIZE  = 3,   /* Mask for the above.  */
> -
> -    MO_SIGN  = 4,   /* Sign-extended, otherwise zero-extended.  */
> -
> -    MO_BSWAP = 8,   /* Host reverse endian.  */
> -#ifdef HOST_WORDS_BIGENDIAN
> -    MO_LE    = MO_BSWAP,
> -    MO_BE    = 0,
> -#else
> -    MO_LE    = 0,
> -    MO_BE    = MO_BSWAP,
> -#endif
> -#ifdef TARGET_WORDS_BIGENDIAN
> -    MO_TE    = MO_BE,
> -#else
> -    MO_TE    = MO_LE,
> -#endif
> -
> -    /* MO_UNALN accesses are never checked for alignment.
> -     * MO_ALIGN accesses will result in a call to the CPU's
> -     * do_unaligned_access hook if the guest address is not aligned.
> -     * The default depends on whether the target CPU defines ALIGNED_ONLY.
> -     *
> -     * Some architectures (e.g. ARMv8) need the address which is aligned
> -     * to a size more than the size of the memory access.
> -     * Some architectures (e.g. SPARCv9) need an address which is aligned,
> -     * but less strictly than the natural alignment.
> -     *
> -     * MO_ALIGN supposes the alignment size is the size of a memory access.
> -     *
> -     * There are three options:
> -     * - unaligned access permitted (MO_UNALN).
> -     * - an alignment to the size of an access (MO_ALIGN);
> -     * - an alignment to a specified size, which may be more or less than
> -     *   the access size (MO_ALIGN_x where 'x' is a size in bytes);
> -     */
> -    MO_ASHIFT = 4,
> -    MO_AMASK = 7 << MO_ASHIFT,
> -#ifdef ALIGNED_ONLY
> -    MO_ALIGN = 0,
> -    MO_UNALN = MO_AMASK,
> -#else
> -    MO_ALIGN = MO_AMASK,
> -    MO_UNALN = 0,
> -#endif
> -    MO_ALIGN_2  = 1 << MO_ASHIFT,
> -    MO_ALIGN_4  = 2 << MO_ASHIFT,
> -    MO_ALIGN_8  = 3 << MO_ASHIFT,
> -    MO_ALIGN_16 = 4 << MO_ASHIFT,
> -    MO_ALIGN_32 = 5 << MO_ASHIFT,
> -    MO_ALIGN_64 = 6 << MO_ASHIFT,
> -
> -    /* Combinations of the above, for ease of use.  */
> -    MO_UB    = MO_8,
> -    MO_UW    = MO_16,
> -    MO_UL    = MO_32,
> -    MO_SB    = MO_SIGN | MO_8,
> -    MO_SW    = MO_SIGN | MO_16,
> -    MO_SL    = MO_SIGN | MO_32,
> -    MO_Q     = MO_64,
> -
> -    MO_LEUW  = MO_LE | MO_UW,
> -    MO_LEUL  = MO_LE | MO_UL,
> -    MO_LESW  = MO_LE | MO_SW,
> -    MO_LESL  = MO_LE | MO_SL,
> -    MO_LEQ   = MO_LE | MO_Q,
> -
> -    MO_BEUW  = MO_BE | MO_UW,
> -    MO_BEUL  = MO_BE | MO_UL,
> -    MO_BESW  = MO_BE | MO_SW,
> -    MO_BESL  = MO_BE | MO_SL,
> -    MO_BEQ   = MO_BE | MO_Q,
> -
> -    MO_TEUW  = MO_TE | MO_UW,
> -    MO_TEUL  = MO_TE | MO_UL,
> -    MO_TESW  = MO_TE | MO_SW,
> -    MO_TESL  = MO_TE | MO_SL,
> -    MO_TEQ   = MO_TE | MO_Q,
> -
> -    MO_SSIZE = MO_SIZE | MO_SIGN,
> -} TCGMemOp;
> -
>  /**
>   * get_alignment_bits
> - * @memop: TCGMemOp value
> + * @memop: MemOp value
>   *
>   * Extract the alignment size from the memop.
>   */
> -static inline unsigned get_alignment_bits(TCGMemOp memop)
> +static inline unsigned get_alignment_bits(MemOp memop)
>  {
>      unsigned a = memop & MO_AMASK;
> 
> @@ -1184,7 +1097,7 @@ static inline size_t tcg_current_code_size(TCGContext *s)
>      return tcg_ptr_byte_diff(s->code_ptr, s->code_buf);
>  }
> 
> -/* Combine the TCGMemOp and mmu_idx parameters into a single value.  */
> +/* Combine the MemOp and mmu_idx parameters into a single value.  */
>  typedef uint32_t TCGMemOpIdx;
> 
>  /**
> @@ -1194,7 +1107,7 @@ typedef uint32_t TCGMemOpIdx;
>   *
>   * Encode these values into a single parameter.
>   */
> -static inline TCGMemOpIdx make_memop_idx(TCGMemOp op, unsigned idx)
> +static inline TCGMemOpIdx make_memop_idx(MemOp op, unsigned idx)
>  {
>      tcg_debug_assert(idx <= 15);
>      return (op << 4) | idx;
> @@ -1206,7 +1119,7 @@ static inline TCGMemOpIdx make_memop_idx(TCGMemOp op, unsigned idx)
>   *
>   * Extract the memory operation from the combined value.
>   */
> -static inline TCGMemOp get_memop(TCGMemOpIdx oi)
> +static inline MemOp get_memop(TCGMemOpIdx oi)
>  {
>      return oi >> 4;
>  }
> diff --git a/trace/mem-internal.h b/trace/mem-internal.h
> index f6efaf6..3444fbc 100644
> --- a/trace/mem-internal.h
> +++ b/trace/mem-internal.h
> @@ -16,7 +16,7 @@
>  #define TRACE_MEM_ST (1ULL << 5)    /* store (y/n) */
> 
>  static inline uint8_t trace_mem_build_info(
> -    int size_shift, bool sign_extend, TCGMemOp endianness, bool store)
> +    int size_shift, bool sign_extend, MemOp endianness, bool store)
>  {
>      uint8_t res;
> 
> @@ -33,7 +33,7 @@ static inline uint8_t trace_mem_build_info(
>      return res;
>  }
> 
> -static inline uint8_t trace_mem_get_info(TCGMemOp op, bool store)
> +static inline uint8_t trace_mem_get_info(MemOp op, bool store)
>  {
>      return trace_mem_build_info(op & MO_SIZE, !!(op & MO_SIGN),
>                                  op & MO_BSWAP, store);
> diff --git a/trace/mem.h b/trace/mem.h
> index 2b58196..8cf213d 100644
> --- a/trace/mem.h
> +++ b/trace/mem.h
> @@ -18,7 +18,7 @@
>   *
>   * Return a value for the 'info' argument in guest memory access traces.
>   */
> -static uint8_t trace_mem_get_info(TCGMemOp op, bool store);
> +static uint8_t trace_mem_get_info(MemOp op, bool store);
> 
>  /**
>   * trace_mem_build_info:
> @@ -26,7 +26,7 @@ static uint8_t trace_mem_get_info(TCGMemOp op, bool store);
>   * Return a value for the 'info' argument in guest memory access traces.
>   */
>  static uint8_t trace_mem_build_info(int size_shift, bool sign_extend,
> -                                    TCGMemOp endianness, bool store);
> +                                    MemOp endianness, bool store);
> 
> 
>  #include "trace/mem-internal.h"
Richard Henderson July 26, 2019, 1:27 p.m. UTC | #2
On 7/25/19 11:43 PM, tony.nguyen@bt.com wrote:
> +#ifdef NEED_CPU_H
> +#ifdef ALIGNED_ONLY
> +    MO_ALIGN = 0,
> +    MO_UNALN = MO_AMASK,

You need the configure patch got TARGET_ALIGNED_ONLY that you posted separately
as patch 1 in order for this to work.

Otherwise,

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index cc9636b..3f148cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1890,6 +1890,7 @@  M: Paolo Bonzini <pbonzini@redhat.com>
 S: Supported
 F: include/exec/ioport.h
 F: ioport.c
+F: include/exec/memop.h
 F: include/exec/memory.h
 F: include/exec/ram_addr.h
 F: memory.c
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index bb9897b..523be4c 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -1133,7 +1133,7 @@  static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
     uintptr_t index = tlb_index(env, mmu_idx, addr);
     CPUTLBEntry *tlbe = tlb_entry(env, mmu_idx, addr);
     target_ulong tlb_addr = tlb_addr_write(tlbe);
-    TCGMemOp mop = get_memop(oi);
+    MemOp mop = get_memop(oi);
     int a_bits = get_alignment_bits(mop);
     int s_bits = mop & MO_SIZE;
     void *hostaddr;
diff --git a/include/exec/memop.h b/include/exec/memop.h
new file mode 100644
index 0000000..ac58066
--- /dev/null
+++ b/include/exec/memop.h
@@ -0,0 +1,109 @@ 
+/*
+ * Constants for memory operations
+ *
+ * Authors:
+ *  Richard Henderson <rth@twiddle.net>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef MEMOP_H
+#define MEMOP_H
+
+typedef enum MemOp {
+    MO_8     = 0,
+    MO_16    = 1,
+    MO_32    = 2,
+    MO_64    = 3,
+    MO_SIZE  = 3,   /* Mask for the above.  */
+
+    MO_SIGN  = 4,   /* Sign-extended, otherwise zero-extended.  */
+
+    MO_BSWAP = 8,   /* Host reverse endian.  */
+#ifdef HOST_WORDS_BIGENDIAN
+    MO_LE    = MO_BSWAP,
+    MO_BE    = 0,
+#else
+    MO_LE    = 0,
+    MO_BE    = MO_BSWAP,
+#endif
+#ifdef NEED_CPU_H
+#ifdef TARGET_WORDS_BIGENDIAN
+    MO_TE    = MO_BE,
+#else
+    MO_TE    = MO_LE,
+#endif
+#endif
+
+    /*
+     * MO_UNALN accesses are never checked for alignment.
+     * MO_ALIGN accesses will result in a call to the CPU's
+     * do_unaligned_access hook if the guest address is not aligned.
+     * The default depends on whether the target CPU defines ALIGNED_ONLY.
+     *
+     * Some architectures (e.g. ARMv8) need the address which is aligned
+     * to a size more than the size of the memory access.
+     * Some architectures (e.g. SPARCv9) need an address which is aligned,
+     * but less strictly than the natural alignment.
+     *
+     * MO_ALIGN supposes the alignment size is the size of a memory access.
+     *
+     * There are three options:
+     * - unaligned access permitted (MO_UNALN).
+     * - an alignment to the size of an access (MO_ALIGN);
+     * - an alignment to a specified size, which may be more or less than
+     *   the access size (MO_ALIGN_x where 'x' is a size in bytes);
+     */
+    MO_ASHIFT = 4,
+    MO_AMASK = 7 << MO_ASHIFT,
+#ifdef NEED_CPU_H
+#ifdef ALIGNED_ONLY
+    MO_ALIGN = 0,
+    MO_UNALN = MO_AMASK,
+#else
+    MO_ALIGN = MO_AMASK,
+    MO_UNALN = 0,
+#endif
+#endif
+    MO_ALIGN_2  = 1 << MO_ASHIFT,
+    MO_ALIGN_4  = 2 << MO_ASHIFT,
+    MO_ALIGN_8  = 3 << MO_ASHIFT,
+    MO_ALIGN_16 = 4 << MO_ASHIFT,
+    MO_ALIGN_32 = 5 << MO_ASHIFT,
+    MO_ALIGN_64 = 6 << MO_ASHIFT,
+
+    /* Combinations of the above, for ease of use.  */
+    MO_UB    = MO_8,
+    MO_UW    = MO_16,
+    MO_UL    = MO_32,
+    MO_SB    = MO_SIGN | MO_8,
+    MO_SW    = MO_SIGN | MO_16,
+    MO_SL    = MO_SIGN | MO_32,
+    MO_Q     = MO_64,
+
+    MO_LEUW  = MO_LE | MO_UW,
+    MO_LEUL  = MO_LE | MO_UL,
+    MO_LESW  = MO_LE | MO_SW,
+    MO_LESL  = MO_LE | MO_SL,
+    MO_LEQ   = MO_LE | MO_Q,
+
+    MO_BEUW  = MO_BE | MO_UW,
+    MO_BEUL  = MO_BE | MO_UL,
+    MO_BESW  = MO_BE | MO_SW,
+    MO_BESL  = MO_BE | MO_SL,
+    MO_BEQ   = MO_BE | MO_Q,
+
+#ifdef NEED_CPU_H
+    MO_TEUW  = MO_TE | MO_UW,
+    MO_TEUL  = MO_TE | MO_UL,
+    MO_TESW  = MO_TE | MO_SW,
+    MO_TESL  = MO_TE | MO_SL,
+    MO_TEQ   = MO_TE | MO_Q,
+#endif
+
+    MO_SSIZE = MO_SIZE | MO_SIGN,
+} MemOp;
+
+#endif
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
index 2c9cccf..d5d4888 100644
--- a/target/alpha/translate.c
+++ b/target/alpha/translate.c
@@ -403,7 +403,7 @@  static inline void gen_store_mem(DisasContext *ctx,

 static DisasJumpType gen_store_conditional(DisasContext *ctx, int ra, int rb,
                                            int32_t disp16, int mem_idx,
-                                           TCGMemOp op)
+                                           MemOp op)
 {
     TCGLabel *lab_fail, *lab_done;
     TCGv addr, val;
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index d323147..b6c07d6 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -85,7 +85,7 @@  typedef void NeonGenOneOpFn(TCGv_i64, TCGv_i64);
 typedef void CryptoTwoOpFn(TCGv_ptr, TCGv_ptr);
 typedef void CryptoThreeOpIntFn(TCGv_ptr, TCGv_ptr, TCGv_i32);
 typedef void CryptoThreeOpFn(TCGv_ptr, TCGv_ptr, TCGv_ptr);
-typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, TCGMemOp);
+typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, MemOp);

 /* initialize TCG globals.  */
 void a64_translate_init(void)
@@ -455,7 +455,7 @@  TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
  * Dn, Sn, Hn or Bn).
  * (Note that this is not the same mapping as for A32; see cpu.h)
  */
-static inline int fp_reg_offset(DisasContext *s, int regno, TCGMemOp size)
+static inline int fp_reg_offset(DisasContext *s, int regno, MemOp size)
 {
     return vec_reg_offset(s, regno, 0, size);
 }
@@ -871,7 +871,7 @@  static void do_gpr_ld_memidx(DisasContext *s,
                              bool iss_valid, unsigned int iss_srt,
                              bool iss_sf, bool iss_ar)
 {
-    TCGMemOp memop = s->be_data + size;
+    MemOp memop = s->be_data + size;

     g_assert(size <= 3);

@@ -948,7 +948,7 @@  static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
     TCGv_i64 tmphi;

     if (size < 4) {
-        TCGMemOp memop = s->be_data + size;
+        MemOp memop = s->be_data + size;
         tmphi = tcg_const_i64(0);
         tcg_gen_qemu_ld_i64(tmplo, tcg_addr, get_mem_index(s), memop);
     } else {
@@ -989,7 +989,7 @@  static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)

 /* Get value of an element within a vector register */
 static void read_vec_element(DisasContext *s, TCGv_i64 tcg_dest, int srcidx,
-                             int element, TCGMemOp memop)
+                             int element, MemOp memop)
 {
     int vect_off = vec_reg_offset(s, srcidx, element, memop & MO_SIZE);
     switch (memop) {
@@ -1021,7 +1021,7 @@  static void read_vec_element(DisasContext *s, TCGv_i64 tcg_dest, int srcidx,
 }

 static void read_vec_element_i32(DisasContext *s, TCGv_i32 tcg_dest, int srcidx,
-                                 int element, TCGMemOp memop)
+                                 int element, MemOp memop)
 {
     int vect_off = vec_reg_offset(s, srcidx, element, memop & MO_SIZE);
     switch (memop) {
@@ -1048,7 +1048,7 @@  static void read_vec_element_i32(DisasContext *s, TCGv_i32 tcg_dest, int srcidx,

 /* Set value of an element within a vector register */
 static void write_vec_element(DisasContext *s, TCGv_i64 tcg_src, int destidx,
-                              int element, TCGMemOp memop)
+                              int element, MemOp memop)
 {
     int vect_off = vec_reg_offset(s, destidx, element, memop & MO_SIZE);
     switch (memop) {
@@ -1070,7 +1070,7 @@  static void write_vec_element(DisasContext *s, TCGv_i64 tcg_src, int destidx,
 }

 static void write_vec_element_i32(DisasContext *s, TCGv_i32 tcg_src,
-                                  int destidx, int element, TCGMemOp memop)
+                                  int destidx, int element, MemOp memop)
 {
     int vect_off = vec_reg_offset(s, destidx, element, memop & MO_SIZE);
     switch (memop) {
@@ -1090,7 +1090,7 @@  static void write_vec_element_i32(DisasContext *s, TCGv_i32 tcg_src,

 /* Store from vector register to memory */
 static void do_vec_st(DisasContext *s, int srcidx, int element,
-                      TCGv_i64 tcg_addr, int size, TCGMemOp endian)
+                      TCGv_i64 tcg_addr, int size, MemOp endian)
 {
     TCGv_i64 tcg_tmp = tcg_temp_new_i64();

@@ -1102,7 +1102,7 @@  static void do_vec_st(DisasContext *s, int srcidx, int element,

 /* Load from memory to vector register */
 static void do_vec_ld(DisasContext *s, int destidx, int element,
-                      TCGv_i64 tcg_addr, int size, TCGMemOp endian)
+                      TCGv_i64 tcg_addr, int size, MemOp endian)
 {
     TCGv_i64 tcg_tmp = tcg_temp_new_i64();

@@ -2200,7 +2200,7 @@  static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
                                TCGv_i64 addr, int size, bool is_pair)
 {
     int idx = get_mem_index(s);
-    TCGMemOp memop = s->be_data;
+    MemOp memop = s->be_data;

     g_assert(size <= 3);
     if (is_pair) {
@@ -3286,7 +3286,7 @@  static void disas_ldst_multiple_struct(DisasContext *s, uint32_t insn)
     bool is_postidx = extract32(insn, 23, 1);
     bool is_q = extract32(insn, 30, 1);
     TCGv_i64 clean_addr, tcg_rn, tcg_ebytes;
-    TCGMemOp endian = s->be_data;
+    MemOp endian = s->be_data;

     int ebytes;   /* bytes per element */
     int elements; /* elements per vector */
@@ -5455,7 +5455,7 @@  static void disas_fp_csel(DisasContext *s, uint32_t insn)
     unsigned int mos, type, rm, cond, rn, rd;
     TCGv_i64 t_true, t_false, t_zero;
     DisasCompare64 c;
-    TCGMemOp sz;
+    MemOp sz;

     mos = extract32(insn, 29, 3);
     type = extract32(insn, 22, 2);
@@ -6267,7 +6267,7 @@  static void disas_fp_imm(DisasContext *s, uint32_t insn)
     int mos = extract32(insn, 29, 3);
     uint64_t imm;
     TCGv_i64 tcg_res;
-    TCGMemOp sz;
+    MemOp sz;

     if (mos || imm5) {
         unallocated_encoding(s);
@@ -7030,7 +7030,7 @@  static TCGv_i32 do_reduction_op(DisasContext *s, int fpopcode, int rn,
 {
     if (esize == size) {
         int element;
-        TCGMemOp msize = esize == 16 ? MO_16 : MO_32;
+        MemOp msize = esize == 16 ? MO_16 : MO_32;
         TCGv_i32 tcg_elem;

         /* We should have one register left here */
@@ -8022,7 +8022,7 @@  static void handle_vec_simd_sqshrn(DisasContext *s, bool is_scalar, bool is_q,
     int shift = (2 * esize) - immhb;
     int elements = is_scalar ? 1 : (64 / esize);
     bool round = extract32(opcode, 0, 1);
-    TCGMemOp ldop = (size + 1) | (is_u_shift ? 0 : MO_SIGN);
+    MemOp ldop = (size + 1) | (is_u_shift ? 0 : MO_SIGN);
     TCGv_i64 tcg_rn, tcg_rd, tcg_round;
     TCGv_i32 tcg_rd_narrowed;
     TCGv_i64 tcg_final;
@@ -8181,7 +8181,7 @@  static void handle_simd_qshl(DisasContext *s, bool scalar, bool is_q,
             }
         };
         NeonGenTwoOpEnvFn *genfn = fns[src_unsigned][dst_unsigned][size];
-        TCGMemOp memop = scalar ? size : MO_32;
+        MemOp memop = scalar ? size : MO_32;
         int maxpass = scalar ? 1 : is_q ? 4 : 2;

         for (pass = 0; pass < maxpass; pass++) {
@@ -8225,7 +8225,7 @@  static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
     TCGv_ptr tcg_fpst = get_fpstatus_ptr(size == MO_16);
     TCGv_i32 tcg_shift = NULL;

-    TCGMemOp mop = size | (is_signed ? MO_SIGN : 0);
+    MemOp mop = size | (is_signed ? MO_SIGN : 0);
     int pass;

     if (fracbits || size == MO_64) {
@@ -10004,7 +10004,7 @@  static void handle_vec_simd_shri(DisasContext *s, bool is_q, bool is_u,
     int dsize = is_q ? 128 : 64;
     int esize = 8 << size;
     int elements = dsize/esize;
-    TCGMemOp memop = size | (is_u ? 0 : MO_SIGN);
+    MemOp memop = size | (is_u ? 0 : MO_SIGN);
     TCGv_i64 tcg_rn = new_tmp_a64(s);
     TCGv_i64 tcg_rd = new_tmp_a64(s);
     TCGv_i64 tcg_round;
@@ -10347,7 +10347,7 @@  static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
             TCGv_i64 tcg_op1 = tcg_temp_new_i64();
             TCGv_i64 tcg_op2 = tcg_temp_new_i64();
             TCGv_i64 tcg_passres;
-            TCGMemOp memop = MO_32 | (is_u ? 0 : MO_SIGN);
+            MemOp memop = MO_32 | (is_u ? 0 : MO_SIGN);

             int elt = pass + is_q * 2;

@@ -11827,7 +11827,7 @@  static void handle_2misc_pairwise(DisasContext *s, int opcode, bool u,

     if (size == 2) {
         /* 32 + 32 -> 64 op */
-        TCGMemOp memop = size + (u ? 0 : MO_SIGN);
+        MemOp memop = size + (u ? 0 : MO_SIGN);

         for (pass = 0; pass < maxpass; pass++) {
             TCGv_i64 tcg_op1 = tcg_temp_new_i64();
@@ -12849,7 +12849,7 @@  static void disas_simd_indexed(DisasContext *s, uint32_t insn)

     switch (is_fp) {
     case 1: /* normal fp */
-        /* convert insn encoded size to TCGMemOp size */
+        /* convert insn encoded size to MemOp size */
         switch (size) {
         case 0: /* half-precision */
             size = MO_16;
@@ -12897,7 +12897,7 @@  static void disas_simd_indexed(DisasContext *s, uint32_t insn)
         return;
     }

-    /* Given TCGMemOp size, adjust register and indexing.  */
+    /* Given MemOp size, adjust register and indexing.  */
     switch (size) {
     case MO_16:
         index = h << 2 | l << 1 | m;
@@ -13194,7 +13194,7 @@  static void disas_simd_indexed(DisasContext *s, uint32_t insn)
         TCGv_i64 tcg_res[2];
         int pass;
         bool satop = extract32(opcode, 0, 1);
-        TCGMemOp memop = MO_32;
+        MemOp memop = MO_32;

         if (satop || !u) {
             memop |= MO_SIGN;
diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h
index 9ab4087..f1246b7 100644
--- a/target/arm/translate-a64.h
+++ b/target/arm/translate-a64.h
@@ -64,7 +64,7 @@  static inline void assert_fp_access_checked(DisasContext *s)
  * the FP/vector register Qn.
  */
 static inline int vec_reg_offset(DisasContext *s, int regno,
-                                 int element, TCGMemOp size)
+                                 int element, MemOp size)
 {
     int element_size = 1 << size;
     int offs = element * element_size;
diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
index fa068b0..5d7edd0 100644
--- a/target/arm/translate-sve.c
+++ b/target/arm/translate-sve.c
@@ -4567,7 +4567,7 @@  static bool trans_STR_pri(DisasContext *s, arg_rri *a)
  */

 /* The memory mode of the dtype.  */
-static const TCGMemOp dtype_mop[16] = {
+static const MemOp dtype_mop[16] = {
     MO_UB, MO_UB, MO_UB, MO_UB,
     MO_SL, MO_UW, MO_UW, MO_UW,
     MO_SW, MO_SW, MO_UL, MO_UL,
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 7853462..d116c8c 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -114,7 +114,7 @@  typedef enum ISSInfo {
 } ISSInfo;

 /* Save the syndrome information for a Data Abort */
-static void disas_set_da_iss(DisasContext *s, TCGMemOp memop, ISSInfo issinfo)
+static void disas_set_da_iss(DisasContext *s, MemOp memop, ISSInfo issinfo)
 {
     uint32_t syn;
     int sas = memop & MO_SIZE;
@@ -1079,7 +1079,7 @@  static inline void store_reg_from_load(DisasContext *s, int reg, TCGv_i32 var)
  * that the address argument is TCGv_i32 rather than TCGv.
  */

-static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, TCGMemOp op)
+static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, MemOp op)
 {
     TCGv addr = tcg_temp_new();
     tcg_gen_extu_i32_tl(addr, a32);
@@ -1092,7 +1092,7 @@  static inline TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, TCGMemOp op)
 }

 static void gen_aa32_ld_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
-                            int index, TCGMemOp opc)
+                            int index, MemOp opc)
 {
     TCGv addr;

@@ -1107,7 +1107,7 @@  static void gen_aa32_ld_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
 }

 static void gen_aa32_st_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
-                            int index, TCGMemOp opc)
+                            int index, MemOp opc)
 {
     TCGv addr;

@@ -1160,7 +1160,7 @@  static inline void gen_aa32_frob64(DisasContext *s, TCGv_i64 val)
 }

 static void gen_aa32_ld_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
-                            int index, TCGMemOp opc)
+                            int index, MemOp opc)
 {
     TCGv addr = gen_aa32_addr(s, a32, opc);
     tcg_gen_qemu_ld_i64(val, addr, index, opc);
@@ -1175,7 +1175,7 @@  static inline void gen_aa32_ld64(DisasContext *s, TCGv_i64 val,
 }

 static void gen_aa32_st_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
-                            int index, TCGMemOp opc)
+                            int index, MemOp opc)
 {
     TCGv addr = gen_aa32_addr(s, a32, opc);

@@ -1400,7 +1400,7 @@  neon_reg_offset (int reg, int n)
  * where 0 is the least significant end of the register.
  */
 static inline long
-neon_element_offset(int reg, int element, TCGMemOp size)
+neon_element_offset(int reg, int element, MemOp size)
 {
     int element_size = 1 << size;
     int ofs = element * element_size;
@@ -1422,7 +1422,7 @@  static TCGv_i32 neon_load_reg(int reg, int pass)
     return tmp;
 }

-static void neon_load_element(TCGv_i32 var, int reg, int ele, TCGMemOp mop)
+static void neon_load_element(TCGv_i32 var, int reg, int ele, MemOp mop)
 {
     long offset = neon_element_offset(reg, ele, mop & MO_SIZE);

@@ -1441,7 +1441,7 @@  static void neon_load_element(TCGv_i32 var, int reg, int ele, TCGMemOp mop)
     }
 }

-static void neon_load_element64(TCGv_i64 var, int reg, int ele, TCGMemOp mop)
+static void neon_load_element64(TCGv_i64 var, int reg, int ele, MemOp mop)
 {
     long offset = neon_element_offset(reg, ele, mop & MO_SIZE);

@@ -1469,7 +1469,7 @@  static void neon_store_reg(int reg, int pass, TCGv_i32 var)
     tcg_temp_free_i32(var);
 }

-static void neon_store_element(int reg, int ele, TCGMemOp size, TCGv_i32 var)
+static void neon_store_element(int reg, int ele, MemOp size, TCGv_i32 var)
 {
     long offset = neon_element_offset(reg, ele, size);

@@ -1488,7 +1488,7 @@  static void neon_store_element(int reg, int ele, TCGMemOp size, TCGv_i32 var)
     }
 }

-static void neon_store_element64(int reg, int ele, TCGMemOp size, TCGv_i64 var)
+static void neon_store_element64(int reg, int ele, MemOp size, TCGv_i64 var)
 {
     long offset = neon_element_offset(reg, ele, size);

@@ -3558,7 +3558,7 @@  static int disas_neon_ls_insn(DisasContext *s, uint32_t insn)
     int n;
     int vec_size;
     int mmu_idx;
-    TCGMemOp endian;
+    MemOp endian;
     TCGv_i32 addr;
     TCGv_i32 tmp;
     TCGv_i32 tmp2;
@@ -6867,7 +6867,7 @@  static int disas_neon_data_insn(DisasContext *s, uint32_t insn)
             } else if ((insn & 0x380) == 0) {
                 /* VDUP */
                 int element;
-                TCGMemOp size;
+                MemOp size;

                 if ((insn & (7 << 16)) == 0 || (q && (rd & 1))) {
                     return 1;
@@ -7435,7 +7435,7 @@  static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
                                TCGv_i32 addr, int size)
 {
     TCGv_i32 tmp = tcg_temp_new_i32();
-    TCGMemOp opc = size | MO_ALIGN | s->be_data;
+    MemOp opc = size | MO_ALIGN | s->be_data;

     s->is_ldex = true;

@@ -7489,7 +7489,7 @@  static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
     TCGv taddr;
     TCGLabel *done_label;
     TCGLabel *fail_label;
-    TCGMemOp opc = size | MO_ALIGN | s->be_data;
+    MemOp opc = size | MO_ALIGN | s->be_data;

     /* if (env->exclusive_addr == addr && env->exclusive_val == [addr]) {
          [addr] = {Rt};
@@ -8603,7 +8603,7 @@  static void disas_arm_insn(DisasContext *s, unsigned int insn)
                         */

                         TCGv taddr;
-                        TCGMemOp opc = s->be_data;
+                        MemOp opc = s->be_data;

                         rm = (insn) & 0xf;

diff --git a/target/arm/translate.h b/target/arm/translate.h
index a20f6e2..284c510 100644
--- a/target/arm/translate.h
+++ b/target/arm/translate.h
@@ -21,7 +21,7 @@  typedef struct DisasContext {
     int condexec_cond;
     int thumb;
     int sctlr_b;
-    TCGMemOp be_data;
+    MemOp be_data;
 #if !defined(CONFIG_USER_ONLY)
     int user;
 #endif
diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 188fe68..ff4802a 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -1500,7 +1500,7 @@  static void form_gva(DisasContext *ctx, TCGv_tl *pgva, TCGv_reg *pofs,
  */
 static void do_load_32(DisasContext *ctx, TCGv_i32 dest, unsigned rb,
                        unsigned rx, int scale, target_sreg disp,
-                       unsigned sp, int modify, TCGMemOp mop)
+                       unsigned sp, int modify, MemOp mop)
 {
     TCGv_reg ofs;
     TCGv_tl addr;
@@ -1518,7 +1518,7 @@  static void do_load_32(DisasContext *ctx, TCGv_i32 dest, unsigned rb,

 static void do_load_64(DisasContext *ctx, TCGv_i64 dest, unsigned rb,
                        unsigned rx, int scale, target_sreg disp,
-                       unsigned sp, int modify, TCGMemOp mop)
+                       unsigned sp, int modify, MemOp mop)
 {
     TCGv_reg ofs;
     TCGv_tl addr;
@@ -1536,7 +1536,7 @@  static void do_load_64(DisasContext *ctx, TCGv_i64 dest, unsigned rb,

 static void do_store_32(DisasContext *ctx, TCGv_i32 src, unsigned rb,
                         unsigned rx, int scale, target_sreg disp,
-                        unsigned sp, int modify, TCGMemOp mop)
+                        unsigned sp, int modify, MemOp mop)
 {
     TCGv_reg ofs;
     TCGv_tl addr;
@@ -1554,7 +1554,7 @@  static void do_store_32(DisasContext *ctx, TCGv_i32 src, unsigned rb,

 static void do_store_64(DisasContext *ctx, TCGv_i64 src, unsigned rb,
                         unsigned rx, int scale, target_sreg disp,
-                        unsigned sp, int modify, TCGMemOp mop)
+                        unsigned sp, int modify, MemOp mop)
 {
     TCGv_reg ofs;
     TCGv_tl addr;
@@ -1580,7 +1580,7 @@  static void do_store_64(DisasContext *ctx, TCGv_i64 src, unsigned rb,

 static bool do_load(DisasContext *ctx, unsigned rt, unsigned rb,
                     unsigned rx, int scale, target_sreg disp,
-                    unsigned sp, int modify, TCGMemOp mop)
+                    unsigned sp, int modify, MemOp mop)
 {
     TCGv_reg dest;

@@ -1653,7 +1653,7 @@  static bool trans_fldd(DisasContext *ctx, arg_ldst *a)

 static bool do_store(DisasContext *ctx, unsigned rt, unsigned rb,
                      target_sreg disp, unsigned sp,
-                     int modify, TCGMemOp mop)
+                     int modify, MemOp mop)
 {
     nullify_over(ctx);
     do_store_reg(ctx, load_gpr(ctx, rt), rb, 0, 0, disp, sp, modify, mop);
@@ -2940,7 +2940,7 @@  static bool trans_st(DisasContext *ctx, arg_ldst *a)

 static bool trans_ldc(DisasContext *ctx, arg_ldst *a)
 {
-    TCGMemOp mop = MO_TEUL | MO_ALIGN_16 | a->size;
+    MemOp mop = MO_TEUL | MO_ALIGN_16 | a->size;
     TCGv_reg zero, dest, ofs;
     TCGv_tl addr;

diff --git a/target/i386/translate.c b/target/i386/translate.c
index 03150a8..def9867 100644
--- a/target/i386/translate.c
+++ b/target/i386/translate.c
@@ -87,8 +87,8 @@  typedef struct DisasContext {
     /* current insn context */
     int override; /* -1 if no override */
     int prefix;
-    TCGMemOp aflag;
-    TCGMemOp dflag;
+    MemOp aflag;
+    MemOp dflag;
     target_ulong pc_start;
     target_ulong pc; /* pc = eip + cs_base */
     /* current block context */
@@ -149,7 +149,7 @@  static void gen_eob(DisasContext *s);
 static void gen_jr(DisasContext *s, TCGv dest);
 static void gen_jmp(DisasContext *s, target_ulong eip);
 static void gen_jmp_tb(DisasContext *s, target_ulong eip, int tb_num);
-static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d);
+static void gen_op(DisasContext *s1, int op, MemOp ot, int d);

 /* i386 arith/logic operations */
 enum {
@@ -320,7 +320,7 @@  static inline bool byte_reg_is_xH(DisasContext *s, int reg)
 }

 /* Select the size of a push/pop operation.  */
-static inline TCGMemOp mo_pushpop(DisasContext *s, TCGMemOp ot)
+static inline MemOp mo_pushpop(DisasContext *s, MemOp ot)
 {
     if (CODE64(s)) {
         return ot == MO_16 ? MO_16 : MO_64;
@@ -330,13 +330,13 @@  static inline TCGMemOp mo_pushpop(DisasContext *s, TCGMemOp ot)
 }

 /* Select the size of the stack pointer.  */
-static inline TCGMemOp mo_stacksize(DisasContext *s)
+static inline MemOp mo_stacksize(DisasContext *s)
 {
     return CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
 }

 /* Select only size 64 else 32.  Used for SSE operand sizes.  */
-static inline TCGMemOp mo_64_32(TCGMemOp ot)
+static inline MemOp mo_64_32(MemOp ot)
 {
 #ifdef TARGET_X86_64
     return ot == MO_64 ? MO_64 : MO_32;
@@ -347,19 +347,19 @@  static inline TCGMemOp mo_64_32(TCGMemOp ot)

 /* Select size 8 if lsb of B is clear, else OT.  Used for decoding
    byte vs word opcodes.  */
-static inline TCGMemOp mo_b_d(int b, TCGMemOp ot)
+static inline MemOp mo_b_d(int b, MemOp ot)
 {
     return b & 1 ? ot : MO_8;
 }

 /* Select size 8 if lsb of B is clear, else OT capped at 32.
    Used for decoding operand size of port opcodes.  */
-static inline TCGMemOp mo_b_d32(int b, TCGMemOp ot)
+static inline MemOp mo_b_d32(int b, MemOp ot)
 {
     return b & 1 ? (ot == MO_16 ? MO_16 : MO_32) : MO_8;
 }

-static void gen_op_mov_reg_v(DisasContext *s, TCGMemOp ot, int reg, TCGv t0)
+static void gen_op_mov_reg_v(DisasContext *s, MemOp ot, int reg, TCGv t0)
 {
     switch(ot) {
     case MO_8:
@@ -388,7 +388,7 @@  static void gen_op_mov_reg_v(DisasContext *s, TCGMemOp ot, int reg, TCGv t0)
 }

 static inline
-void gen_op_mov_v_reg(DisasContext *s, TCGMemOp ot, TCGv t0, int reg)
+void gen_op_mov_v_reg(DisasContext *s, MemOp ot, TCGv t0, int reg)
 {
     if (ot == MO_8 && byte_reg_is_xH(s, reg)) {
         tcg_gen_extract_tl(t0, cpu_regs[reg - 4], 8, 8);
@@ -411,13 +411,13 @@  static inline void gen_op_jmp_v(TCGv dest)
 }

 static inline
-void gen_op_add_reg_im(DisasContext *s, TCGMemOp size, int reg, int32_t val)
+void gen_op_add_reg_im(DisasContext *s, MemOp size, int reg, int32_t val)
 {
     tcg_gen_addi_tl(s->tmp0, cpu_regs[reg], val);
     gen_op_mov_reg_v(s, size, reg, s->tmp0);
 }

-static inline void gen_op_add_reg_T0(DisasContext *s, TCGMemOp size, int reg)
+static inline void gen_op_add_reg_T0(DisasContext *s, MemOp size, int reg)
 {
     tcg_gen_add_tl(s->tmp0, cpu_regs[reg], s->T0);
     gen_op_mov_reg_v(s, size, reg, s->tmp0);
@@ -451,7 +451,7 @@  static inline void gen_jmp_im(DisasContext *s, target_ulong pc)
 /* Compute SEG:REG into A0.  SEG is selected from the override segment
    (OVR_SEG) and the default segment (DEF_SEG).  OVR_SEG may be -1 to
    indicate no override.  */
-static void gen_lea_v_seg(DisasContext *s, TCGMemOp aflag, TCGv a0,
+static void gen_lea_v_seg(DisasContext *s, MemOp aflag, TCGv a0,
                           int def_seg, int ovr_seg)
 {
     switch (aflag) {
@@ -514,13 +514,13 @@  static inline void gen_string_movl_A0_EDI(DisasContext *s)
     gen_lea_v_seg(s, s->aflag, cpu_regs[R_EDI], R_ES, -1);
 }

-static inline void gen_op_movl_T0_Dshift(DisasContext *s, TCGMemOp ot)
+static inline void gen_op_movl_T0_Dshift(DisasContext *s, MemOp ot)
 {
     tcg_gen_ld32s_tl(s->T0, cpu_env, offsetof(CPUX86State, df));
     tcg_gen_shli_tl(s->T0, s->T0, ot);
 };

-static TCGv gen_ext_tl(TCGv dst, TCGv src, TCGMemOp size, bool sign)
+static TCGv gen_ext_tl(TCGv dst, TCGv src, MemOp size, bool sign)
 {
     switch (size) {
     case MO_8:
@@ -551,18 +551,18 @@  static TCGv gen_ext_tl(TCGv dst, TCGv src, TCGMemOp size, bool sign)
     }
 }

-static void gen_extu(TCGMemOp ot, TCGv reg)
+static void gen_extu(MemOp ot, TCGv reg)
 {
     gen_ext_tl(reg, reg, ot, false);
 }

-static void gen_exts(TCGMemOp ot, TCGv reg)
+static void gen_exts(MemOp ot, TCGv reg)
 {
     gen_ext_tl(reg, reg, ot, true);
 }

 static inline
-void gen_op_jnz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
+void gen_op_jnz_ecx(DisasContext *s, MemOp size, TCGLabel *label1)
 {
     tcg_gen_mov_tl(s->tmp0, cpu_regs[R_ECX]);
     gen_extu(size, s->tmp0);
@@ -570,14 +570,14 @@  void gen_op_jnz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
 }

 static inline
-void gen_op_jz_ecx(DisasContext *s, TCGMemOp size, TCGLabel *label1)
+void gen_op_jz_ecx(DisasContext *s, MemOp size, TCGLabel *label1)
 {
     tcg_gen_mov_tl(s->tmp0, cpu_regs[R_ECX]);
     gen_extu(size, s->tmp0);
     tcg_gen_brcondi_tl(TCG_COND_EQ, s->tmp0, 0, label1);
 }

-static void gen_helper_in_func(TCGMemOp ot, TCGv v, TCGv_i32 n)
+static void gen_helper_in_func(MemOp ot, TCGv v, TCGv_i32 n)
 {
     switch (ot) {
     case MO_8:
@@ -594,7 +594,7 @@  static void gen_helper_in_func(TCGMemOp ot, TCGv v, TCGv_i32 n)
     }
 }

-static void gen_helper_out_func(TCGMemOp ot, TCGv_i32 v, TCGv_i32 n)
+static void gen_helper_out_func(MemOp ot, TCGv_i32 v, TCGv_i32 n)
 {
     switch (ot) {
     case MO_8:
@@ -611,7 +611,7 @@  static void gen_helper_out_func(TCGMemOp ot, TCGv_i32 v, TCGv_i32 n)
     }
 }

-static void gen_check_io(DisasContext *s, TCGMemOp ot, target_ulong cur_eip,
+static void gen_check_io(DisasContext *s, MemOp ot, target_ulong cur_eip,
                          uint32_t svm_flags)
 {
     target_ulong next_eip;
@@ -644,7 +644,7 @@  static void gen_check_io(DisasContext *s, TCGMemOp ot, target_ulong cur_eip,
     }
 }

-static inline void gen_movs(DisasContext *s, TCGMemOp ot)
+static inline void gen_movs(DisasContext *s, MemOp ot)
 {
     gen_string_movl_A0_ESI(s);
     gen_op_ld_v(s, ot, s->T0, s->A0);
@@ -840,7 +840,7 @@  static CCPrepare gen_prepare_eflags_s(DisasContext *s, TCGv reg)
         return (CCPrepare) { .cond = TCG_COND_NEVER, .mask = -1 };
     default:
         {
-            TCGMemOp size = (s->cc_op - CC_OP_ADDB) & 3;
+            MemOp size = (s->cc_op - CC_OP_ADDB) & 3;
             TCGv t0 = gen_ext_tl(reg, cpu_cc_dst, size, true);
             return (CCPrepare) { .cond = TCG_COND_LT, .reg = t0, .mask = -1 };
         }
@@ -885,7 +885,7 @@  static CCPrepare gen_prepare_eflags_z(DisasContext *s, TCGv reg)
                              .mask = -1 };
     default:
         {
-            TCGMemOp size = (s->cc_op - CC_OP_ADDB) & 3;
+            MemOp size = (s->cc_op - CC_OP_ADDB) & 3;
             TCGv t0 = gen_ext_tl(reg, cpu_cc_dst, size, false);
             return (CCPrepare) { .cond = TCG_COND_EQ, .reg = t0, .mask = -1 };
         }
@@ -897,7 +897,7 @@  static CCPrepare gen_prepare_eflags_z(DisasContext *s, TCGv reg)
 static CCPrepare gen_prepare_cc(DisasContext *s, int b, TCGv reg)
 {
     int inv, jcc_op, cond;
-    TCGMemOp size;
+    MemOp size;
     CCPrepare cc;
     TCGv t0;

@@ -1075,7 +1075,7 @@  static TCGLabel *gen_jz_ecx_string(DisasContext *s, target_ulong next_eip)
     return l2;
 }

-static inline void gen_stos(DisasContext *s, TCGMemOp ot)
+static inline void gen_stos(DisasContext *s, MemOp ot)
 {
     gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX);
     gen_string_movl_A0_EDI(s);
@@ -1084,7 +1084,7 @@  static inline void gen_stos(DisasContext *s, TCGMemOp ot)
     gen_op_add_reg_T0(s, s->aflag, R_EDI);
 }

-static inline void gen_lods(DisasContext *s, TCGMemOp ot)
+static inline void gen_lods(DisasContext *s, MemOp ot)
 {
     gen_string_movl_A0_ESI(s);
     gen_op_ld_v(s, ot, s->T0, s->A0);
@@ -1093,7 +1093,7 @@  static inline void gen_lods(DisasContext *s, TCGMemOp ot)
     gen_op_add_reg_T0(s, s->aflag, R_ESI);
 }

-static inline void gen_scas(DisasContext *s, TCGMemOp ot)
+static inline void gen_scas(DisasContext *s, MemOp ot)
 {
     gen_string_movl_A0_EDI(s);
     gen_op_ld_v(s, ot, s->T1, s->A0);
@@ -1102,7 +1102,7 @@  static inline void gen_scas(DisasContext *s, TCGMemOp ot)
     gen_op_add_reg_T0(s, s->aflag, R_EDI);
 }

-static inline void gen_cmps(DisasContext *s, TCGMemOp ot)
+static inline void gen_cmps(DisasContext *s, MemOp ot)
 {
     gen_string_movl_A0_EDI(s);
     gen_op_ld_v(s, ot, s->T1, s->A0);
@@ -1126,7 +1126,7 @@  static void gen_bpt_io(DisasContext *s, TCGv_i32 t_port, int ot)
 }


-static inline void gen_ins(DisasContext *s, TCGMemOp ot)
+static inline void gen_ins(DisasContext *s, MemOp ot)
 {
     if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) {
         gen_io_start();
@@ -1148,7 +1148,7 @@  static inline void gen_ins(DisasContext *s, TCGMemOp ot)
     }
 }

-static inline void gen_outs(DisasContext *s, TCGMemOp ot)
+static inline void gen_outs(DisasContext *s, MemOp ot)
 {
     if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) {
         gen_io_start();
@@ -1171,7 +1171,7 @@  static inline void gen_outs(DisasContext *s, TCGMemOp ot)
 /* same method as Valgrind : we generate jumps to current or next
    instruction */
 #define GEN_REPZ(op)                                                          \
-static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
+static inline void gen_repz_ ## op(DisasContext *s, MemOp ot,              \
                                  target_ulong cur_eip, target_ulong next_eip) \
 {                                                                             \
     TCGLabel *l2;                                                             \
@@ -1187,7 +1187,7 @@  static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
 }

 #define GEN_REPZ2(op)                                                         \
-static inline void gen_repz_ ## op(DisasContext *s, TCGMemOp ot,              \
+static inline void gen_repz_ ## op(DisasContext *s, MemOp ot,              \
                                    target_ulong cur_eip,                      \
                                    target_ulong next_eip,                     \
                                    int nz)                                    \
@@ -1284,7 +1284,7 @@  static void gen_illegal_opcode(DisasContext *s)
 }

 /* if d == OR_TMP0, it means memory operand (address in A0) */
-static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
+static void gen_op(DisasContext *s1, int op, MemOp ot, int d)
 {
     if (d != OR_TMP0) {
         if (s1->prefix & PREFIX_LOCK) {
@@ -1395,7 +1395,7 @@  static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
 }

 /* if d == OR_TMP0, it means memory operand (address in A0) */
-static void gen_inc(DisasContext *s1, TCGMemOp ot, int d, int c)
+static void gen_inc(DisasContext *s1, MemOp ot, int d, int c)
 {
     if (s1->prefix & PREFIX_LOCK) {
         if (d != OR_TMP0) {
@@ -1421,7 +1421,7 @@  static void gen_inc(DisasContext *s1, TCGMemOp ot, int d, int c)
     set_cc_op(s1, (c > 0 ? CC_OP_INCB : CC_OP_DECB) + ot);
 }

-static void gen_shift_flags(DisasContext *s, TCGMemOp ot, TCGv result,
+static void gen_shift_flags(DisasContext *s, MemOp ot, TCGv result,
                             TCGv shm1, TCGv count, bool is_right)
 {
     TCGv_i32 z32, s32, oldop;
@@ -1466,7 +1466,7 @@  static void gen_shift_flags(DisasContext *s, TCGMemOp ot, TCGv result,
     set_cc_op(s, CC_OP_DYNAMIC);
 }

-static void gen_shift_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
+static void gen_shift_rm_T1(DisasContext *s, MemOp ot, int op1,
                             int is_right, int is_arith)
 {
     target_ulong mask = (ot == MO_64 ? 0x3f : 0x1f);
@@ -1502,7 +1502,7 @@  static void gen_shift_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
     gen_shift_flags(s, ot, s->T0, s->tmp0, s->T1, is_right);
 }

-static void gen_shift_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
+static void gen_shift_rm_im(DisasContext *s, MemOp ot, int op1, int op2,
                             int is_right, int is_arith)
 {
     int mask = (ot == MO_64 ? 0x3f : 0x1f);
@@ -1542,7 +1542,7 @@  static void gen_shift_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
     }
 }

-static void gen_rot_rm_T1(DisasContext *s, TCGMemOp ot, int op1, int is_right)
+static void gen_rot_rm_T1(DisasContext *s, MemOp ot, int op1, int is_right)
 {
     target_ulong mask = (ot == MO_64 ? 0x3f : 0x1f);
     TCGv_i32 t0, t1;
@@ -1627,7 +1627,7 @@  static void gen_rot_rm_T1(DisasContext *s, TCGMemOp ot, int op1, int is_right)
     set_cc_op(s, CC_OP_DYNAMIC);
 }

-static void gen_rot_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
+static void gen_rot_rm_im(DisasContext *s, MemOp ot, int op1, int op2,
                           int is_right)
 {
     int mask = (ot == MO_64 ? 0x3f : 0x1f);
@@ -1705,7 +1705,7 @@  static void gen_rot_rm_im(DisasContext *s, TCGMemOp ot, int op1, int op2,
 }

 /* XXX: add faster immediate = 1 case */
-static void gen_rotc_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
+static void gen_rotc_rm_T1(DisasContext *s, MemOp ot, int op1,
                            int is_right)
 {
     gen_compute_eflags(s);
@@ -1761,7 +1761,7 @@  static void gen_rotc_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
 }

 /* XXX: add faster immediate case */
-static void gen_shiftd_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
+static void gen_shiftd_rm_T1(DisasContext *s, MemOp ot, int op1,
                              bool is_right, TCGv count_in)
 {
     target_ulong mask = (ot == MO_64 ? 63 : 31);
@@ -1842,7 +1842,7 @@  static void gen_shiftd_rm_T1(DisasContext *s, TCGMemOp ot, int op1,
     tcg_temp_free(count);
 }

-static void gen_shift(DisasContext *s1, int op, TCGMemOp ot, int d, int s)
+static void gen_shift(DisasContext *s1, int op, MemOp ot, int d, int s)
 {
     if (s != OR_TMP1)
         gen_op_mov_v_reg(s1, ot, s1->T1, s);
@@ -1872,7 +1872,7 @@  static void gen_shift(DisasContext *s1, int op, TCGMemOp ot, int d, int s)
     }
 }

-static void gen_shifti(DisasContext *s1, int op, TCGMemOp ot, int d, int c)
+static void gen_shifti(DisasContext *s1, int op, MemOp ot, int d, int c)
 {
     switch(op) {
     case OP_ROL:
@@ -2149,7 +2149,7 @@  static void gen_add_A0_ds_seg(DisasContext *s)
 /* generate modrm memory load or store of 'reg'. TMP0 is used if reg ==
    OR_TMP0 */
 static void gen_ldst_modrm(CPUX86State *env, DisasContext *s, int modrm,
-                           TCGMemOp ot, int reg, int is_store)
+                           MemOp ot, int reg, int is_store)
 {
     int mod, rm;

@@ -2179,7 +2179,7 @@  static void gen_ldst_modrm(CPUX86State *env, DisasContext *s, int modrm,
     }
 }

-static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, TCGMemOp ot)
+static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, MemOp ot)
 {
     uint32_t ret;

@@ -2202,7 +2202,7 @@  static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, TCGMemOp ot)
     return ret;
 }

-static inline int insn_const_size(TCGMemOp ot)
+static inline int insn_const_size(MemOp ot)
 {
     if (ot <= MO_32) {
         return 1 << ot;
@@ -2266,7 +2266,7 @@  static inline void gen_jcc(DisasContext *s, int b,
     }
 }

-static void gen_cmovcc1(CPUX86State *env, DisasContext *s, TCGMemOp ot, int b,
+static void gen_cmovcc1(CPUX86State *env, DisasContext *s, MemOp ot, int b,
                         int modrm, int reg)
 {
     CCPrepare cc;
@@ -2363,8 +2363,8 @@  static inline void gen_stack_update(DisasContext *s, int addend)
 /* Generate a push. It depends on ss32, addseg and dflag.  */
 static void gen_push_v(DisasContext *s, TCGv val)
 {
-    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
-    TCGMemOp a_ot = mo_stacksize(s);
+    MemOp d_ot = mo_pushpop(s, s->dflag);
+    MemOp a_ot = mo_stacksize(s);
     int size = 1 << d_ot;
     TCGv new_esp = s->A0;

@@ -2383,9 +2383,9 @@  static void gen_push_v(DisasContext *s, TCGv val)
 }

 /* two step pop is necessary for precise exceptions */
-static TCGMemOp gen_pop_T0(DisasContext *s)
+static MemOp gen_pop_T0(DisasContext *s)
 {
-    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
+    MemOp d_ot = mo_pushpop(s, s->dflag);

     gen_lea_v_seg(s, mo_stacksize(s), cpu_regs[R_ESP], R_SS, -1);
     gen_op_ld_v(s, d_ot, s->T0, s->A0);
@@ -2393,7 +2393,7 @@  static TCGMemOp gen_pop_T0(DisasContext *s)
     return d_ot;
 }

-static inline void gen_pop_update(DisasContext *s, TCGMemOp ot)
+static inline void gen_pop_update(DisasContext *s, MemOp ot)
 {
     gen_stack_update(s, 1 << ot);
 }
@@ -2405,8 +2405,8 @@  static inline void gen_stack_A0(DisasContext *s)

 static void gen_pusha(DisasContext *s)
 {
-    TCGMemOp s_ot = s->ss32 ? MO_32 : MO_16;
-    TCGMemOp d_ot = s->dflag;
+    MemOp s_ot = s->ss32 ? MO_32 : MO_16;
+    MemOp d_ot = s->dflag;
     int size = 1 << d_ot;
     int i;

@@ -2421,8 +2421,8 @@  static void gen_pusha(DisasContext *s)

 static void gen_popa(DisasContext *s)
 {
-    TCGMemOp s_ot = s->ss32 ? MO_32 : MO_16;
-    TCGMemOp d_ot = s->dflag;
+    MemOp s_ot = s->ss32 ? MO_32 : MO_16;
+    MemOp d_ot = s->dflag;
     int size = 1 << d_ot;
     int i;

@@ -2442,8 +2442,8 @@  static void gen_popa(DisasContext *s)

 static void gen_enter(DisasContext *s, int esp_addend, int level)
 {
-    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
-    TCGMemOp a_ot = CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
+    MemOp d_ot = mo_pushpop(s, s->dflag);
+    MemOp a_ot = CODE64(s) ? MO_64 : s->ss32 ? MO_32 : MO_16;
     int size = 1 << d_ot;

     /* Push BP; compute FrameTemp into T1.  */
@@ -2482,8 +2482,8 @@  static void gen_enter(DisasContext *s, int esp_addend, int level)

 static void gen_leave(DisasContext *s)
 {
-    TCGMemOp d_ot = mo_pushpop(s, s->dflag);
-    TCGMemOp a_ot = mo_stacksize(s);
+    MemOp d_ot = mo_pushpop(s, s->dflag);
+    MemOp a_ot = mo_stacksize(s);

     gen_lea_v_seg(s, a_ot, cpu_regs[R_EBP], R_SS, -1);
     gen_op_ld_v(s, d_ot, s->T0, s->A0);
@@ -3045,7 +3045,7 @@  static void gen_sse(CPUX86State *env, DisasContext *s, int b,
     SSEFunc_0_eppi sse_fn_eppi;
     SSEFunc_0_ppi sse_fn_ppi;
     SSEFunc_0_eppt sse_fn_eppt;
-    TCGMemOp ot;
+    MemOp ot;

     b &= 0xff;
     if (s->prefix & PREFIX_DATA)
@@ -4488,7 +4488,7 @@  static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
     CPUX86State *env = cpu->env_ptr;
     int b, prefixes;
     int shift;
-    TCGMemOp ot, aflag, dflag;
+    MemOp ot, aflag, dflag;
     int modrm, reg, rm, mod, op, opreg, val;
     target_ulong next_eip, tval;
     int rex_w, rex_r;
@@ -5567,8 +5567,8 @@  static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
     case 0x1be: /* movsbS Gv, Eb */
     case 0x1bf: /* movswS Gv, Eb */
         {
-            TCGMemOp d_ot;
-            TCGMemOp s_ot;
+            MemOp d_ot;
+            MemOp s_ot;

             /* d_ot is the size of destination */
             d_ot = dflag;
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 60bcfb7..24c1dd3 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -2414,7 +2414,7 @@  DISAS_INSN(cas)
     uint16_t ext;
     TCGv load;
     TCGv cmp;
-    TCGMemOp opc;
+    MemOp opc;

     switch ((insn >> 9) & 3) {
     case 1:
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
index 9ce65f3..41d1b8b 100644
--- a/target/microblaze/translate.c
+++ b/target/microblaze/translate.c
@@ -919,7 +919,7 @@  static void dec_load(DisasContext *dc)
     unsigned int size;
     bool rev = false, ex = false, ea = false;
     int mem_index = cpu_mmu_index(&dc->cpu->env, false);
-    TCGMemOp mop;
+    MemOp mop;

     mop = dc->opcode & 3;
     size = 1 << mop;
@@ -1035,7 +1035,7 @@  static void dec_store(DisasContext *dc)
     unsigned int size;
     bool rev = false, ex = false, ea = false;
     int mem_index = cpu_mmu_index(&dc->cpu->env, false);
-    TCGMemOp mop;
+    MemOp mop;

     mop = dc->opcode & 3;
     size = 1 << mop;
diff --git a/target/mips/translate.c b/target/mips/translate.c
index ca62800..59b5d85 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -2526,7 +2526,7 @@  typedef struct DisasContext {
     int32_t CP0_Config5;
     /* Routine used to access memory */
     int mem_idx;
-    TCGMemOp default_tcg_memop_mask;
+    MemOp default_tcg_memop_mask;
     uint32_t hflags, saved_hflags;
     target_ulong btarget;
     bool ulri;
@@ -3706,7 +3706,7 @@  static void gen_st(DisasContext *ctx, uint32_t opc, int rt,

 /* Store conditional */
 static void gen_st_cond(DisasContext *ctx, int rt, int base, int offset,
-                        TCGMemOp tcg_mo, bool eva)
+                        MemOp tcg_mo, bool eva)
 {
     TCGv addr, t0, val;
     TCGLabel *l1 = gen_new_label();
@@ -4546,7 +4546,7 @@  static void gen_HILO(DisasContext *ctx, uint32_t opc, int acc, int reg)
 }

 static inline void gen_r6_ld(target_long addr, int reg, int memidx,
-                             TCGMemOp memop)
+                             MemOp memop)
 {
     TCGv t0 = tcg_const_tl(addr);
     tcg_gen_qemu_ld_tl(t0, t0, memidx, memop);
@@ -21828,7 +21828,7 @@  static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
                              extract32(ctx->opcode, 0, 8);
                     TCGv va = tcg_temp_new();
                     TCGv t1 = tcg_temp_new();
-                    TCGMemOp memop = (extract32(ctx->opcode, 8, 3)) ==
+                    MemOp memop = (extract32(ctx->opcode, 8, 3)) ==
                                       NM_P_LS_UAWM ? MO_UNALN : 0;

                     count = (count == 0) ? 8 : count;
diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c
index 4360ce4..b189c50 100644
--- a/target/openrisc/translate.c
+++ b/target/openrisc/translate.c
@@ -681,7 +681,7 @@  static bool trans_l_lwa(DisasContext *dc, arg_load *a)
     return true;
 }

-static void do_load(DisasContext *dc, arg_load *a, TCGMemOp mop)
+static void do_load(DisasContext *dc, arg_load *a, MemOp mop)
 {
     TCGv ea;

@@ -763,7 +763,7 @@  static bool trans_l_swa(DisasContext *dc, arg_store *a)
     return true;
 }

-static void do_store(DisasContext *dc, arg_store *a, TCGMemOp mop)
+static void do_store(DisasContext *dc, arg_store *a, MemOp mop)
 {
     TCGv t0 = tcg_temp_new();
     tcg_gen_addi_tl(t0, cpu_R[a->a], a->i);
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 4a5de28..31800ed 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -162,7 +162,7 @@  struct DisasContext {
     int mem_idx;
     int access_type;
     /* Translation flags */
-    TCGMemOp default_tcg_memop_mask;
+    MemOp default_tcg_memop_mask;
 #if defined(TARGET_PPC64)
     bool sf_mode;
     bool has_cfar;
@@ -3142,7 +3142,7 @@  static void gen_isync(DisasContext *ctx)

 #define MEMOP_GET_SIZE(x)  (1 << ((x) & MO_SIZE))

-static void gen_load_locked(DisasContext *ctx, TCGMemOp memop)
+static void gen_load_locked(DisasContext *ctx, MemOp memop)
 {
     TCGv gpr = cpu_gpr[rD(ctx->opcode)];
     TCGv t0 = tcg_temp_new();
@@ -3167,7 +3167,7 @@  LARX(lbarx, DEF_MEMOP(MO_UB))
 LARX(lharx, DEF_MEMOP(MO_UW))
 LARX(lwarx, DEF_MEMOP(MO_UL))

-static void gen_fetch_inc_conditional(DisasContext *ctx, TCGMemOp memop,
+static void gen_fetch_inc_conditional(DisasContext *ctx, MemOp memop,
                                       TCGv EA, TCGCond cond, int addend)
 {
     TCGv t = tcg_temp_new();
@@ -3193,7 +3193,7 @@  static void gen_fetch_inc_conditional(DisasContext *ctx, TCGMemOp memop,
     tcg_temp_free(u);
 }

-static void gen_ld_atomic(DisasContext *ctx, TCGMemOp memop)
+static void gen_ld_atomic(DisasContext *ctx, MemOp memop)
 {
     uint32_t gpr_FC = FC(ctx->opcode);
     TCGv EA = tcg_temp_new();
@@ -3306,7 +3306,7 @@  static void gen_ldat(DisasContext *ctx)
 }
 #endif

-static void gen_st_atomic(DisasContext *ctx, TCGMemOp memop)
+static void gen_st_atomic(DisasContext *ctx, MemOp memop)
 {
     uint32_t gpr_FC = FC(ctx->opcode);
     TCGv EA = tcg_temp_new();
@@ -3389,7 +3389,7 @@  static void gen_stdat(DisasContext *ctx)
 }
 #endif

-static void gen_conditional_store(DisasContext *ctx, TCGMemOp memop)
+static void gen_conditional_store(DisasContext *ctx, MemOp memop)
 {
     TCGLabel *l1 = gen_new_label();
     TCGLabel *l2 = gen_new_label();
diff --git a/target/riscv/insn_trans/trans_rva.inc.c b/target/riscv/insn_trans/trans_rva.inc.c
index fadd888..be8a9f0 100644
--- a/target/riscv/insn_trans/trans_rva.inc.c
+++ b/target/riscv/insn_trans/trans_rva.inc.c
@@ -18,7 +18,7 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */

-static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
+static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, MemOp mop)
 {
     TCGv src1 = tcg_temp_new();
     /* Put addr in load_res, data in load_val.  */
@@ -37,7 +37,7 @@  static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
     return true;
 }

-static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
+static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, MemOp mop)
 {
     TCGv src1 = tcg_temp_new();
     TCGv src2 = tcg_temp_new();
@@ -82,8 +82,8 @@  static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, TCGMemOp mop)
 }

 static bool gen_amo(DisasContext *ctx, arg_atomic *a,
-                    void(*func)(TCGv, TCGv, TCGv, TCGArg, TCGMemOp),
-                    TCGMemOp mop)
+                    void(*func)(TCGv, TCGv, TCGv, TCGArg, MemOp),
+                    MemOp mop)
 {
     TCGv src1 = tcg_temp_new();
     TCGv src2 = tcg_temp_new();
diff --git a/target/riscv/insn_trans/trans_rvi.inc.c b/target/riscv/insn_trans/trans_rvi.inc.c
index ea64731..cf440d1 100644
--- a/target/riscv/insn_trans/trans_rvi.inc.c
+++ b/target/riscv/insn_trans/trans_rvi.inc.c
@@ -135,7 +135,7 @@  static bool trans_bgeu(DisasContext *ctx, arg_bgeu *a)
     return gen_branch(ctx, a, TCG_COND_GEU);
 }

-static bool gen_load(DisasContext *ctx, arg_lb *a, TCGMemOp memop)
+static bool gen_load(DisasContext *ctx, arg_lb *a, MemOp memop)
 {
     TCGv t0 = tcg_temp_new();
     TCGv t1 = tcg_temp_new();
@@ -174,7 +174,7 @@  static bool trans_lhu(DisasContext *ctx, arg_lhu *a)
     return gen_load(ctx, a, MO_TEUW);
 }

-static bool gen_store(DisasContext *ctx, arg_sb *a, TCGMemOp memop)
+static bool gen_store(DisasContext *ctx, arg_sb *a, MemOp memop)
 {
     TCGv t0 = tcg_temp_new();
     TCGv dat = tcg_temp_new();
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index ac0d8b6..2927247 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -152,7 +152,7 @@  static inline int vec_full_reg_offset(uint8_t reg)
     return offsetof(CPUS390XState, vregs[reg][0]);
 }

-static inline int vec_reg_offset(uint8_t reg, uint8_t enr, TCGMemOp es)
+static inline int vec_reg_offset(uint8_t reg, uint8_t enr, MemOp es)
 {
     /* Convert element size (es) - e.g. MO_8 - to bytes */
     const uint8_t bytes = 1 << es;
@@ -2262,7 +2262,7 @@  static DisasJumpType op_csst(DisasContext *s, DisasOps *o)
 #ifndef CONFIG_USER_ONLY
 static DisasJumpType op_csp(DisasContext *s, DisasOps *o)
 {
-    TCGMemOp mop = s->insn->data;
+    MemOp mop = s->insn->data;
     TCGv_i64 addr, old, cc;
     TCGLabel *lab = gen_new_label();

@@ -3228,7 +3228,7 @@  static DisasJumpType op_lm64(DisasContext *s, DisasOps *o)
 static DisasJumpType op_lpd(DisasContext *s, DisasOps *o)
 {
     TCGv_i64 a1, a2;
-    TCGMemOp mop = s->insn->data;
+    MemOp mop = s->insn->data;

     /* In a parallel context, stop the world and single step.  */
     if (tb_cflags(s->base.tb) & CF_PARALLEL) {
diff --git a/target/s390x/translate_vx.inc.c b/target/s390x/translate_vx.inc.c
index 41d5cf8..4c56bbb 100644
--- a/target/s390x/translate_vx.inc.c
+++ b/target/s390x/translate_vx.inc.c
@@ -57,13 +57,13 @@ 
 #define FPF_LONG        3
 #define FPF_EXT         4

-static inline bool valid_vec_element(uint8_t enr, TCGMemOp es)
+static inline bool valid_vec_element(uint8_t enr, MemOp es)
 {
     return !(enr & ~(NUM_VEC_ELEMENTS(es) - 1));
 }

 static void read_vec_element_i64(TCGv_i64 dst, uint8_t reg, uint8_t enr,
-                                 TCGMemOp memop)
+                                 MemOp memop)
 {
     const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);

@@ -96,7 +96,7 @@  static void read_vec_element_i64(TCGv_i64 dst, uint8_t reg, uint8_t enr,
 }

 static void read_vec_element_i32(TCGv_i32 dst, uint8_t reg, uint8_t enr,
-                                 TCGMemOp memop)
+                                 MemOp memop)
 {
     const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);

@@ -123,7 +123,7 @@  static void read_vec_element_i32(TCGv_i32 dst, uint8_t reg, uint8_t enr,
 }

 static void write_vec_element_i64(TCGv_i64 src, int reg, uint8_t enr,
-                                  TCGMemOp memop)
+                                  MemOp memop)
 {
     const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);

@@ -146,7 +146,7 @@  static void write_vec_element_i64(TCGv_i64 src, int reg, uint8_t enr,
 }

 static void write_vec_element_i32(TCGv_i32 src, int reg, uint8_t enr,
-                                  TCGMemOp memop)
+                                  MemOp memop)
 {
     const int offs = vec_reg_offset(reg, enr, memop & MO_SIZE);

diff --git a/target/sparc/translate.c b/target/sparc/translate.c
index 091bab5..bef9ce6 100644
--- a/target/sparc/translate.c
+++ b/target/sparc/translate.c
@@ -2019,7 +2019,7 @@  static inline void gen_ne_fop_QD(DisasContext *dc, int rd, int rs,
 }

 static void gen_swap(DisasContext *dc, TCGv dst, TCGv src,
-                     TCGv addr, int mmu_idx, TCGMemOp memop)
+                     TCGv addr, int mmu_idx, MemOp memop)
 {
     gen_address_mask(dc, addr);
     tcg_gen_atomic_xchg_tl(dst, addr, src, mmu_idx, memop);
@@ -2050,10 +2050,10 @@  typedef struct {
     ASIType type;
     int asi;
     int mem_idx;
-    TCGMemOp memop;
+    MemOp memop;
 } DisasASI;

-static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
+static DisasASI get_asi(DisasContext *dc, int insn, MemOp memop)
 {
     int asi = GET_FIELD(insn, 19, 26);
     ASIType type = GET_ASI_HELPER;
@@ -2267,7 +2267,7 @@  static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
 }

 static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
-                       int insn, TCGMemOp memop)
+                       int insn, MemOp memop)
 {
     DisasASI da = get_asi(dc, insn, memop);

@@ -2305,7 +2305,7 @@  static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
 }

 static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
-                       int insn, TCGMemOp memop)
+                       int insn, MemOp memop)
 {
     DisasASI da = get_asi(dc, insn, memop);

@@ -2511,7 +2511,7 @@  static void gen_ldf_asi(DisasContext *dc, TCGv addr,
     case GET_ASI_BLOCK:
         /* Valid for lddfa on aligned registers only.  */
         if (size == 8 && (rd & 7) == 0) {
-            TCGMemOp memop;
+            MemOp memop;
             TCGv eight;
             int i;

@@ -2625,7 +2625,7 @@  static void gen_stf_asi(DisasContext *dc, TCGv addr,
     case GET_ASI_BLOCK:
         /* Valid for stdfa on aligned registers only.  */
         if (size == 8 && (rd & 7) == 0) {
-            TCGMemOp memop;
+            MemOp memop;
             TCGv eight;
             int i;

diff --git a/target/tilegx/translate.c b/target/tilegx/translate.c
index c46a4ab..68dd4aa 100644
--- a/target/tilegx/translate.c
+++ b/target/tilegx/translate.c
@@ -290,7 +290,7 @@  static void gen_cmul2(TCGv tdest, TCGv tsrca, TCGv tsrcb, int sh, int rd)
 }

 static TileExcp gen_st_opcode(DisasContext *dc, unsigned dest, unsigned srca,
-                              unsigned srcb, TCGMemOp memop, const char *name)
+                              unsigned srcb, MemOp memop, const char *name)
 {
     if (dest) {
         return TILEGX_EXCP_OPCODE_UNKNOWN;
@@ -305,7 +305,7 @@  static TileExcp gen_st_opcode(DisasContext *dc, unsigned dest, unsigned srca,
 }

 static TileExcp gen_st_add_opcode(DisasContext *dc, unsigned srca, unsigned srcb,
-                                  int imm, TCGMemOp memop, const char *name)
+                                  int imm, MemOp memop, const char *name)
 {
     TCGv tsrca = load_gr(dc, srca);
     TCGv tsrcb = load_gr(dc, srcb);
@@ -496,7 +496,7 @@  static TileExcp gen_rr_opcode(DisasContext *dc, unsigned opext,
 {
     TCGv tdest, tsrca;
     const char *mnemonic;
-    TCGMemOp memop;
+    MemOp memop;
     TileExcp ret = TILEGX_EXCP_NONE;
     bool prefetch_nofault = false;

@@ -1478,7 +1478,7 @@  static TileExcp gen_rri_opcode(DisasContext *dc, unsigned opext,
     TCGv tsrca = load_gr(dc, srca);
     bool prefetch_nofault = false;
     const char *mnemonic;
-    TCGMemOp memop;
+    MemOp memop;
     int i2, i3;
     TCGv t0;

@@ -2106,7 +2106,7 @@  static TileExcp decode_y2(DisasContext *dc, tilegx_bundle_bits bundle)
     unsigned srca = get_SrcA_Y2(bundle);
     unsigned srcbdest = get_SrcBDest_Y2(bundle);
     const char *mnemonic;
-    TCGMemOp memop;
+    MemOp memop;
     bool prefetch_nofault = false;

     switch (OEY2(opc, mode)) {
diff --git a/target/tricore/translate.c b/target/tricore/translate.c
index dc2a65f..87a5f50 100644
--- a/target/tricore/translate.c
+++ b/target/tricore/translate.c
@@ -227,7 +227,7 @@  static inline void generate_trap(DisasContext *ctx, int class, int tin);
 /* Functions for load/save to/from memory */

 static inline void gen_offset_ld(DisasContext *ctx, TCGv r1, TCGv r2,
-                                 int16_t con, TCGMemOp mop)
+                                 int16_t con, MemOp mop)
 {
     TCGv temp = tcg_temp_new();
     tcg_gen_addi_tl(temp, r2, con);
@@ -236,7 +236,7 @@  static inline void gen_offset_ld(DisasContext *ctx, TCGv r1, TCGv r2,
 }

 static inline void gen_offset_st(DisasContext *ctx, TCGv r1, TCGv r2,
-                                 int16_t con, TCGMemOp mop)
+                                 int16_t con, MemOp mop)
 {
     TCGv temp = tcg_temp_new();
     tcg_gen_addi_tl(temp, r2, con);
@@ -284,7 +284,7 @@  static void gen_offset_ld_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
 }

 static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
-                           TCGMemOp mop)
+                           MemOp mop)
 {
     TCGv temp = tcg_temp_new();
     tcg_gen_addi_tl(temp, r2, off);
@@ -294,7 +294,7 @@  static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
 }

 static void gen_ld_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
-                           TCGMemOp mop)
+                           MemOp mop)
 {
     TCGv temp = tcg_temp_new();
     tcg_gen_addi_tl(temp, r2, off);
diff --git a/tcg/README b/tcg/README
index 21fcdf7..b4382fa 100644
--- a/tcg/README
+++ b/tcg/README
@@ -512,7 +512,7 @@  Both t0 and t1 may be split into little-endian ordered pairs of registers
 if dealing with 64-bit quantities on a 32-bit host.

 The memidx selects the qemu tlb index to use (e.g. user or kernel access).
-The flags are the TCGMemOp bits, selecting the sign, width, and endianness
+The flags are the MemOp bits, selecting the sign, width, and endianness
 of the memory access.

 For a 32-bit host, qemu_ld/st_i64 is guaranteed to only be used with a
diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c
index 0713448..3f92101 100644
--- a/tcg/aarch64/tcg-target.inc.c
+++ b/tcg/aarch64/tcg-target.inc.c
@@ -1423,7 +1423,7 @@  static inline void tcg_out_rev16(TCGContext *s, TCGReg rd, TCGReg rn)
     tcg_out_insn(s, 3507, REV16, TCG_TYPE_I32, rd, rn);
 }

-static inline void tcg_out_sxt(TCGContext *s, TCGType ext, TCGMemOp s_bits,
+static inline void tcg_out_sxt(TCGContext *s, TCGType ext, MemOp s_bits,
                                TCGReg rd, TCGReg rn)
 {
     /* Using ALIASes SXTB, SXTH, SXTW, of SBFM Xd, Xn, #0, #7|15|31 */
@@ -1431,7 +1431,7 @@  static inline void tcg_out_sxt(TCGContext *s, TCGType ext, TCGMemOp s_bits,
     tcg_out_sbfm(s, ext, rd, rn, 0, bits);
 }

-static inline void tcg_out_uxt(TCGContext *s, TCGMemOp s_bits,
+static inline void tcg_out_uxt(TCGContext *s, MemOp s_bits,
                                TCGReg rd, TCGReg rn)
 {
     /* Using ALIASes UXTB, UXTH of UBFM Wd, Wn, #0, #7|15 */
@@ -1580,8 +1580,8 @@  static inline void tcg_out_adr(TCGContext *s, TCGReg rd, void *target)
 static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp size = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp size = opc & MO_SIZE;

     if (!reloc_pc19(lb->label_ptr[0], s->code_ptr)) {
         return false;
@@ -1605,8 +1605,8 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp size = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp size = opc & MO_SIZE;

     if (!reloc_pc19(lb->label_ptr[0], s->code_ptr)) {
         return false;
@@ -1649,7 +1649,7 @@  QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) != 8);
    slow path for the failure case, which will be patched later when finalizing
    the slow path. Generated code returns the host addend in X1,
    clobbers X0,X2,X3,TMP. */
-static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, TCGMemOp opc,
+static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, MemOp opc,
                              tcg_insn_unit **label_ptr, int mem_index,
                              bool is_read)
 {
@@ -1709,11 +1709,11 @@  static void tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, TCGMemOp opc,

 #endif /* CONFIG_SOFTMMU */

-static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp memop, TCGType ext,
+static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp memop, TCGType ext,
                                    TCGReg data_r, TCGReg addr_r,
                                    TCGType otype, TCGReg off_r)
 {
-    const TCGMemOp bswap = memop & MO_BSWAP;
+    const MemOp bswap = memop & MO_BSWAP;

     switch (memop & MO_SSIZE) {
     case MO_UB:
@@ -1765,11 +1765,11 @@  static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp memop, TCGType ext,
     }
 }

-static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp memop,
+static void tcg_out_qemu_st_direct(TCGContext *s, MemOp memop,
                                    TCGReg data_r, TCGReg addr_r,
                                    TCGType otype, TCGReg off_r)
 {
-    const TCGMemOp bswap = memop & MO_BSWAP;
+    const MemOp bswap = memop & MO_BSWAP;

     switch (memop & MO_SIZE) {
     case MO_8:
@@ -1804,7 +1804,7 @@  static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp memop,
 static void tcg_out_qemu_ld(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
                             TCGMemOpIdx oi, TCGType ext)
 {
-    TCGMemOp memop = get_memop(oi);
+    MemOp memop = get_memop(oi);
     const TCGType otype = TARGET_LONG_BITS == 64 ? TCG_TYPE_I64 : TCG_TYPE_I32;
 #ifdef CONFIG_SOFTMMU
     unsigned mem_index = get_mmuidx(oi);
@@ -1829,7 +1829,7 @@  static void tcg_out_qemu_ld(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
 static void tcg_out_qemu_st(TCGContext *s, TCGReg data_reg, TCGReg addr_reg,
                             TCGMemOpIdx oi)
 {
-    TCGMemOp memop = get_memop(oi);
+    MemOp memop = get_memop(oi);
     const TCGType otype = TARGET_LONG_BITS == 64 ? TCG_TYPE_I64 : TCG_TYPE_I32;
 #ifdef CONFIG_SOFTMMU
     unsigned mem_index = get_mmuidx(oi);
diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
index ece88dc..94d80d7 100644
--- a/tcg/arm/tcg-target.inc.c
+++ b/tcg/arm/tcg-target.inc.c
@@ -1233,7 +1233,7 @@  QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) != 4);
    containing the addend of the tlb entry.  Clobbers R0, R1, R2, TMP.  */

 static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addrlo, TCGReg addrhi,
-                               TCGMemOp opc, int mem_index, bool is_load)
+                               MemOp opc, int mem_index, bool is_load)
 {
     int cmp_off = (is_load ? offsetof(CPUTLBEntry, addr_read)
                    : offsetof(CPUTLBEntry, addr_write));
@@ -1348,7 +1348,7 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGReg argreg, datalo, datahi;
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     void *func;

     if (!reloc_pc24(lb->label_ptr[0], s->code_ptr)) {
@@ -1412,7 +1412,7 @@  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGReg argreg, datalo, datahi;
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);

     if (!reloc_pc24(lb->label_ptr[0], s->code_ptr)) {
         return false;
@@ -1453,11 +1453,11 @@  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 }
 #endif /* SOFTMMU */

-static inline void tcg_out_qemu_ld_index(TCGContext *s, TCGMemOp opc,
+static inline void tcg_out_qemu_ld_index(TCGContext *s, MemOp opc,
                                          TCGReg datalo, TCGReg datahi,
                                          TCGReg addrlo, TCGReg addend)
 {
-    TCGMemOp bswap = opc & MO_BSWAP;
+    MemOp bswap = opc & MO_BSWAP;

     switch (opc & MO_SSIZE) {
     case MO_UB:
@@ -1514,11 +1514,11 @@  static inline void tcg_out_qemu_ld_index(TCGContext *s, TCGMemOp opc,
     }
 }

-static inline void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc,
+static inline void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc,
                                           TCGReg datalo, TCGReg datahi,
                                           TCGReg addrlo)
 {
-    TCGMemOp bswap = opc & MO_BSWAP;
+    MemOp bswap = opc & MO_BSWAP;

     switch (opc & MO_SSIZE) {
     case MO_UB:
@@ -1577,7 +1577,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
 {
     TCGReg addrlo, datalo, datahi, addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #ifdef CONFIG_SOFTMMU
     int mem_index;
     TCGReg addend;
@@ -1614,11 +1614,11 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
 #endif
 }

-static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, TCGMemOp opc,
+static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, MemOp opc,
                                          TCGReg datalo, TCGReg datahi,
                                          TCGReg addrlo, TCGReg addend)
 {
-    TCGMemOp bswap = opc & MO_BSWAP;
+    MemOp bswap = opc & MO_BSWAP;

     switch (opc & MO_SIZE) {
     case MO_8:
@@ -1659,11 +1659,11 @@  static inline void tcg_out_qemu_st_index(TCGContext *s, int cond, TCGMemOp opc,
     }
 }

-static inline void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp opc,
+static inline void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc,
                                           TCGReg datalo, TCGReg datahi,
                                           TCGReg addrlo)
 {
-    TCGMemOp bswap = opc & MO_BSWAP;
+    MemOp bswap = opc & MO_BSWAP;

     switch (opc & MO_SIZE) {
     case MO_8:
@@ -1708,7 +1708,7 @@  static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
 {
     TCGReg addrlo, datalo, datahi, addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #ifdef CONFIG_SOFTMMU
     int mem_index;
     TCGReg addend;
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 6ddeebf..9d8ed97 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -1697,7 +1697,7 @@  static void * const qemu_st_helpers[16] = {
    First argument register is clobbered.  */

 static inline void tcg_out_tlb_load(TCGContext *s, TCGReg addrlo, TCGReg addrhi,
-                                    int mem_index, TCGMemOp opc,
+                                    int mem_index, MemOp opc,
                                     tcg_insn_unit **label_ptr, int which)
 {
     const TCGReg r0 = TCG_REG_L0;
@@ -1810,7 +1810,7 @@  static void add_qemu_ldst_label(TCGContext *s, bool is_ld, bool is_64,
 static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     TCGReg data_reg;
     tcg_insn_unit **label_ptr = &l->label_ptr[0];
     int rexw = (l->type == TCG_TYPE_I64 ? P_REXW : 0);
@@ -1895,8 +1895,8 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp s_bits = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp s_bits = opc & MO_SIZE;
     tcg_insn_unit **label_ptr = &l->label_ptr[0];
     TCGReg retaddr;

@@ -1995,10 +1995,10 @@  static inline int setup_guest_base_seg(void)

 static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
                                    TCGReg base, int index, intptr_t ofs,
-                                   int seg, bool is64, TCGMemOp memop)
+                                   int seg, bool is64, MemOp memop)
 {
-    const TCGMemOp real_bswap = memop & MO_BSWAP;
-    TCGMemOp bswap = real_bswap;
+    const MemOp real_bswap = memop & MO_BSWAP;
+    MemOp bswap = real_bswap;
     int rexw = is64 * P_REXW;
     int movop = OPC_MOVL_GvEv;

@@ -2103,7 +2103,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
     TCGReg datalo, datahi, addrlo;
     TCGReg addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     int mem_index;
     tcg_insn_unit *label_ptr[2];
@@ -2137,15 +2137,15 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)

 static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
                                    TCGReg base, int index, intptr_t ofs,
-                                   int seg, TCGMemOp memop)
+                                   int seg, MemOp memop)
 {
     /* ??? Ideally we wouldn't need a scratch register.  For user-only,
        we could perform the bswap twice to restore the original value
        instead of moving to the scratch.  But as it is, the L constraint
        means that TCG_REG_L0 is definitely free here.  */
     const TCGReg scratch = TCG_REG_L0;
-    const TCGMemOp real_bswap = memop & MO_BSWAP;
-    TCGMemOp bswap = real_bswap;
+    const MemOp real_bswap = memop & MO_BSWAP;
+    MemOp bswap = real_bswap;
     int movop = OPC_MOVL_EvGv;

     if (have_movbe && real_bswap) {
@@ -2221,7 +2221,7 @@  static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
     TCGReg datalo, datahi, addrlo;
     TCGReg addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     int mem_index;
     tcg_insn_unit *label_ptr[2];
diff --git a/tcg/mips/tcg-target.inc.c b/tcg/mips/tcg-target.inc.c
index 41bff32..5442167 100644
--- a/tcg/mips/tcg-target.inc.c
+++ b/tcg/mips/tcg-target.inc.c
@@ -1215,7 +1215,7 @@  static void tcg_out_tlb_load(TCGContext *s, TCGReg base, TCGReg addrl,
                              TCGReg addrh, TCGMemOpIdx oi,
                              tcg_insn_unit *label_ptr[2], bool is_load)
 {
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     unsigned s_bits = opc & MO_SIZE;
     unsigned a_bits = get_alignment_bits(opc);
     int mem_index = get_mmuidx(oi);
@@ -1313,7 +1313,7 @@  static void add_qemu_ldst_label(TCGContext *s, int is_ld, TCGMemOpIdx oi,
 static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     TCGReg v0;
     int i;

@@ -1363,8 +1363,8 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp s_bits = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp s_bits = opc & MO_SIZE;
     int i;

     /* resolve label address */
@@ -1413,7 +1413,7 @@  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 #endif

 static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg lo, TCGReg hi,
-                                   TCGReg base, TCGMemOp opc, bool is_64)
+                                   TCGReg base, MemOp opc, bool is_64)
 {
     switch (opc & (MO_SSIZE | MO_BSWAP)) {
     case MO_UB:
@@ -1521,7 +1521,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg addr_regl, addr_regh __attribute__((unused));
     TCGReg data_regl, data_regh;
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     tcg_insn_unit *label_ptr[2];
 #endif
@@ -1558,7 +1558,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
 }

 static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg lo, TCGReg hi,
-                                   TCGReg base, TCGMemOp opc)
+                                   TCGReg base, MemOp opc)
 {
     /* Don't clutter the code below with checks to avoid bswapping ZERO.  */
     if ((lo | hi) == 0) {
@@ -1624,7 +1624,7 @@  static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg addr_regl, addr_regh __attribute__((unused));
     TCGReg data_regl, data_regh;
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     tcg_insn_unit *label_ptr[2];
 #endif
diff --git a/tcg/optimize.c b/tcg/optimize.c
index d2424de..a89ffda 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1014,7 +1014,7 @@  void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(qemu_ld):
             {
                 TCGMemOpIdx oi = op->args[nb_oargs + nb_iargs];
-                TCGMemOp mop = get_memop(oi);
+                MemOp mop = get_memop(oi);
                 if (!(mop & MO_SIGN)) {
                     mask = (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
                 }
diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
index 852b894..815edac 100644
--- a/tcg/ppc/tcg-target.inc.c
+++ b/tcg/ppc/tcg-target.inc.c
@@ -1506,7 +1506,7 @@  QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -32768);
    in CR7, loads the addend of the TLB into R3, and returns the register
    containing the guest address (zero-extended into R4).  Clobbers R0 and R2. */

-static TCGReg tcg_out_tlb_read(TCGContext *s, TCGMemOp opc,
+static TCGReg tcg_out_tlb_read(TCGContext *s, MemOp opc,
                                TCGReg addrlo, TCGReg addrhi,
                                int mem_index, bool is_read)
 {
@@ -1633,7 +1633,7 @@  static void add_qemu_ldst_label(TCGContext *s, bool is_ld, TCGMemOpIdx oi,
 static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     TCGReg hi, lo, arg = TCG_REG_R3;

     if (!reloc_pc14(lb->label_ptr[0], s->code_ptr)) {
@@ -1680,8 +1680,8 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
 {
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp s_bits = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp s_bits = opc & MO_SIZE;
     TCGReg hi, lo, arg = TCG_REG_R3;

     if (!reloc_pc14(lb->label_ptr[0], s->code_ptr)) {
@@ -1744,7 +1744,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg datalo, datahi, addrlo, rbase;
     TCGReg addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc, s_bits;
+    MemOp opc, s_bits;
 #ifdef CONFIG_SOFTMMU
     int mem_index;
     tcg_insn_unit *label_ptr;
@@ -1819,7 +1819,7 @@  static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg datalo, datahi, addrlo, rbase;
     TCGReg addrhi __attribute__((unused));
     TCGMemOpIdx oi;
-    TCGMemOp opc, s_bits;
+    MemOp opc, s_bits;
 #ifdef CONFIG_SOFTMMU
     int mem_index;
     tcg_insn_unit *label_ptr;
diff --git a/tcg/riscv/tcg-target.inc.c b/tcg/riscv/tcg-target.inc.c
index 3e76bf5..7018509 100644
--- a/tcg/riscv/tcg-target.inc.c
+++ b/tcg/riscv/tcg-target.inc.c
@@ -970,7 +970,7 @@  static void tcg_out_tlb_load(TCGContext *s, TCGReg addrl,
                              TCGReg addrh, TCGMemOpIdx oi,
                              tcg_insn_unit **label_ptr, bool is_load)
 {
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     unsigned s_bits = opc & MO_SIZE;
     unsigned a_bits = get_alignment_bits(opc);
     tcg_target_long compare_mask;
@@ -1044,7 +1044,7 @@  static void add_qemu_ldst_label(TCGContext *s, int is_ld, TCGMemOpIdx oi,
 static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
     TCGReg a0 = tcg_target_call_iarg_regs[0];
     TCGReg a1 = tcg_target_call_iarg_regs[1];
     TCGReg a2 = tcg_target_call_iarg_regs[2];
@@ -1077,8 +1077,8 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 {
     TCGMemOpIdx oi = l->oi;
-    TCGMemOp opc = get_memop(oi);
-    TCGMemOp s_bits = opc & MO_SIZE;
+    MemOp opc = get_memop(oi);
+    MemOp s_bits = opc & MO_SIZE;
     TCGReg a0 = tcg_target_call_iarg_regs[0];
     TCGReg a1 = tcg_target_call_iarg_regs[1];
     TCGReg a2 = tcg_target_call_iarg_regs[2];
@@ -1121,9 +1121,9 @@  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
 #endif /* CONFIG_SOFTMMU */

 static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg lo, TCGReg hi,
-                                   TCGReg base, TCGMemOp opc, bool is_64)
+                                   TCGReg base, MemOp opc, bool is_64)
 {
-    const TCGMemOp bswap = opc & MO_BSWAP;
+    const MemOp bswap = opc & MO_BSWAP;

     /* We don't yet handle byteswapping, assert */
     g_assert(!bswap);
@@ -1172,7 +1172,7 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg addr_regl, addr_regh __attribute__((unused));
     TCGReg data_regl, data_regh;
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     tcg_insn_unit *label_ptr[1];
 #endif
@@ -1208,9 +1208,9 @@  static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64)
 }

 static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg lo, TCGReg hi,
-                                   TCGReg base, TCGMemOp opc)
+                                   TCGReg base, MemOp opc)
 {
-    const TCGMemOp bswap = opc & MO_BSWAP;
+    const MemOp bswap = opc & MO_BSWAP;

     /* We don't yet handle byteswapping, assert */
     g_assert(!bswap);
@@ -1243,7 +1243,7 @@  static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64)
     TCGReg addr_regl, addr_regh __attribute__((unused));
     TCGReg data_regl, data_regh;
     TCGMemOpIdx oi;
-    TCGMemOp opc;
+    MemOp opc;
 #if defined(CONFIG_SOFTMMU)
     tcg_insn_unit *label_ptr[1];
 #endif
diff --git a/tcg/s390/tcg-target.inc.c b/tcg/s390/tcg-target.inc.c
index fe42939..8aaa4ce 100644
--- a/tcg/s390/tcg-target.inc.c
+++ b/tcg/s390/tcg-target.inc.c
@@ -1430,7 +1430,7 @@  static void tcg_out_call(TCGContext *s, tcg_insn_unit *dest)
     }
 }

-static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
+static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc, TCGReg data,
                                    TCGReg base, TCGReg index, int disp)
 {
     switch (opc & (MO_SSIZE | MO_BSWAP)) {
@@ -1489,7 +1489,7 @@  static void tcg_out_qemu_ld_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
     }
 }

-static void tcg_out_qemu_st_direct(TCGContext *s, TCGMemOp opc, TCGReg data,
+static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg data,
                                    TCGReg base, TCGReg index, int disp)
 {
     switch (opc & (MO_SIZE | MO_BSWAP)) {
@@ -1544,7 +1544,7 @@  QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -(1 << 19));

 /* Load and compare a TLB entry, leaving the flags set.  Loads the TLB
    addend into R2.  Returns a register with the santitized guest address.  */
-static TCGReg tcg_out_tlb_read(TCGContext* s, TCGReg addr_reg, TCGMemOp opc,
+static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg addr_reg, MemOp opc,
                                int mem_index, bool is_ld)
 {
     unsigned s_bits = opc & MO_SIZE;
@@ -1614,7 +1614,7 @@  static bool tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
     TCGReg addr_reg = lb->addrlo_reg;
     TCGReg data_reg = lb->datalo_reg;
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);

     if (!patch_reloc(lb->label_ptr[0], R_390_PC16DBL,
                      (intptr_t)s->code_ptr, 2)) {
@@ -1639,7 +1639,7 @@  static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
     TCGReg addr_reg = lb->addrlo_reg;
     TCGReg data_reg = lb->datalo_reg;
     TCGMemOpIdx oi = lb->oi;
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);

     if (!patch_reloc(lb->label_ptr[0], R_390_PC16DBL,
                      (intptr_t)s->code_ptr, 2)) {
@@ -1694,7 +1694,7 @@  static void tcg_prepare_user_ldst(TCGContext *s, TCGReg *addr_reg,
 static void tcg_out_qemu_ld(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
                             TCGMemOpIdx oi)
 {
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
 #ifdef CONFIG_SOFTMMU
     unsigned mem_index = get_mmuidx(oi);
     tcg_insn_unit *label_ptr;
@@ -1721,7 +1721,7 @@  static void tcg_out_qemu_ld(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
 static void tcg_out_qemu_st(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
                             TCGMemOpIdx oi)
 {
-    TCGMemOp opc = get_memop(oi);
+    MemOp opc = get_memop(oi);
 #ifdef CONFIG_SOFTMMU
     unsigned mem_index = get_mmuidx(oi);
     tcg_insn_unit *label_ptr;
diff --git a/tcg/sparc/tcg-target.inc.c b/tcg/sparc/tcg-target.inc.c
index 10b1cea..d7986cd 100644
--- a/tcg/sparc/tcg-target.inc.c
+++ b/tcg/sparc/tcg-target.inc.c
@@ -1081,7 +1081,7 @@  QEMU_BUILD_BUG_ON(TLB_MASK_TABLE_OFS(0) < -(1 << 12));
    is in the returned register, maybe %o0.  The TLB addend is in %o1.  */

 static TCGReg tcg_out_tlb_load(TCGContext *s, TCGReg addr, int mem_index,
-                               TCGMemOp opc, int which)
+                               MemOp opc, int which)
 {
     int fast_off = TLB_MASK_TABLE_OFS(mem_index);
     int mask_off = fast_off + offsetof(CPUTLBDescFast, mask);
@@ -1164,7 +1164,7 @@  static const int qemu_st_opc[16] = {
 static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr,
                             TCGMemOpIdx oi, bool is_64)
 {
-    TCGMemOp memop = get_memop(oi);
+    MemOp memop = get_memop(oi);
 #ifdef CONFIG_SOFTMMU
     unsigned memi = get_mmuidx(oi);
     TCGReg addrz, param;
@@ -1246,7 +1246,7 @@  static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr,
 static void tcg_out_qemu_st(TCGContext *s, TCGReg data, TCGReg addr,
                             TCGMemOpIdx oi)
 {
-    TCGMemOp memop = get_memop(oi);
+    MemOp memop = get_memop(oi);
 #ifdef CONFIG_SOFTMMU
     unsigned memi = get_mmuidx(oi);
     TCGReg addrz, param;
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
index 587d092..e87c327 100644
--- a/tcg/tcg-op.c
+++ b/tcg/tcg-op.c
@@ -2714,7 +2714,7 @@  void tcg_gen_lookup_and_goto_ptr(void)
     }
 }

-static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
+static inline MemOp tcg_canonicalize_memop(MemOp op, bool is64, bool st)
 {
     /* Trigger the asserts within as early as possible.  */
     (void)get_alignment_bits(op);
@@ -2743,7 +2743,7 @@  static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
 }

 static void gen_ldst_i32(TCGOpcode opc, TCGv_i32 val, TCGv addr,
-                         TCGMemOp memop, TCGArg idx)
+                         MemOp memop, TCGArg idx)
 {
     TCGMemOpIdx oi = make_memop_idx(memop, idx);
 #if TARGET_LONG_BITS == 32
@@ -2758,7 +2758,7 @@  static void gen_ldst_i32(TCGOpcode opc, TCGv_i32 val, TCGv addr,
 }

 static void gen_ldst_i64(TCGOpcode opc, TCGv_i64 val, TCGv addr,
-                         TCGMemOp memop, TCGArg idx)
+                         MemOp memop, TCGArg idx)
 {
     TCGMemOpIdx oi = make_memop_idx(memop, idx);
 #if TARGET_LONG_BITS == 32
@@ -2788,9 +2788,9 @@  static void tcg_gen_req_mo(TCGBar type)
     }
 }

-void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
+void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
 {
-    TCGMemOp orig_memop;
+    MemOp orig_memop;

     tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
     memop = tcg_canonicalize_memop(memop, 0, 0);
@@ -2825,7 +2825,7 @@  void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
     }
 }

-void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
+void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
 {
     TCGv_i32 swap = NULL;

@@ -2858,9 +2858,9 @@  void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
     }
 }

-void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
+void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
 {
-    TCGMemOp orig_memop;
+    MemOp orig_memop;

     if (TCG_TARGET_REG_BITS == 32 && (memop & MO_SIZE) < MO_64) {
         tcg_gen_qemu_ld_i32(TCGV_LOW(val), addr, idx, memop);
@@ -2911,7 +2911,7 @@  void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
     }
 }

-void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
+void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
 {
     TCGv_i64 swap = NULL;

@@ -2953,7 +2953,7 @@  void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
     }
 }

-static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, TCGMemOp opc)
+static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, MemOp opc)
 {
     switch (opc & MO_SSIZE) {
     case MO_SB:
@@ -2974,7 +2974,7 @@  static void tcg_gen_ext_i32(TCGv_i32 ret, TCGv_i32 val, TCGMemOp opc)
     }
 }

-static void tcg_gen_ext_i64(TCGv_i64 ret, TCGv_i64 val, TCGMemOp opc)
+static void tcg_gen_ext_i64(TCGv_i64 ret, TCGv_i64 val, MemOp opc)
 {
     switch (opc & MO_SSIZE) {
     case MO_SB:
@@ -3034,7 +3034,7 @@  static void * const table_cmpxchg[16] = {
 };

 void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv addr, TCGv_i32 cmpv,
-                                TCGv_i32 newv, TCGArg idx, TCGMemOp memop)
+                                TCGv_i32 newv, TCGArg idx, MemOp memop)
 {
     memop = tcg_canonicalize_memop(memop, 0, 0);

@@ -3078,7 +3078,7 @@  void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv addr, TCGv_i32 cmpv,
 }

 void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv addr, TCGv_i64 cmpv,
-                                TCGv_i64 newv, TCGArg idx, TCGMemOp memop)
+                                TCGv_i64 newv, TCGArg idx, MemOp memop)
 {
     memop = tcg_canonicalize_memop(memop, 1, 0);

@@ -3142,7 +3142,7 @@  void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv addr, TCGv_i64 cmpv,
 }

 static void do_nonatomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
-                                TCGArg idx, TCGMemOp memop, bool new_val,
+                                TCGArg idx, MemOp memop, bool new_val,
                                 void (*gen)(TCGv_i32, TCGv_i32, TCGv_i32))
 {
     TCGv_i32 t1 = tcg_temp_new_i32();
@@ -3160,7 +3160,7 @@  static void do_nonatomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
 }

 static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
-                             TCGArg idx, TCGMemOp memop, void * const table[])
+                             TCGArg idx, MemOp memop, void * const table[])
 {
     gen_atomic_op_i32 gen;

@@ -3185,7 +3185,7 @@  static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
 }

 static void do_nonatomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
-                                TCGArg idx, TCGMemOp memop, bool new_val,
+                                TCGArg idx, MemOp memop, bool new_val,
                                 void (*gen)(TCGv_i64, TCGv_i64, TCGv_i64))
 {
     TCGv_i64 t1 = tcg_temp_new_i64();
@@ -3203,7 +3203,7 @@  static void do_nonatomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
 }

 static void do_atomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
-                             TCGArg idx, TCGMemOp memop, void * const table[])
+                             TCGArg idx, MemOp memop, void * const table[])
 {
     memop = tcg_canonicalize_memop(memop, 1, 0);

@@ -3257,7 +3257,7 @@  static void * const table_##NAME[16] = {                                \
     WITH_ATOMIC64([MO_64 | MO_BE] = gen_helper_atomic_##NAME##q_be)     \
 };                                                                      \
 void tcg_gen_atomic_##NAME##_i32                                        \
-    (TCGv_i32 ret, TCGv addr, TCGv_i32 val, TCGArg idx, TCGMemOp memop) \
+    (TCGv_i32 ret, TCGv addr, TCGv_i32 val, TCGArg idx, MemOp memop)    \
 {                                                                       \
     if (tcg_ctx->tb_cflags & CF_PARALLEL) {                             \
         do_atomic_op_i32(ret, addr, val, idx, memop, table_##NAME);     \
@@ -3267,7 +3267,7 @@  void tcg_gen_atomic_##NAME##_i32                                        \
     }                                                                   \
 }                                                                       \
 void tcg_gen_atomic_##NAME##_i64                                        \
-    (TCGv_i64 ret, TCGv addr, TCGv_i64 val, TCGArg idx, TCGMemOp memop) \
+    (TCGv_i64 ret, TCGv addr, TCGv_i64 val, TCGArg idx, MemOp memop)    \
 {                                                                       \
     if (tcg_ctx->tb_cflags & CF_PARALLEL) {                             \
         do_atomic_op_i64(ret, addr, val, idx, memop, table_##NAME);     \
diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
index 2d4dd5c..e9cf172 100644
--- a/tcg/tcg-op.h
+++ b/tcg/tcg-op.h
@@ -851,10 +851,10 @@  void tcg_gen_lookup_and_goto_ptr(void);
 #define tcg_gen_qemu_st_tl tcg_gen_qemu_st_i64
 #endif

-void tcg_gen_qemu_ld_i32(TCGv_i32, TCGv, TCGArg, TCGMemOp);
-void tcg_gen_qemu_st_i32(TCGv_i32, TCGv, TCGArg, TCGMemOp);
-void tcg_gen_qemu_ld_i64(TCGv_i64, TCGv, TCGArg, TCGMemOp);
-void tcg_gen_qemu_st_i64(TCGv_i64, TCGv, TCGArg, TCGMemOp);
+void tcg_gen_qemu_ld_i32(TCGv_i32, TCGv, TCGArg, MemOp);
+void tcg_gen_qemu_st_i32(TCGv_i32, TCGv, TCGArg, MemOp);
+void tcg_gen_qemu_ld_i64(TCGv_i64, TCGv, TCGArg, MemOp);
+void tcg_gen_qemu_st_i64(TCGv_i64, TCGv, TCGArg, MemOp);

 static inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
 {
@@ -912,46 +912,46 @@  static inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
 }

 void tcg_gen_atomic_cmpxchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGv_i32,
-                                TCGArg, TCGMemOp);
+                                TCGArg, MemOp);
 void tcg_gen_atomic_cmpxchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGv_i64,
-                                TCGArg, TCGMemOp);
-
-void tcg_gen_atomic_xchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_xchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-
-void tcg_gen_atomic_fetch_add_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_add_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_and_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_and_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_or_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_or_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_xor_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_xor_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_smin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_smin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_umin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_umin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_smax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_smax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_umax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_fetch_umax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-
-void tcg_gen_atomic_add_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_add_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_and_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_and_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_or_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_or_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_xor_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_xor_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_smin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_smin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_umin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_umin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_smax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_smax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
-void tcg_gen_atomic_umax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, TCGMemOp);
-void tcg_gen_atomic_umax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, TCGMemOp);
+                                TCGArg, MemOp);
+
+void tcg_gen_atomic_xchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_xchg_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+
+void tcg_gen_atomic_fetch_add_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_add_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_and_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_and_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_or_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_or_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_xor_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_xor_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_smin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_smin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_umin_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_umin_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_smax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_smax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_umax_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_fetch_umax_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+
+void tcg_gen_atomic_add_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_add_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_and_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_and_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_or_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_or_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_xor_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_xor_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_smin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_smin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_umin_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_umin_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_smax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_smax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);
+void tcg_gen_atomic_umax_fetch_i32(TCGv_i32, TCGv, TCGv_i32, TCGArg, MemOp);
+void tcg_gen_atomic_umax_fetch_i64(TCGv_i64, TCGv, TCGv_i64, TCGArg, MemOp);

 void tcg_gen_mov_vec(TCGv_vec, TCGv_vec);
 void tcg_gen_dup_i32_vec(unsigned vece, TCGv_vec, TCGv_i32);
diff --git a/tcg/tcg.c b/tcg/tcg.c
index be2c33c..aa9931f 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2056,7 +2056,7 @@  static void tcg_dump_ops(TCGContext *s, bool have_prefs)
             case INDEX_op_qemu_st_i64:
                 {
                     TCGMemOpIdx oi = op->args[k++];
-                    TCGMemOp op = get_memop(oi);
+                    MemOp op = get_memop(oi);
                     unsigned ix = get_mmuidx(oi);

                     if (op & ~(MO_AMASK | MO_BSWAP | MO_SSIZE)) {
diff --git a/tcg/tcg.h b/tcg/tcg.h
index b411e17..a37181c 100644
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -26,6 +26,7 @@ 
 #define TCG_H

 #include "cpu.h"
+#include "exec/memop.h"
 #include "exec/tb-context.h"
 #include "qemu/bitops.h"
 #include "qemu/queue.h"
@@ -309,101 +310,13 @@  typedef enum TCGType {
 #endif
 } TCGType;

-/* Constants for qemu_ld and qemu_st for the Memory Operation field.  */
-typedef enum TCGMemOp {
-    MO_8     = 0,
-    MO_16    = 1,
-    MO_32    = 2,
-    MO_64    = 3,
-    MO_SIZE  = 3,   /* Mask for the above.  */
-
-    MO_SIGN  = 4,   /* Sign-extended, otherwise zero-extended.  */
-
-    MO_BSWAP = 8,   /* Host reverse endian.  */
-#ifdef HOST_WORDS_BIGENDIAN
-    MO_LE    = MO_BSWAP,
-    MO_BE    = 0,
-#else
-    MO_LE    = 0,
-    MO_BE    = MO_BSWAP,
-#endif
-#ifdef TARGET_WORDS_BIGENDIAN
-    MO_TE    = MO_BE,
-#else
-    MO_TE    = MO_LE,
-#endif
-
-    /* MO_UNALN accesses are never checked for alignment.
-     * MO_ALIGN accesses will result in a call to the CPU's
-     * do_unaligned_access hook if the guest address is not aligned.
-     * The default depends on whether the target CPU defines ALIGNED_ONLY.
-     *
-     * Some architectures (e.g. ARMv8) need the address which is aligned
-     * to a size more than the size of the memory access.
-     * Some architectures (e.g. SPARCv9) need an address which is aligned,
-     * but less strictly than the natural alignment.
-     *
-     * MO_ALIGN supposes the alignment size is the size of a memory access.
-     *
-     * There are three options:
-     * - unaligned access permitted (MO_UNALN).
-     * - an alignment to the size of an access (MO_ALIGN);
-     * - an alignment to a specified size, which may be more or less than
-     *   the access size (MO_ALIGN_x where 'x' is a size in bytes);
-     */
-    MO_ASHIFT = 4,
-    MO_AMASK = 7 << MO_ASHIFT,
-#ifdef ALIGNED_ONLY
-    MO_ALIGN = 0,
-    MO_UNALN = MO_AMASK,
-#else
-    MO_ALIGN = MO_AMASK,
-    MO_UNALN = 0,
-#endif
-    MO_ALIGN_2  = 1 << MO_ASHIFT,
-    MO_ALIGN_4  = 2 << MO_ASHIFT,
-    MO_ALIGN_8  = 3 << MO_ASHIFT,
-    MO_ALIGN_16 = 4 << MO_ASHIFT,
-    MO_ALIGN_32 = 5 << MO_ASHIFT,
-    MO_ALIGN_64 = 6 << MO_ASHIFT,
-
-    /* Combinations of the above, for ease of use.  */
-    MO_UB    = MO_8,
-    MO_UW    = MO_16,
-    MO_UL    = MO_32,
-    MO_SB    = MO_SIGN | MO_8,
-    MO_SW    = MO_SIGN | MO_16,
-    MO_SL    = MO_SIGN | MO_32,
-    MO_Q     = MO_64,
-
-    MO_LEUW  = MO_LE | MO_UW,
-    MO_LEUL  = MO_LE | MO_UL,
-    MO_LESW  = MO_LE | MO_SW,
-    MO_LESL  = MO_LE | MO_SL,
-    MO_LEQ   = MO_LE | MO_Q,
-
-    MO_BEUW  = MO_BE | MO_UW,
-    MO_BEUL  = MO_BE | MO_UL,
-    MO_BESW  = MO_BE | MO_SW,
-    MO_BESL  = MO_BE | MO_SL,
-    MO_BEQ   = MO_BE | MO_Q,
-
-    MO_TEUW  = MO_TE | MO_UW,
-    MO_TEUL  = MO_TE | MO_UL,
-    MO_TESW  = MO_TE | MO_SW,
-    MO_TESL  = MO_TE | MO_SL,
-    MO_TEQ   = MO_TE | MO_Q,
-
-    MO_SSIZE = MO_SIZE | MO_SIGN,
-} TCGMemOp;
-
 /**
  * get_alignment_bits
- * @memop: TCGMemOp value
+ * @memop: MemOp value
  *
  * Extract the alignment size from the memop.
  */
-static inline unsigned get_alignment_bits(TCGMemOp memop)
+static inline unsigned get_alignment_bits(MemOp memop)
 {
     unsigned a = memop & MO_AMASK;

@@ -1184,7 +1097,7 @@  static inline size_t tcg_current_code_size(TCGContext *s)
     return tcg_ptr_byte_diff(s->code_ptr, s->code_buf);
 }

-/* Combine the TCGMemOp and mmu_idx parameters into a single value.  */
+/* Combine the MemOp and mmu_idx parameters into a single value.  */
 typedef uint32_t TCGMemOpIdx;

 /**
@@ -1194,7 +1107,7 @@  typedef uint32_t TCGMemOpIdx;
  *
  * Encode these values into a single parameter.
  */
-static inline TCGMemOpIdx make_memop_idx(TCGMemOp op, unsigned idx)
+static inline TCGMemOpIdx make_memop_idx(MemOp op, unsigned idx)
 {
     tcg_debug_assert(idx <= 15);
     return (op << 4) | idx;
@@ -1206,7 +1119,7 @@  static inline TCGMemOpIdx make_memop_idx(TCGMemOp op, unsigned idx)
  *
  * Extract the memory operation from the combined value.
  */
-static inline TCGMemOp get_memop(TCGMemOpIdx oi)
+static inline MemOp get_memop(TCGMemOpIdx oi)
 {
     return oi >> 4;
 }
diff --git a/trace/mem-internal.h b/trace/mem-internal.h
index f6efaf6..3444fbc 100644
--- a/trace/mem-internal.h
+++ b/trace/mem-internal.h
@@ -16,7 +16,7 @@ 
 #define TRACE_MEM_ST (1ULL << 5)    /* store (y/n) */

 static inline uint8_t trace_mem_build_info(
-    int size_shift, bool sign_extend, TCGMemOp endianness, bool store)
+    int size_shift, bool sign_extend, MemOp endianness, bool store)
 {
     uint8_t res;

@@ -33,7 +33,7 @@  static inline uint8_t trace_mem_build_info(
     return res;
 }

-static inline uint8_t trace_mem_get_info(TCGMemOp op, bool store)
+static inline uint8_t trace_mem_get_info(MemOp op, bool store)
 {
     return trace_mem_build_info(op & MO_SIZE, !!(op & MO_SIGN),
                                 op & MO_BSWAP, store);
diff --git a/trace/mem.h b/trace/mem.h
index 2b58196..8cf213d 100644
--- a/trace/mem.h
+++ b/trace/mem.h
@@ -18,7 +18,7 @@ 
  *
  * Return a value for the 'info' argument in guest memory access traces.
  */
-static uint8_t trace_mem_get_info(TCGMemOp op, bool store);
+static uint8_t trace_mem_get_info(MemOp op, bool store);

 /**
  * trace_mem_build_info:
@@ -26,7 +26,7 @@  static uint8_t trace_mem_get_info(TCGMemOp op, bool store);
  * Return a value for the 'info' argument in guest memory access traces.
  */
 static uint8_t trace_mem_build_info(int size_shift, bool sign_extend,
-                                    TCGMemOp endianness, bool store);
+                                    MemOp endianness, bool store);


 #include "trace/mem-internal.h"