On Sat, Mar 23, 2019 at 12:44 PM Richard Henderson <richard.hender...@linaro.org> wrote: > > For all targets, into this new file move TARGET_LONG_BITS, > TARGET_PAGE_BITS, TARGET_PHYS_ADDR_SPACE_BITS, > TARGET_VIRT_ADDR_SPACE_BITS, and NB_MMU_MODES. > > Include this new file from exec/cpu-defs.h. > > This now removes the somewhat odd requirement that target/arch/cpu.h > defines TARGET_LONG_BITS before including exec/cpu-defs.h, so push the > bulk of the includes within target/arch/cpu.h to the top. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
For RISC-V: Acked-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > include/exec/cpu-defs.h | 22 +++++++++++++++++++++- > target/alpha/cpu-param.h | 19 +++++++++++++++++++ > target/alpha/cpu.h | 23 +---------------------- > target/arm/cpu-param.h | 22 ++++++++++++++++++++++ > target/arm/cpu.h | 33 +++------------------------------ > target/cris/cpu-param.h | 5 +++++ > target/cris/cpu.h | 11 +---------- > target/hppa/cpu-param.h | 22 ++++++++++++++++++++++ > target/hppa/cpu.h | 24 +----------------------- > target/i386/cpu-param.h | 14 ++++++++++++++ > target/i386/cpu.h | 21 --------------------- > target/lm32/cpu-param.h | 5 +++++ > target/lm32/cpu.h | 12 +++--------- > target/m68k/cpu-param.h | 9 +++++++++ > target/m68k/cpu.h | 16 ++-------------- > target/microblaze/cpu-param.h | 6 ++++++ > target/microblaze/cpu.h | 14 ++------------ > target/mips/cpu-param.h | 18 ++++++++++++++++++ > target/mips/cpu.h | 3 +-- > target/mips/mips-defs.h | 15 --------------- > target/moxie/cpu-param.h | 5 +++++ > target/moxie/cpu.h | 12 +----------- > target/nios2/cpu-param.h | 9 +++++++++ > target/nios2/cpu.h | 17 ++--------------- > target/openrisc/cpu-param.h | 5 +++++ > target/openrisc/cpu.h | 14 +++----------- > target/ppc/cpu-param.h | 25 +++++++++++++++++++++++++ > target/ppc/cpu.h | 35 ++--------------------------------- > target/riscv/cpu-param.h | 11 +++++++++++ > target/riscv/cpu.h | 21 ++++----------------- > target/s390x/cpu-param.h | 5 +++++ > target/s390x/cpu.h | 11 +---------- > target/sh4/cpu-param.h | 9 +++++++++ > target/sh4/cpu.h | 14 +------------- > target/sparc/cpu-param.h | 17 +++++++++++++++++ > target/sparc/cpu.h | 20 ++------------------ > target/tilegx/cpu-param.h | 5 +++++ > target/tilegx/cpu.h | 9 +-------- > target/tricore/cpu-param.h | 5 +++++ > target/tricore/cpu.h | 4 +--- > target/tricore/tricore-defs.h | 5 ----- > target/unicore32/cpu-param.h | 5 +++++ > target/unicore32/cpu.h | 10 +--------- > target/xtensa/cpu-param.h | 9 +++++++++ > target/xtensa/cpu.h | 21 +++++---------------- > 45 files changed, 289 insertions(+), 328 deletions(-) > create mode 100644 target/alpha/cpu-param.h > create mode 100644 target/arm/cpu-param.h > create mode 100644 target/cris/cpu-param.h > create mode 100644 target/hppa/cpu-param.h > create mode 100644 target/i386/cpu-param.h > create mode 100644 target/lm32/cpu-param.h > create mode 100644 target/m68k/cpu-param.h > create mode 100644 target/microblaze/cpu-param.h > create mode 100644 target/mips/cpu-param.h > create mode 100644 target/moxie/cpu-param.h > create mode 100644 target/nios2/cpu-param.h > create mode 100644 target/openrisc/cpu-param.h > create mode 100644 target/ppc/cpu-param.h > create mode 100644 target/riscv/cpu-param.h > create mode 100644 target/s390x/cpu-param.h > create mode 100644 target/sh4/cpu-param.h > create mode 100644 target/sparc/cpu-param.h > create mode 100644 target/tilegx/cpu-param.h > create mode 100644 target/tricore/cpu-param.h > create mode 100644 target/unicore32/cpu-param.h > create mode 100644 target/xtensa/cpu-param.h > > diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h > index 52d150aaf1..2694481769 100644 > --- a/include/exec/cpu-defs.h > +++ b/include/exec/cpu-defs.h > @@ -34,8 +34,28 @@ > #endif > #include "exec/memattrs.h" > > +#include "cpu-param.h" > + > #ifndef TARGET_LONG_BITS > -#error TARGET_LONG_BITS must be defined before including this header > +# error TARGET_LONG_BITS must be defined in cpu-param.h > +#endif > +#ifndef NB_MMU_MODES > +# error NB_MMU_MODES must be defined in cpu-param.h > +#endif > +#ifndef TARGET_PHYS_ADDR_SPACE_BITS > +# error TARGET_PHYS_ADDR_SPACE_BITS must be defined in cpu-param.h > +#endif > +#ifndef TARGET_VIRT_ADDR_SPACE_BITS > +# error TARGET_VIRT_ADDR_SPACE_BITS must be defined in cpu-param.h > +#endif > +#ifndef TARGET_PAGE_BITS > +# ifdef TARGET_PAGE_BITS_VARY > +# ifndef TARGET_PAGE_BITS_MIN > +# error TARGET_PAGE_BITS_MIN must be defined in cpu-param.h > +# endif > +# else > +# error TARGET_PAGE_BITS must be defined in cpu-param.h > +# endif > #endif > > #define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8) > diff --git a/target/alpha/cpu-param.h b/target/alpha/cpu-param.h > new file mode 100644 > index 0000000000..6e76e740e2 > --- /dev/null > +++ b/target/alpha/cpu-param.h > @@ -0,0 +1,19 @@ > +#define TARGET_LONG_BITS 64 > +#define TARGET_PAGE_BITS 13 > +#ifdef CONFIG_USER_ONLY > +/* > + * ??? The kernel likes to give addresses in high memory. If the host has > + * more virtual address space than the guest, this can lead to impossible > + * allocations. Honor the long-standing assumption that only kernel addrs > + * are negative, but otherwise allow allocations anywhere. This could lead > + * to tricky emulation problems for programs doing tagged addressing, but > + * that's far fewer than encounter the impossible allocation problem. > + */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 63 > +#define TARGET_VIRT_ADDR_SPACE_BITS 63 > +#else > +/* ??? EV4 has 34 phys addr bits, EV5 has 40, EV6 has 44. */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 44 > +#define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) > +#endif > +#define NB_MMU_MODES 3 > diff --git a/target/alpha/cpu.h b/target/alpha/cpu.h > index 7b50be785d..e4aacbe5a3 100644 > --- a/target/alpha/cpu.h > +++ b/target/alpha/cpu.h > @@ -22,8 +22,8 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > +#include "exec/cpu-defs.h" > > -#define TARGET_LONG_BITS 64 > #define ALIGNED_ONLY > > #define CPUArchState struct CPUAlphaState > @@ -31,28 +31,9 @@ > /* Alpha processors have a weak memory model */ > #define TCG_GUEST_DEFAULT_MO (0) > > -#include "exec/cpu-defs.h" > - > #define ICACHE_LINE_SIZE 32 > #define DCACHE_LINE_SIZE 32 > > -#define TARGET_PAGE_BITS 13 > - > -#ifdef CONFIG_USER_ONLY > -/* ??? The kernel likes to give addresses in high memory. If the host has > - more virtual address space than the guest, this can lead to impossible > - allocations. Honor the long-standing assumption that only kernel addrs > - are negative, but otherwise allow allocations anywhere. This could lead > - to tricky emulation problems for programs doing tagged addressing, but > - that's far fewer than encounter the impossible allocation problem. */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 63 > -#define TARGET_VIRT_ADDR_SPACE_BITS 63 > -#else > -/* ??? EV4 has 34 phys addr bits, EV5 has 40, EV6 has 44. */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 44 > -#define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) > -#endif > - > /* Alpha major type */ > enum { > ALPHA_EV3 = 1, > @@ -215,8 +196,6 @@ enum { > PALcode cheats and usees the KSEG mapping for its code+data rather than > physical addresses. */ > > -#define NB_MMU_MODES 3 > - > #define MMU_MODE0_SUFFIX _kernel > #define MMU_MODE1_SUFFIX _user > #define MMU_KERNEL_IDX 0 > diff --git a/target/arm/cpu-param.h b/target/arm/cpu-param.h > new file mode 100644 > index 0000000000..e4021e5690 > --- /dev/null > +++ b/target/arm/cpu-param.h > @@ -0,0 +1,22 @@ > +#ifdef TARGET_AARCH64 > +# define TARGET_LONG_BITS 64 > +# define TARGET_PHYS_ADDR_SPACE_BITS 48 > +# define TARGET_VIRT_ADDR_SPACE_BITS 48 > +#else > +# define TARGET_LONG_BITS 32 > +# define TARGET_PHYS_ADDR_SPACE_BITS 40 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > + > +#ifdef CONFIG_USER_ONLY > +#define TARGET_PAGE_BITS 12 > +#else > +/* > + * ARMv7 and later CPUs have 4K pages minimum, but ARMv5 and v6 > + * have to support 1K tiny pages. > + */ > +# define TARGET_PAGE_BITS_VARY > +# define TARGET_PAGE_BITS_MIN 10 > +#endif > + > +#define NB_MMU_MODES 8 > diff --git a/target/arm/cpu.h b/target/arm/cpu.h > index 5f23c62132..497f973543 100644 > --- a/target/arm/cpu.h > +++ b/target/arm/cpu.h > @@ -22,23 +22,15 @@ > > #include "kvm-consts.h" > #include "hw/registerfields.h" > - > -#if defined(TARGET_AARCH64) > - /* AArch64 definitions */ > -# define TARGET_LONG_BITS 64 > -#else > -# define TARGET_LONG_BITS 32 > -#endif > +#include "qemu-common.h" > +#include "cpu-qom.h" > +#include "exec/cpu-defs.h" > > /* ARM processors have a weak memory model */ > #define TCG_GUEST_DEFAULT_MO (0) > > #define CPUArchState struct CPUARMState > > -#include "qemu-common.h" > -#include "cpu-qom.h" > -#include "exec/cpu-defs.h" > - > #define EXCP_UDEF 1 /* undefined instruction */ > #define EXCP_SWI 2 /* software interrupt */ > #define EXCP_PREFETCH_ABORT 3 > @@ -111,7 +103,6 @@ enum { > #define ARM_CPU_VIRQ 2 > #define ARM_CPU_VFIQ 3 > > -#define NB_MMU_MODES 8 > /* ARM-specific extra insn start words: > * 1: Conditional execution bits > * 2: Partial exception syndrome for data aborts > @@ -2575,24 +2566,6 @@ bool write_cpustate_to_list(ARMCPU *cpu); > #define ARM_CPUID_TI915T 0x54029152 > #define ARM_CPUID_TI925T 0x54029252 > > -#if defined(CONFIG_USER_ONLY) > -#define TARGET_PAGE_BITS 12 > -#else > -/* ARMv7 and later CPUs have 4K pages minimum, but ARMv5 and v6 > - * have to support 1K tiny pages. > - */ > -#define TARGET_PAGE_BITS_VARY > -#define TARGET_PAGE_BITS_MIN 10 > -#endif > - > -#if defined(TARGET_AARCH64) > -# define TARGET_PHYS_ADDR_SPACE_BITS 48 > -# define TARGET_VIRT_ADDR_SPACE_BITS 48 > -#else > -# define TARGET_PHYS_ADDR_SPACE_BITS 40 > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > - > static inline bool arm_excp_unmasked(CPUState *cs, unsigned int excp_idx, > unsigned int target_el) > { > diff --git a/target/cris/cpu-param.h b/target/cris/cpu-param.h > new file mode 100644 > index 0000000000..1da781a22f > --- /dev/null > +++ b/target/cris/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 13 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 2 > diff --git a/target/cris/cpu.h b/target/cris/cpu.h > index 8bb1dbc989..832796d457 100644 > --- a/target/cris/cpu.h > +++ b/target/cris/cpu.h > @@ -23,13 +23,10 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > - > -#define TARGET_LONG_BITS 32 > +#include "exec/cpu-defs.h" > > #define CPUArchState struct CPUCRISState > > -#include "exec/cpu-defs.h" > - > #define EXCP_NMI 1 > #define EXCP_GURU 2 > #define EXCP_BUSFAULT 3 > @@ -105,8 +102,6 @@ > #define CC_A 14 > #define CC_P 15 > > -#define NB_MMU_MODES 2 > - > typedef struct { > uint32_t hi; > uint32_t lo; > @@ -261,12 +256,8 @@ enum { > }; > > /* CRIS uses 8k pages. */ > -#define TARGET_PAGE_BITS 13 > #define MMAP_SHIFT TARGET_PAGE_BITS > > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > #define CRIS_CPU_TYPE_SUFFIX "-" TYPE_CRIS_CPU > #define CRIS_CPU_TYPE_NAME(name) (name CRIS_CPU_TYPE_SUFFIX) > #define CPU_RESOLVING_TYPE TYPE_CRIS_CPU > diff --git a/target/hppa/cpu-param.h b/target/hppa/cpu-param.h > new file mode 100644 > index 0000000000..64fd828c39 > --- /dev/null > +++ b/target/hppa/cpu-param.h > @@ -0,0 +1,22 @@ > +#ifdef TARGET_HPPA64 > +# define TARGET_LONG_BITS 64 > +# define TARGET_REGISTER_BITS 64 > +# define TARGET_VIRT_ADDR_SPACE_BITS 64 > +# define TARGET_PHYS_ADDR_SPACE_BITS 64 > +#elif defined(CONFIG_USER_ONLY) > +# define TARGET_LONG_BITS 32 > +# define TARGET_REGISTER_BITS 32 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +# define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#else > +/* > + * In order to form the GVA from space:offset, > + * we need a 64-bit virtual address space. > + */ > +# define TARGET_LONG_BITS 64 > +# define TARGET_REGISTER_BITS 32 > +# define TARGET_VIRT_ADDR_SPACE_BITS 64 > +# define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#endif > +#define TARGET_PAGE_BITS 12 > +#define NB_MMU_MODES 5 > diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h > index c062c7969c..fe97786de1 100644 > --- a/target/hppa/cpu.h > +++ b/target/hppa/cpu.h > @@ -22,25 +22,8 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > +#include "exec/cpu-defs.h" > > -#ifdef TARGET_HPPA64 > -#define TARGET_LONG_BITS 64 > -#define TARGET_VIRT_ADDR_SPACE_BITS 64 > -#define TARGET_REGISTER_BITS 64 > -#define TARGET_PHYS_ADDR_SPACE_BITS 64 > -#elif defined(CONFIG_USER_ONLY) > -#define TARGET_LONG_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#define TARGET_REGISTER_BITS 32 > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#else > -/* In order to form the GVA from space:offset, > - we need a 64-bit virtual address space. */ > -#define TARGET_LONG_BITS 64 > -#define TARGET_VIRT_ADDR_SPACE_BITS 64 > -#define TARGET_REGISTER_BITS 32 > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#endif > > /* PA-RISC 1.x processors have a strong memory model. */ > /* ??? While we do not yet implement PA-RISC 2.0, those processors have > @@ -50,12 +33,7 @@ > > #define CPUArchState struct CPUHPPAState > > -#include "exec/cpu-defs.h" > - > -#define TARGET_PAGE_BITS 12 > - > #define ALIGNED_ONLY > -#define NB_MMU_MODES 5 > #define MMU_KERNEL_IDX 0 > #define MMU_USER_IDX 3 > #define MMU_PHYS_IDX 4 > diff --git a/target/i386/cpu-param.h b/target/i386/cpu-param.h > new file mode 100644 > index 0000000000..4f2f7457d2 > --- /dev/null > +++ b/target/i386/cpu-param.h > @@ -0,0 +1,14 @@ > +#ifdef TARGET_X86_64 > +# define TARGET_LONG_BITS 64 > +# define TARGET_PHYS_ADDR_SPACE_BITS 52 > +/* ??? This is really 48 bits, sign-extended, but the only thing > + accessible to userland with bit 48 set is the VSYSCALL, and that > + is handled via other mechanisms. */ > +# define TARGET_VIRT_ADDR_SPACE_BITS 47 > +#else > +# define TARGET_LONG_BITS 32 > +# define TARGET_PHYS_ADDR_SPACE_BITS 36 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#define TARGET_PAGE_BITS 12 > +#define NB_MMU_MODES 3 > diff --git a/target/i386/cpu.h b/target/i386/cpu.h > index 83fb522554..6716958276 100644 > --- a/target/i386/cpu.h > +++ b/target/i386/cpu.h > @@ -24,13 +24,6 @@ > #include "qemu-common.h" > #include "cpu-qom.h" > #include "hyperv-proto.h" > - > -#ifdef TARGET_X86_64 > -#define TARGET_LONG_BITS 64 > -#else > -#define TARGET_LONG_BITS 32 > -#endif > - > #include "exec/cpu-defs.h" > > /* The x86 has a strong memory model with some store-after-load re-ordering > */ > @@ -953,7 +946,6 @@ typedef struct { > #define MAX_FIXED_COUNTERS 3 > #define MAX_GP_COUNTERS (MSR_IA32_PERF_STATUS - MSR_P6_EVNTSEL0) > > -#define NB_MMU_MODES 3 > #define TARGET_INSN_START_EXTRA_WORDS 1 > > #define NB_OPMASK_REGS 8 > @@ -1692,19 +1684,6 @@ void cpu_x86_update_dr7(CPUX86State *env, uint32_t > new_dr7); > /* hw/pc.c */ > uint64_t cpu_get_tsc(CPUX86State *env); > > -#define TARGET_PAGE_BITS 12 > - > -#ifdef TARGET_X86_64 > -#define TARGET_PHYS_ADDR_SPACE_BITS 52 > -/* ??? This is really 48 bits, sign-extended, but the only thing > - accessible to userland with bit 48 set is the VSYSCALL, and that > - is handled via other mechanisms. */ > -#define TARGET_VIRT_ADDR_SPACE_BITS 47 > -#else > -#define TARGET_PHYS_ADDR_SPACE_BITS 36 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > - > /* XXX: This value should match the one returned by CPUID > * and in exec.c */ > # if defined(TARGET_X86_64) > diff --git a/target/lm32/cpu-param.h b/target/lm32/cpu-param.h > new file mode 100644 > index 0000000000..5262ca5dc6 > --- /dev/null > +++ b/target/lm32/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 1 > diff --git a/target/lm32/cpu.h b/target/lm32/cpu.h > index 66157eefe9..3c9c8a904c 100644 > --- a/target/lm32/cpu.h > +++ b/target/lm32/cpu.h > @@ -20,26 +20,20 @@ > #ifndef LM32_CPU_H > #define LM32_CPU_H > > -#define TARGET_LONG_BITS 32 > - > -#define CPUArchState struct CPULM32State > - > #include "qemu-common.h" > #include "cpu-qom.h" > #include "exec/cpu-defs.h" > + > +#define CPUArchState struct CPULM32State > + > struct CPULM32State; > typedef struct CPULM32State CPULM32State; > > -#define NB_MMU_MODES 1 > -#define TARGET_PAGE_BITS 12 > static inline int cpu_mmu_index(CPULM32State *env, bool ifetch) > { > return 0; > } > > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > /* Exceptions indices */ > enum { > EXCP_RESET = 0, > diff --git a/target/m68k/cpu-param.h b/target/m68k/cpu-param.h > new file mode 100644 > index 0000000000..76a6a7ccd3 > --- /dev/null > +++ b/target/m68k/cpu-param.h > @@ -0,0 +1,9 @@ > +#define TARGET_LONG_BITS 32 > +/* Coldfire Linux uses 8k pages > + * and m68k linux uses 4k pages > + * use the smallest one > + */ > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 2 > diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h > index f154565117..6bf44604b5 100644 > --- a/target/m68k/cpu.h > +++ b/target/m68k/cpu.h > @@ -21,14 +21,12 @@ > #ifndef M68K_CPU_H > #define M68K_CPU_H > > -#define TARGET_LONG_BITS 32 > - > -#define CPUArchState struct CPUM68KState > - > #include "qemu-common.h" > #include "exec/cpu-defs.h" > #include "cpu-qom.h" > > +#define CPUArchState struct CPUM68KState > + > #define OS_BYTE 0 > #define OS_WORD 1 > #define OS_LONG 2 > @@ -82,7 +80,6 @@ > #define M68K_MAX_TTR 2 > #define TTR(type, index) ttr[((type & ACCESS_CODE) == ACCESS_CODE) * 2 + > index] > > -#define NB_MMU_MODES 2 > #define TARGET_INSN_START_EXTRA_WORDS 1 > > typedef CPU_LDoubleU FPReg; > @@ -503,12 +500,6 @@ void m68k_cpu_list(FILE *f, fprintf_function > cpu_fprintf); > > void register_m68k_insns (CPUM68KState *env); > > -/* Coldfire Linux uses 8k pages > - * and m68k linux uses 4k pages > - * use the smallest one > - */ > -#define TARGET_PAGE_BITS 12 > - > enum { > /* 1 bit to define user level / supervisor access */ > ACCESS_SUPER = 0x01, > @@ -523,9 +514,6 @@ enum { > ACCESS_DATA = 0x20, /* Data load/store access */ > }; > > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > #define M68K_CPU_TYPE_SUFFIX "-" TYPE_M68K_CPU > #define M68K_CPU_TYPE_NAME(model) model M68K_CPU_TYPE_SUFFIX > #define CPU_RESOLVING_TYPE TYPE_M68K_CPU > diff --git a/target/microblaze/cpu-param.h b/target/microblaze/cpu-param.h > new file mode 100644 > index 0000000000..20e7a68a32 > --- /dev/null > +++ b/target/microblaze/cpu-param.h > @@ -0,0 +1,6 @@ > +#define TARGET_LONG_BITS 64 > +#define TARGET_PHYS_ADDR_SPACE_BITS 64 > +#define TARGET_VIRT_ADDR_SPACE_BITS 64 > +/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */ > +#define TARGET_PAGE_BITS 12 > +#define NB_MMU_MODES 3 > diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h > index 792bbc97c7..c8a9d4b146 100644 > --- a/target/microblaze/cpu.h > +++ b/target/microblaze/cpu.h > @@ -22,13 +22,11 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > - > -#define TARGET_LONG_BITS 64 > +#include "exec/cpu-defs.h" > +#include "fpu/softfloat-types.h" > > #define CPUArchState struct CPUMBState > > -#include "exec/cpu-defs.h" > -#include "fpu/softfloat-types.h" > struct CPUMBState; > typedef struct CPUMBState CPUMBState; > #if !defined(CONFIG_USER_ONLY) > @@ -228,8 +226,6 @@ typedef struct CPUMBState CPUMBState; > #define CC_NE 1 > #define CC_EQ 0 > > -#define NB_MMU_MODES 3 > - > #define STREAM_EXCEPTION (1 << 0) > #define STREAM_ATOMIC (1 << 1) > #define STREAM_TEST (1 << 2) > @@ -341,12 +337,6 @@ void mb_tcg_init(void); > int cpu_mb_signal_handler(int host_signum, void *pinfo, > void *puc); > > -/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */ > -#define TARGET_PAGE_BITS 12 > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 64 > -#define TARGET_VIRT_ADDR_SPACE_BITS 64 > - > #define CPU_RESOLVING_TYPE TYPE_MICROBLAZE_CPU > > #define cpu_signal_handler cpu_mb_signal_handler > diff --git a/target/mips/cpu-param.h b/target/mips/cpu-param.h > new file mode 100644 > index 0000000000..72769a04f8 > --- /dev/null > +++ b/target/mips/cpu-param.h > @@ -0,0 +1,18 @@ > +#ifdef TARGET_MIPS64 > +# define TARGET_LONG_BITS 64 > +#else > +# define TARGET_LONG_BITS 32 > +#endif > +#ifdef TARGET_MIPS64 > +#define TARGET_PHYS_ADDR_SPACE_BITS 48 > +#define TARGET_VIRT_ADDR_SPACE_BITS 48 > +#else > +#define TARGET_PHYS_ADDR_SPACE_BITS 40 > +# ifdef CONFIG_USER_ONLY > +# define TARGET_VIRT_ADDR_SPACE_BITS 31 > +# else > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#endif > +#define TARGET_PAGE_BITS 12 > +#define NB_MMU_MODES 4 > diff --git a/target/mips/cpu.h b/target/mips/cpu.h > index a10eeb0de3..1cd59e31f7 100644 > --- a/target/mips/cpu.h > +++ b/target/mips/cpu.h > @@ -7,9 +7,9 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > -#include "mips-defs.h" > #include "exec/cpu-defs.h" > #include "fpu/softfloat.h" > +#include "mips-defs.h" > > #define TCG_GUEST_DEFAULT_MO (0) > > @@ -89,7 +89,6 @@ struct CPUMIPSFPUContext { > #define FP_UNIMPLEMENTED 32 > }; > > -#define NB_MMU_MODES 4 > #define TARGET_INSN_START_EXTRA_WORDS 2 > > typedef struct CPUMIPSMVPContext CPUMIPSMVPContext; > diff --git a/target/mips/mips-defs.h b/target/mips/mips-defs.h > index dbdb4b2b2d..bbf056a548 100644 > --- a/target/mips/mips-defs.h > +++ b/target/mips/mips-defs.h > @@ -5,23 +5,8 @@ > //#define USE_HOST_FLOAT_REGS > > /* Real pages are variable size... */ > -#define TARGET_PAGE_BITS 12 > #define MIPS_TLB_MAX 128 > > -#if defined(TARGET_MIPS64) > -#define TARGET_LONG_BITS 64 > -#define TARGET_PHYS_ADDR_SPACE_BITS 48 > -#define TARGET_VIRT_ADDR_SPACE_BITS 48 > -#else > -#define TARGET_LONG_BITS 32 > -#define TARGET_PHYS_ADDR_SPACE_BITS 40 > -# ifdef CONFIG_USER_ONLY > -# define TARGET_VIRT_ADDR_SPACE_BITS 31 > -# else > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > -#endif > - > /* > * bit definitions for insn_flags (ISAs/ASEs flags) > * ------------------------------------------------ > diff --git a/target/moxie/cpu-param.h b/target/moxie/cpu-param.h > new file mode 100644 > index 0000000000..0ff0fc72b4 > --- /dev/null > +++ b/target/moxie/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 /* 4k */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 1 > diff --git a/target/moxie/cpu.h b/target/moxie/cpu.h > index 080df4ee6f..b060c69e38 100644 > --- a/target/moxie/cpu.h > +++ b/target/moxie/cpu.h > @@ -21,8 +21,7 @@ > #define MOXIE_CPU_H > > #include "qemu-common.h" > - > -#define TARGET_LONG_BITS 32 > +#include "exec/cpu-defs.h" > > #define CPUArchState struct CPUMoxieState > > @@ -33,15 +32,6 @@ > #define MOXIE_EX_MMU_MISS 4 > #define MOXIE_EX_BREAK 16 > > -#include "exec/cpu-defs.h" > - > -#define TARGET_PAGE_BITS 12 /* 4k */ > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > -#define NB_MMU_MODES 1 > - > typedef struct CPUMoxieState { > > uint32_t flags; /* general execution flags */ > diff --git a/target/nios2/cpu-param.h b/target/nios2/cpu-param.h > new file mode 100644 > index 0000000000..fb21e8f202 > --- /dev/null > +++ b/target/nios2/cpu-param.h > @@ -0,0 +1,9 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#ifdef CONFIG_USER_ONLY > +# define TARGET_VIRT_ADDR_SPACE_BITS 31 > +#else > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#define NB_MMU_MODES 2 > diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h > index 047f3764b7..50fb5fef46 100644 > --- a/target/nios2/cpu.h > +++ b/target/nios2/cpu.h > @@ -21,13 +21,11 @@ > #define CPU_NIOS2_H > > #include "qemu-common.h" > - > -#define TARGET_LONG_BITS 32 > +#include "exec/cpu-defs.h" > +#include "qom/cpu.h" > > #define CPUArchState struct CPUNios2State > > -#include "exec/cpu-defs.h" > -#include "qom/cpu.h" > struct CPUNios2State; > typedef struct CPUNios2State CPUNios2State; > #if !defined(CONFIG_USER_ONLY) > @@ -163,8 +161,6 @@ typedef struct Nios2CPUClass { > > #define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3 > > -#define NB_MMU_MODES 2 > - > struct CPUNios2State { > uint32_t regs[NUM_CORE_REGS]; > > @@ -223,13 +219,6 @@ void nios2_cpu_do_unaligned_access(CPUState *cpu, vaddr > addr, > qemu_irq *nios2_cpu_pic_init(Nios2CPU *cpu); > void nios2_check_interrupts(CPUNios2State *env); > > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#ifdef CONFIG_USER_ONLY > -# define TARGET_VIRT_ADDR_SPACE_BITS 31 > -#else > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > - > #define CPU_RESOLVING_TYPE TYPE_NIOS2_CPU > > #define cpu_gen_code cpu_nios2_gen_code > @@ -237,8 +226,6 @@ void nios2_check_interrupts(CPUNios2State *env); > > #define CPU_SAVE_VERSION 1 > > -#define TARGET_PAGE_BITS 12 > - > /* MMU modes definitions */ > #define MMU_MODE0_SUFFIX _kernel > #define MMU_MODE1_SUFFIX _user > diff --git a/target/openrisc/cpu-param.h b/target/openrisc/cpu-param.h > new file mode 100644 > index 0000000000..c0cbdb424f > --- /dev/null > +++ b/target/openrisc/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 13 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 3 > diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h > index f1b31bc24a..9bd137d9a2 100644 > --- a/target/openrisc/cpu.h > +++ b/target/openrisc/cpu.h > @@ -20,17 +20,15 @@ > #ifndef OPENRISC_CPU_H > #define OPENRISC_CPU_H > > -#define TARGET_LONG_BITS 32 > +#include "qemu-common.h" > +#include "exec/cpu-defs.h" > +#include "qom/cpu.h" > > #define CPUArchState struct CPUOpenRISCState > > /* cpu_openrisc_map_address_* in CPUOpenRISCTLBContext need this decl. */ > struct OpenRISCCPU; > > -#include "qemu-common.h" > -#include "exec/cpu-defs.h" > -#include "qom/cpu.h" > - > #define TYPE_OPENRISC_CPU "or1k-cpu" > > #define OPENRISC_CPU_CLASS(klass) \ > @@ -56,7 +54,6 @@ typedef struct OpenRISCCPUClass { > void (*parent_reset)(CPUState *cpu); > } OpenRISCCPUClass; > > -#define NB_MMU_MODES 3 > #define TARGET_INSN_START_EXTRA_WORDS 1 > > enum { > @@ -65,11 +62,6 @@ enum { > MMU_USER_IDX = 2, > }; > > -#define TARGET_PAGE_BITS 13 > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > #define SET_FP_CAUSE(reg, v) do {\ > (reg) = ((reg) & ~(0x3f << 12)) | \ > ((v & 0x3f) << 12);\ > diff --git a/target/ppc/cpu-param.h b/target/ppc/cpu-param.h > new file mode 100644 > index 0000000000..6679d81394 > --- /dev/null > +++ b/target/ppc/cpu-param.h > @@ -0,0 +1,25 @@ > +#ifdef TARGET_PPC64 > +# define TARGET_LONG_BITS 64 > +/* > + * Note that the official physical address space bits is 62-M where M > + * is implementation dependent. I've not looked up M for the set of > + * cpus we emulate at the system level. > + */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 62 > +/* > + * Note that the PPC environment architecture talks about 80 bit virtual > + * addresses, with segmentation. Obviously that's not all visible to a > + * single process, which is all we're concerned with here. > + */ > +# ifdef TARGET_ABI32 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +# else > +# define TARGET_VIRT_ADDR_SPACE_BITS 64 > +# endif > +#else > +# define TARGET_LONG_BITS 32 > +# define TARGET_PHYS_ADDR_SPACE_BITS 36 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#define TARGET_PAGE_BITS 12 > +#define NB_MMU_MODES 10 > diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h > index fc12b4688e..1867215b0f 100644 > --- a/target/ppc/cpu.h > +++ b/target/ppc/cpu.h > @@ -22,48 +22,18 @@ > > #include "qemu-common.h" > #include "qemu/int128.h" > +#include "exec/cpu-defs.h" > +#include "cpu-qom.h" > > //#define PPC_EMULATE_32BITS_HYPV > > -#if defined (TARGET_PPC64) > -/* PowerPC 64 definitions */ > -#define TARGET_LONG_BITS 64 > -#define TARGET_PAGE_BITS 12 > - > #define TCG_GUEST_DEFAULT_MO 0 > > -/* Note that the official physical address space bits is 62-M where M > - is implementation dependent. I've not looked up M for the set of > - cpus we emulate at the system level. */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 62 > - > -/* Note that the PPC environment architecture talks about 80 bit virtual > - addresses, with segmentation. Obviously that's not all visible to a > - single process, which is all we're concerned with here. */ > -#ifdef TARGET_ABI32 > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#else > -# define TARGET_VIRT_ADDR_SPACE_BITS 64 > -#endif > - > #define TARGET_PAGE_BITS_64K 16 > #define TARGET_PAGE_BITS_16M 24 > > -#else /* defined (TARGET_PPC64) */ > -/* PowerPC 32 definitions */ > -#define TARGET_LONG_BITS 32 > -#define TARGET_PAGE_BITS 12 > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 36 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > -#endif /* defined (TARGET_PPC64) */ > - > #define CPUArchState struct CPUPPCState > > -#include "exec/cpu-defs.h" > -#include "cpu-qom.h" > - > #if defined (TARGET_PPC64) > #define PPC_ELF_MACHINE EM_PPC64 > #else > @@ -966,7 +936,6 @@ struct ppc_radix_page_info { > * real/paged mode combinations. The other two modes are for external PID > * load/store. > */ > -#define NB_MMU_MODES 10 > #define MMU_MODE8_SUFFIX _epl > #define MMU_MODE9_SUFFIX _eps > #define PPC_TLB_EPID_LOAD 8 > diff --git a/target/riscv/cpu-param.h b/target/riscv/cpu-param.h > new file mode 100644 > index 0000000000..5e38540c27 > --- /dev/null > +++ b/target/riscv/cpu-param.h > @@ -0,0 +1,11 @@ > +#if defined(TARGET_RISCV64) > +# define TARGET_LONG_BITS 64 > +# define TARGET_PHYS_ADDR_SPACE_BITS 56 /* 44-bit PPN */ > +# define TARGET_VIRT_ADDR_SPACE_BITS 48 /* sv48 */ > +#elif defined(TARGET_RISCV32) > +# define TARGET_LONG_BITS 32 > +# define TARGET_PHYS_ADDR_SPACE_BITS 34 /* 22-bit PPN */ > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 /* sv32 */ > +#endif > +#define TARGET_PAGE_BITS 12 /* 4 KiB Pages */ > +#define NB_MMU_MODES 4 > diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h > index 20bce8742e..7d9b07ebc0 100644 > --- a/target/riscv/cpu.h > +++ b/target/riscv/cpu.h > @@ -20,27 +20,15 @@ > #ifndef RISCV_CPU_H > #define RISCV_CPU_H > > -/* QEMU addressing/paging config */ > -#define TARGET_PAGE_BITS 12 /* 4 KiB Pages */ > -#if defined(TARGET_RISCV64) > -#define TARGET_LONG_BITS 64 > -#define TARGET_PHYS_ADDR_SPACE_BITS 56 /* 44-bit PPN */ > -#define TARGET_VIRT_ADDR_SPACE_BITS 48 /* sv48 */ > -#elif defined(TARGET_RISCV32) > -#define TARGET_LONG_BITS 32 > -#define TARGET_PHYS_ADDR_SPACE_BITS 34 /* 22-bit PPN */ > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 /* sv32 */ > -#endif > - > -#define TCG_GUEST_DEFAULT_MO 0 > - > -#define CPUArchState struct CPURISCVState > - > #include "qemu-common.h" > #include "qom/cpu.h" > #include "exec/cpu-defs.h" > #include "fpu/softfloat.h" > > +#define TCG_GUEST_DEFAULT_MO 0 > + > +#define CPUArchState struct CPURISCVState > + > #define TYPE_RISCV_CPU "riscv-cpu" > > #define RISCV_CPU_TYPE_SUFFIX "-" TYPE_RISCV_CPU > @@ -96,7 +84,6 @@ enum { > > #define TRANSLATE_FAIL 1 > #define TRANSLATE_SUCCESS 0 > -#define NB_MMU_MODES 4 > #define MMU_USER_IDX 3 > > #define MAX_RISCV_PMPS (16) > diff --git a/target/s390x/cpu-param.h b/target/s390x/cpu-param.h > new file mode 100644 > index 0000000000..0ba05b0f2a > --- /dev/null > +++ b/target/s390x/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 64 > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 64 > +#define TARGET_VIRT_ADDR_SPACE_BITS 64 > +#define NB_MMU_MODES 4 > diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h > index cb6d77053a..2ef3134177 100644 > --- a/target/s390x/cpu.h > +++ b/target/s390x/cpu.h > @@ -24,26 +24,17 @@ > #include "qemu-common.h" > #include "cpu-qom.h" > #include "cpu_models.h" > - > -#define TARGET_LONG_BITS 64 > +#include "exec/cpu-defs.h" > > #define ELF_MACHINE_UNAME "S390X" > > #define CPUArchState struct CPUS390XState > > -#include "exec/cpu-defs.h" > - > /* The z/Architecture has a strong memory model with some store-after-load > re-ordering */ > #define TCG_GUEST_DEFAULT_MO (TCG_MO_ALL & ~TCG_MO_ST_LD) > > -#define TARGET_PAGE_BITS 12 > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 64 > -#define TARGET_VIRT_ADDR_SPACE_BITS 64 > - > #include "exec/cpu-all.h" > > -#define NB_MMU_MODES 4 > #define TARGET_INSN_START_EXTRA_WORDS 1 > > #define MMU_MODE0_SUFFIX _primary > diff --git a/target/sh4/cpu-param.h b/target/sh4/cpu-param.h > new file mode 100644 > index 0000000000..83f170ba21 > --- /dev/null > +++ b/target/sh4/cpu-param.h > @@ -0,0 +1,9 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 /* 4k */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#ifdef CONFIG_USER_ONLY > +# define TARGET_VIRT_ADDR_SPACE_BITS 31 > +#else > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#define NB_MMU_MODES 2 > diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h > index 775b5743bf..894b6c6df9 100644 > --- a/target/sh4/cpu.h > +++ b/target/sh4/cpu.h > @@ -22,8 +22,8 @@ > > #include "qemu-common.h" > #include "cpu-qom.h" > +#include "exec/cpu-defs.h" > > -#define TARGET_LONG_BITS 32 > #define ALIGNED_ONLY > > /* CPU Subtypes */ > @@ -38,17 +38,6 @@ > > #define CPUArchState struct CPUSH4State > > -#include "exec/cpu-defs.h" > - > -#define TARGET_PAGE_BITS 12 /* 4k XXXXX */ > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#ifdef CONFIG_USER_ONLY > -# define TARGET_VIRT_ADDR_SPACE_BITS 31 > -#else > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > - > #define SR_MD 30 > #define SR_RB 29 > #define SR_BL 28 > @@ -132,7 +121,6 @@ typedef struct tlb_t { > #define UTLB_SIZE 64 > #define ITLB_SIZE 4 > > -#define NB_MMU_MODES 2 > #define TARGET_INSN_START_EXTRA_WORDS 1 > > enum sh_features { > diff --git a/target/sparc/cpu-param.h b/target/sparc/cpu-param.h > new file mode 100644 > index 0000000000..224876220a > --- /dev/null > +++ b/target/sparc/cpu-param.h > @@ -0,0 +1,17 @@ > +#ifdef TARGET_SPARC64 > +# define TARGET_LONG_BITS 64 > +# define TARGET_PAGE_BITS 13 /* 8k */ > +# define TARGET_PHYS_ADDR_SPACE_BITS 41 > +# ifdef TARGET_ABI32 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +# else > +# define TARGET_VIRT_ADDR_SPACE_BITS 44 > +# endif > +# define NB_MMU_MODES 6 > +#else > +# define TARGET_LONG_BITS 32 > +# define TARGET_PAGE_BITS 12 /* 4k */ > +# define TARGET_PHYS_ADDR_SPACE_BITS 36 > +# define TARGET_VIRT_ADDR_SPACE_BITS 32 > +# define NB_MMU_MODES 3 > +#endif > diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h > index 4972ebcfd4..a2975928d5 100644 > --- a/target/sparc/cpu.h > +++ b/target/sparc/cpu.h > @@ -4,31 +4,18 @@ > #include "qemu-common.h" > #include "qemu/bswap.h" > #include "cpu-qom.h" > +#include "exec/cpu-defs.h" > > #define ALIGNED_ONLY > > #if !defined(TARGET_SPARC64) > -#define TARGET_LONG_BITS 32 > #define TARGET_DPREGS 16 > -#define TARGET_PAGE_BITS 12 /* 4k */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 36 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > #else > -#define TARGET_LONG_BITS 64 > #define TARGET_DPREGS 32 > -#define TARGET_PAGE_BITS 13 /* 8k */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 41 > -# ifdef TARGET_ABI32 > -# define TARGET_VIRT_ADDR_SPACE_BITS 32 > -# else > -# define TARGET_VIRT_ADDR_SPACE_BITS 44 > -# endif > #endif > > #define CPUArchState struct CPUSPARCState > > -#include "exec/cpu-defs.h" > - > /*#define EXCP_INTERRUPT 0x100*/ > > /* trap definitions */ > @@ -225,10 +212,7 @@ enum { > #define MIN_NWINDOWS 3 > #define MAX_NWINDOWS 32 > > -#if !defined(TARGET_SPARC64) > -#define NB_MMU_MODES 3 > -#else > -#define NB_MMU_MODES 6 > +#ifdef TARGET_SPARC64 > typedef struct trap_state { > uint64_t tpc; > uint64_t tnpc; > diff --git a/target/tilegx/cpu-param.h b/target/tilegx/cpu-param.h > new file mode 100644 > index 0000000000..16e3497dae > --- /dev/null > +++ b/target/tilegx/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 64 > +#define TARGET_PAGE_BITS 16 /* TILE-Gx uses 64KB page size */ > +#define TARGET_PHYS_ADDR_SPACE_BITS 42 > +#define TARGET_VIRT_ADDR_SPACE_BITS 64 > +#define NB_MMU_MODES 1 > diff --git a/target/tilegx/cpu.h b/target/tilegx/cpu.h > index 238f8d36d7..429a6c6b43 100644 > --- a/target/tilegx/cpu.h > +++ b/target/tilegx/cpu.h > @@ -21,13 +21,9 @@ > #define TILEGX_CPU_H > > #include "qemu-common.h" > - > -#define TARGET_LONG_BITS 64 > - > -#define CPUArchState struct CPUTLGState > - > #include "exec/cpu-defs.h" > > +#define CPUArchState struct CPUTLGState > > /* TILE-Gx common register alias */ > #define TILEGX_R_RE 0 /* 0 register, for function/syscall return value > */ > @@ -154,9 +150,6 @@ static inline TileGXCPU *tilegx_env_get_cpu(CPUTLGState > *env) > #define ENV_OFFSET offsetof(TileGXCPU, env) > > /* TILE-Gx memory attributes */ > -#define TARGET_PAGE_BITS 16 /* TILE-Gx uses 64KB page size */ > -#define TARGET_PHYS_ADDR_SPACE_BITS 42 > -#define TARGET_VIRT_ADDR_SPACE_BITS 64 > #define MMU_USER_IDX 0 /* Current memory operation is in user mode */ > > #include "exec/cpu-all.h" > diff --git a/target/tricore/cpu-param.h b/target/tricore/cpu-param.h > new file mode 100644 > index 0000000000..60bd5a715a > --- /dev/null > +++ b/target/tricore/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 14 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 3 > diff --git a/target/tricore/cpu.h b/target/tricore/cpu.h > index 00e69dc154..67dc3b6272 100644 > --- a/target/tricore/cpu.h > +++ b/target/tricore/cpu.h > @@ -20,10 +20,10 @@ > #ifndef TRICORE_CPU_H > #define TRICORE_CPU_H > > -#include "tricore-defs.h" > #include "qemu-common.h" > #include "cpu-qom.h" > #include "exec/cpu-defs.h" > +#include "tricore-defs.h" > > #define CPUArchState struct CPUTriCoreState > > @@ -31,8 +31,6 @@ struct CPUTriCoreState; > > struct tricore_boot_info; > > -#define NB_MMU_MODES 3 > - > typedef struct tricore_def_t tricore_def_t; > > typedef struct CPUTriCoreState CPUTriCoreState; > diff --git a/target/tricore/tricore-defs.h b/target/tricore/tricore-defs.h > index e871aa1c6b..f5e0a0bed8 100644 > --- a/target/tricore/tricore-defs.h > +++ b/target/tricore/tricore-defs.h > @@ -18,11 +18,6 @@ > #ifndef QEMU_TRICORE_DEFS_H > #define QEMU_TRICORE_DEFS_H > > -#define TARGET_PAGE_BITS 14 > -#define TARGET_LONG_BITS 32 > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > #define TRICORE_TLB_MAX 128 > > #endif /* QEMU_TRICORE_DEFS_H */ > diff --git a/target/unicore32/cpu-param.h b/target/unicore32/cpu-param.h > new file mode 100644 > index 0000000000..86d0976713 > --- /dev/null > +++ b/target/unicore32/cpu-param.h > @@ -0,0 +1,5 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#define NB_MMU_MODES 2 > diff --git a/target/unicore32/cpu.h b/target/unicore32/cpu.h > index 735d3ae9dc..9ee7798465 100644 > --- a/target/unicore32/cpu.h > +++ b/target/unicore32/cpu.h > @@ -12,19 +12,11 @@ > #ifndef UNICORE32_CPU_H > #define UNICORE32_CPU_H > > -#define TARGET_LONG_BITS 32 > -#define TARGET_PAGE_BITS 12 > - > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > - > -#define CPUArchState struct CPUUniCore32State > - > #include "qemu-common.h" > #include "cpu-qom.h" > #include "exec/cpu-defs.h" > > -#define NB_MMU_MODES 2 > +#define CPUArchState struct CPUUniCore32State > > typedef struct CPUUniCore32State { > /* Regs for current mode. */ > diff --git a/target/xtensa/cpu-param.h b/target/xtensa/cpu-param.h > new file mode 100644 > index 0000000000..000e6026c0 > --- /dev/null > +++ b/target/xtensa/cpu-param.h > @@ -0,0 +1,9 @@ > +#define TARGET_LONG_BITS 32 > +#define TARGET_PAGE_BITS 12 > +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > +#ifdef CONFIG_USER_ONLY > +#define TARGET_VIRT_ADDR_SPACE_BITS 30 > +#else > +#define TARGET_VIRT_ADDR_SPACE_BITS 32 > +#endif > +#define NB_MMU_MODES 4 > diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h > index 4d8152682f..93440357b0 100644 > --- a/target/xtensa/cpu.h > +++ b/target/xtensa/cpu.h > @@ -28,28 +28,17 @@ > #ifndef XTENSA_CPU_H > #define XTENSA_CPU_H > > -#define ALIGNED_ONLY > -#define TARGET_LONG_BITS 32 > - > -/* Xtensa processors have a weak memory model */ > -#define TCG_GUEST_DEFAULT_MO (0) > - > -#define CPUArchState struct CPUXtensaState > - > #include "qemu-common.h" > #include "cpu-qom.h" > #include "exec/cpu-defs.h" > #include "xtensa-isa.h" > > -#define NB_MMU_MODES 4 > +#define ALIGNED_ONLY > > -#define TARGET_PHYS_ADDR_SPACE_BITS 32 > -#ifdef CONFIG_USER_ONLY > -#define TARGET_VIRT_ADDR_SPACE_BITS 30 > -#else > -#define TARGET_VIRT_ADDR_SPACE_BITS 32 > -#endif > -#define TARGET_PAGE_BITS 12 > +/* Xtensa processors have a weak memory model */ > +#define TCG_GUEST_DEFAULT_MO (0) > + > +#define CPUArchState struct CPUXtensaState > > enum { > /* Additional instructions */ > -- > 2.17.1 > >