On 7/25/19 11:47 PM, tony.ngu...@bt.com wrote: > To convert interfaces of MemoryRegion access, MEMOP_SIZE and > SIZE_MEMOP no-op stubs were introduced to change syntax while keeping > the existing semantics. > > Now with interfaces converted, we fill the stubs and use MemOp > semantics. > > Signed-off-by: Tony Nguyen <tony.ngu...@bt.com> > --- > include/exec/memop.h | 5 ++--- > include/exec/memory.h | 4 ++-- > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/include/exec/memop.h b/include/exec/memop.h > index 09c8d20..f2847e8 100644 > --- a/include/exec/memop.h > +++ b/include/exec/memop.h > @@ -106,8 +106,7 @@ typedef enum MemOp { > MO_SSIZE = MO_SIZE | MO_SIGN, > } MemOp; > > -/* No-op while memory_region_dispatch_[read|write] is converted to MemOp */ > -#define MEMOP_SIZE(op) (op) /* MemOp to size. */ > -#define SIZE_MEMOP(ul) (ul) /* Size to MemOp. */ > +#define MEMOP_SIZE(op) (1 << ((op) & MO_SIZE)) /* MemOp to size. */ > +#define SIZE_MEMOP(ul) (ctzl(ul)) /* Size to MemOp. */
As mentioned, I'd prefer inline functions. I think it wouldn't go amiss to do static inline MemOp size_memop(unsigned size) { #ifdef CONFIG_DEBUG_TCG /* power of 2 up to 8 */ assert((size & (size - 1)) == 0 && size >= 1 && size <= 8); #endif return ctz32(size); } > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 0ea4843..975b86a 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -1732,7 +1732,7 @@ void mtree_info(bool flatview, bool dispatch_tree, bool > owner); > * @mr: #MemoryRegion to access > * @addr: address within that region > * @pval: pointer to uint64_t which the data is written to > - * @op: size of the access in bytes > + * @op: size, sign, and endianness of the memory operation > * @attrs: memory transaction attributes to use for the access > */ > MemTxResult memory_region_dispatch_read(MemoryRegion *mr, > @@ -1747,7 +1747,7 @@ MemTxResult memory_region_dispatch_read(MemoryRegion > *mr, > * @mr: #MemoryRegion to access > * @addr: address within that region > * @data: data to write > - * @op: size of the access in bytes > + * @op: size, sign, and endianness of the memory operation > * @attrs: memory transaction attributes to use for the access > */ > MemTxResult memory_region_dispatch_write(MemoryRegion *mr, As I mentioned, now is when the actual interface change to these functions should occur. r~