aboutsummaryrefslogtreecommitdiff
path: root/target/hppa/cpu.h
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2017-10-09 10:17:24 -0700
committerRichard Henderson <richard.henderson@linaro.org>2018-01-30 10:08:18 -0800
commit3d68ee7bbe34278d5792f5341ba0246069c6191c (patch)
treee3e5dff266fe0eb24e5d6bb0ea75964ee4e3bf52 /target/hppa/cpu.h
parenteaa3783b687491bb2430951d1be1d849b6be6719 (diff)
target/hppa: Implement mmu_idx from IA privilege level
Most aspects of privilege are not yet handled. But this gives us the start from which to begin checking. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'target/hppa/cpu.h')
-rw-r--r--target/hppa/cpu.h19
1 files changed, 15 insertions, 4 deletions
diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h
index 9fe5ea0a69..f60435b9ec 100644
--- a/target/hppa/cpu.h
+++ b/target/hppa/cpu.h
@@ -36,8 +36,10 @@
#define TARGET_PAGE_BITS 12
#define ALIGNED_ONLY
-#define NB_MMU_MODES 1
-#define MMU_USER_IDX 0
+#define NB_MMU_MODES 5
+#define MMU_KERNEL_IDX 0
+#define MMU_USER_IDX 3
+#define MMU_PHYS_IDX 4
#define TARGET_INSN_START_EXTRA_WORDS 1
/* Hardware exceptions, interupts, faults, and traps. */
@@ -195,7 +197,14 @@ static inline HPPACPU *hppa_env_get_cpu(CPUHPPAState *env)
static inline int cpu_mmu_index(CPUHPPAState *env, bool ifetch)
{
- return 0;
+#ifdef CONFIG_USER_ONLY
+ return MMU_USER_IDX;
+#else
+ if (env->psw & (ifetch ? PSW_C : PSW_D)) {
+ return env->iaoq_f & 3;
+ }
+ return MMU_PHYS_IDX; /* mmu disabled */
+#endif
}
void hppa_translate_init(void);
@@ -210,7 +219,9 @@ static inline void cpu_get_tb_cpu_state(CPUHPPAState *env, target_ulong *pc,
{
*pc = env->iaoq_f;
*cs_base = env->iaoq_b;
- *pflags = env->psw_n;
+ /* ??? E, T, H, L, B, P bits need to be here, when implemented. */
+ *pflags = (env->psw & (PSW_W | PSW_C | PSW_D))
+ | env->psw_n * PSW_N;
}
target_ureg cpu_hppa_get_psw(CPUHPPAState *env);