Remove TLB from userspace

Remove TLB from userspace CPU structure.

Signed-off-by: Paul Brook <paul@codesourcery.com>
This commit is contained in:
Paul Brook 2010-03-12 16:54:58 +00:00
parent 41c1b1c9eb
commit 20cb400d41
4 changed files with 20 additions and 3 deletions

View File

@ -72,6 +72,7 @@ typedef uint64_t target_ulong;
#define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1) #define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1)
#define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE) #define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE)
#if !defined(CONFIG_USER_ONLY)
#define CPU_TLB_BITS 8 #define CPU_TLB_BITS 8
#define CPU_TLB_SIZE (1 << CPU_TLB_BITS) #define CPU_TLB_SIZE (1 << CPU_TLB_BITS)
@ -106,6 +107,18 @@ typedef struct CPUTLBEntry {
sizeof(target_phys_addr_t))]; sizeof(target_phys_addr_t))];
} CPUTLBEntry; } CPUTLBEntry;
#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]; \
target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE]; \
#else
#define CPU_COMMON_TLB
#endif
#ifdef HOST_WORDS_BIGENDIAN #ifdef HOST_WORDS_BIGENDIAN
typedef struct icount_decr_u16 { typedef struct icount_decr_u16 {
uint16_t high; uint16_t high;
@ -150,9 +163,7 @@ typedef struct CPUWatchpoint {
uint32_t stopped; /* Artificially stopped */ \ uint32_t stopped; /* Artificially stopped */ \
uint32_t interrupt_request; \ uint32_t interrupt_request; \
volatile sig_atomic_t exit_request; \ volatile sig_atomic_t exit_request; \
/* The meaning of the MMU modes is defined in the target code. */ \ CPU_COMMON_TLB \
CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \
target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE]; \
struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; \ struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; \
/* buffer for temporaries in the code generator */ \ /* buffer for temporaries in the code generator */ \
long temp_buf[CPU_TEMP_BUF_NLONGS]; \ long temp_buf[CPU_TEMP_BUF_NLONGS]; \

View File

@ -1690,9 +1690,11 @@ static const TCGTargetOpDef arm_op_defs[] = {
void tcg_target_init(TCGContext *s) void tcg_target_init(TCGContext *s)
{ {
#if !defined(CONFIG_USER_ONLY)
/* fail safe */ /* fail safe */
if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry)) if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
tcg_abort(); tcg_abort();
#endif
tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0,
((2 << TCG_REG_R14) - 1) & ~(1 << TCG_REG_R8)); ((2 << TCG_REG_R14) - 1) & ~(1 << TCG_REG_R8));

View File

@ -1353,9 +1353,11 @@ void tcg_target_qemu_prologue(TCGContext *s)
void tcg_target_init(TCGContext *s) void tcg_target_init(TCGContext *s)
{ {
#if !defined(CONFIG_USER_ONLY)
/* fail safe */ /* fail safe */
if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry)) if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
tcg_abort(); tcg_abort();
#endif
tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xff); tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xff);
tcg_regset_set32(tcg_target_call_clobber_regs, 0, tcg_regset_set32(tcg_target_call_clobber_regs, 0,

View File

@ -1426,9 +1426,11 @@ static const TCGTargetOpDef x86_64_op_defs[] = {
void tcg_target_init(TCGContext *s) void tcg_target_init(TCGContext *s)
{ {
#if !defined(CONFIG_USER_ONLY)
/* fail safe */ /* fail safe */
if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry)) if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
tcg_abort(); tcg_abort();
#endif
tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffff); tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffff);
tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I64], 0, 0xffff); tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I64], 0, 0xffff);