Message ID | 1436412413-27389-1-git-send-email-crosthwaite.peter@gmail.com |
---|---|
State | New |
Headers | show |
On 07/09/2015 04:26 AM, Peter Crosthwaite wrote: > There was a complicated subtractive arithmetic for determining the > padding on the CPUTLBEntry structure. Simplify this with a union. > > Signed-off-by: Peter Crosthwaite<crosthwaite.peter@gmail.com> > --- > Changed since v1: > Remove un-needed anonymous union (Paolo review) > --- > include/exec/cpu-defs.h | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) Reviewed-by: Richard Henderson <rth@twiddle.net> r~
On 09/07/2015 05:26, Peter Crosthwaite wrote: > There was a complicated subtractive arithmetic for determining the > padding on the CPUTLBEntry structure. Simplify this with a union. > > Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> > --- > Changed since v1: > Remove un-needed anonymous union (Paolo review) > --- > include/exec/cpu-defs.h | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h > index 98b9cff..c6828cc 100644 > --- a/include/exec/cpu-defs.h > +++ b/include/exec/cpu-defs.h > @@ -98,24 +98,23 @@ typedef uint64_t target_ulong; > > #define CPU_TLB_SIZE (1 << CPU_TLB_BITS) > > -typedef struct CPUTLBEntry { > +typedef union CPUTLBEntry { > /* bit TARGET_LONG_BITS to TARGET_PAGE_BITS : virtual address > bit TARGET_PAGE_BITS-1..4 : Nonzero for accesses that should not > go directly to ram. > bit 3 : indicates that the entry is invalid > bit 2..0 : zero > */ > - target_ulong addr_read; > - target_ulong addr_write; > - target_ulong addr_code; > - /* Addend to virtual address to get host address. IO accesses > - use the corresponding iotlb value. */ > - uintptr_t addend; > + struct { > + target_ulong addr_read; > + target_ulong addr_write; > + target_ulong addr_code; > + /* Addend to virtual address to get host address. IO accesses > + use the corresponding iotlb value. */ > + uintptr_t addend; > + }; > /* padding to get a power of two size */ > - uint8_t dummy[(1 << CPU_TLB_ENTRY_BITS) - > - (sizeof(target_ulong) * 3 + > - ((-sizeof(target_ulong) * 3) & (sizeof(uintptr_t) - 1)) + > - sizeof(uintptr_t))]; > + uint8_t dummy[1 << CPU_TLB_ENTRY_BITS]; > } CPUTLBEntry; > > QEMU_BUILD_BUG_ON(sizeof(CPUTLBEntry) != (1 << CPU_TLB_ENTRY_BITS)); > Thanks, queued for 2.5. Paolo
diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h index 98b9cff..c6828cc 100644 --- a/include/exec/cpu-defs.h +++ b/include/exec/cpu-defs.h @@ -98,24 +98,23 @@ typedef uint64_t target_ulong; #define CPU_TLB_SIZE (1 << CPU_TLB_BITS) -typedef struct CPUTLBEntry { +typedef union CPUTLBEntry { /* bit TARGET_LONG_BITS to TARGET_PAGE_BITS : virtual address bit TARGET_PAGE_BITS-1..4 : Nonzero for accesses that should not go directly to ram. bit 3 : indicates that the entry is invalid bit 2..0 : zero */ - target_ulong addr_read; - target_ulong addr_write; - target_ulong addr_code; - /* Addend to virtual address to get host address. IO accesses - use the corresponding iotlb value. */ - uintptr_t addend; + struct { + target_ulong addr_read; + target_ulong addr_write; + target_ulong addr_code; + /* Addend to virtual address to get host address. IO accesses + use the corresponding iotlb value. */ + uintptr_t addend; + }; /* padding to get a power of two size */ - uint8_t dummy[(1 << CPU_TLB_ENTRY_BITS) - - (sizeof(target_ulong) * 3 + - ((-sizeof(target_ulong) * 3) & (sizeof(uintptr_t) - 1)) + - sizeof(uintptr_t))]; + uint8_t dummy[1 << CPU_TLB_ENTRY_BITS]; } CPUTLBEntry; QEMU_BUILD_BUG_ON(sizeof(CPUTLBEntry) != (1 << CPU_TLB_ENTRY_BITS));
There was a complicated subtractive arithmetic for determining the padding on the CPUTLBEntry structure. Simplify this with a union. Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> --- Changed since v1: Remove un-needed anonymous union (Paolo review) --- include/exec/cpu-defs.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-)