diff options
author | Paul Brook <paul@codesourcery.com> | 2010-04-05 00:28:53 +0100 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2010-04-05 00:28:53 +0100 |
commit | 355b194369d02df7a97d554eef2a9cffe98d736f (patch) | |
tree | 15fb62cc03f22548ea08f7cb1609d7abe7970052 /cpu-defs.h | |
parent | 5bd2c0d7a6778542827ac7f897eed3fb5cf7ff5a (diff) | |
download | hqemu-355b194369d02df7a97d554eef2a9cffe98d736f.zip hqemu-355b194369d02df7a97d554eef2a9cffe98d736f.tar.gz |
Split TLB addend and target_phys_addr_t
Historically the qemu tlb "addend" field was used for both RAM and IO accesses,
so needed to be able to hold both host addresses (unsigned long) and guest
physical addresses (target_phys_addr_t). However since the introduction of
the iotlb field it has only been used for RAM accesses.
This means we can change the type of addend to unsigned long, and remove
associated hacks in the big-endian TCG backends.
We can also remove the host dependence from target_phys_addr_t.
Signed-off-by: Paul Brook <paul@codesourcery.com>
Diffstat (limited to 'cpu-defs.h')
-rw-r--r-- | cpu-defs.h | 17 |
1 files changed, 7 insertions, 10 deletions
@@ -76,7 +76,7 @@ typedef uint64_t target_ulong; #define CPU_TLB_BITS 8 #define CPU_TLB_SIZE (1 << CPU_TLB_BITS) -#if TARGET_PHYS_ADDR_BITS == 32 && TARGET_LONG_BITS == 32 +#if HOST_LONG_BITS == 32 && TARGET_LONG_BITS == 32 #define CPU_TLB_ENTRY_BITS 4 #else #define CPU_TLB_ENTRY_BITS 5 @@ -92,21 +92,18 @@ typedef struct CPUTLBEntry { target_ulong addr_read; target_ulong addr_write; target_ulong addr_code; - /* Addend to virtual address to get physical address. IO accesses + /* Addend to virtual address to get host address. IO accesses use the corresponding iotlb value. */ -#if TARGET_PHYS_ADDR_BITS == 64 - /* on i386 Linux make sure it is aligned */ - target_phys_addr_t addend __attribute__((aligned(8))); -#else - target_phys_addr_t addend; -#endif + unsigned long 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(target_phys_addr_t) - 1)) + - sizeof(target_phys_addr_t))]; + ((-sizeof(target_ulong) * 3) & (sizeof(unsigned long) - 1)) + + sizeof(unsigned long))]; } CPUTLBEntry; +extern int CPUTLBEntry_wrong_size[sizeof(CPUTLBEntry) == (1 << CPU_TLB_ENTRY_BITS) ? 1 : -1]; + #define CPU_COMMON_TLB \ /* The meaning of the MMU modes is defined in the target code. */ \ CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \ |