diff options
Diffstat (limited to 'target-mips/exec.h')
-rw-r--r-- | target-mips/exec.h | 66 |
1 files changed, 14 insertions, 52 deletions
diff --git a/target-mips/exec.h b/target-mips/exec.h index 8e909787e..307049ed3 100644 --- a/target-mips/exec.h +++ b/target-mips/exec.h @@ -43,12 +43,6 @@ register target_ulong T2 asm(AREG3); #define WTH2 (env->fpu->ft2.w[!FP_ENDIAN_IDX]) #endif -#if defined (DEBUG_OP) -# define RETURN() __asm__ __volatile__("nop" : : : "memory"); -#else -# define RETURN() __asm__ __volatile__("" : : : "memory"); -#endif - #include "cpu.h" #include "exec-all.h" @@ -56,7 +50,7 @@ register target_ulong T2 asm(AREG3); #include "softmmu_exec.h" #endif /* !defined(CONFIG_USER_ONLY) */ -#if defined(TARGET_MIPSN32) || defined(TARGET_MIPS64) +#if defined(TARGET_MIPS64) #if TARGET_LONG_BITS > HOST_LONG_BITS void do_dsll (void); void do_dsll32 (void); @@ -70,6 +64,8 @@ void do_dsllv (void); void do_dsrav (void); void do_dsrlv (void); void do_drotrv (void); +void do_dclo (void); +void do_dclz (void); #endif #endif @@ -84,7 +80,7 @@ void do_maddu (void); void do_msub (void); void do_msubu (void); #endif -#if defined(TARGET_MIPSN32) || defined(TARGET_MIPS64) +#if defined(TARGET_MIPS64) void do_ddiv (void); #if TARGET_LONG_BITS > HOST_LONG_BITS void do_ddivu (void); @@ -100,42 +96,12 @@ void fpu_dump_state(CPUState *env, FILE *f, int (*fpu_fprintf)(FILE *f, const char *fmt, ...), int flags); void dump_sc (void); -void do_lwl_raw (uint32_t); -void do_lwr_raw (uint32_t); -uint32_t do_swl_raw (uint32_t); -uint32_t do_swr_raw (uint32_t); -#if defined(TARGET_MIPSN32) || defined(TARGET_MIPS64) -void do_ldl_raw (uint64_t); -void do_ldr_raw (uint64_t); -uint64_t do_sdl_raw (uint64_t); -uint64_t do_sdr_raw (uint64_t); -#endif -#if !defined(CONFIG_USER_ONLY) -void do_lwl_user (uint32_t); -void do_lwl_kernel (uint32_t); -void do_lwr_user (uint32_t); -void do_lwr_kernel (uint32_t); -uint32_t do_swl_user (uint32_t); -uint32_t do_swl_kernel (uint32_t); -uint32_t do_swr_user (uint32_t); -uint32_t do_swr_kernel (uint32_t); -#if defined(TARGET_MIPSN32) || defined(TARGET_MIPS64) -void do_ldl_user (uint64_t); -void do_ldl_kernel (uint64_t); -void do_ldr_user (uint64_t); -void do_ldr_kernel (uint64_t); -uint64_t do_sdl_user (uint64_t); -uint64_t do_sdl_kernel (uint64_t); -uint64_t do_sdr_user (uint64_t); -uint64_t do_sdr_kernel (uint64_t); -#endif -#endif void do_pmon (int function); void dump_sc (void); int cpu_mips_handle_mmu_fault (CPUState *env, target_ulong address, int rw, - int is_user, int is_softmmu); + int mmu_idx, int is_softmmu); void do_interrupt (CPUState *env); void r4k_invalidate_tlb (CPUState *env, int idx, int use_extra); @@ -235,15 +201,15 @@ FOP_PROTO(le) FOP_PROTO(ngt) #undef FOP_PROTO -static inline void env_to_regs(void) +static always_inline void env_to_regs(void) { } -static inline void regs_to_env(void) +static always_inline void regs_to_env(void) { } -static inline int cpu_halted(CPUState *env) +static always_inline int cpu_halted(CPUState *env) { if (!env->halted) return 0; @@ -255,27 +221,23 @@ static inline int cpu_halted(CPUState *env) return EXCP_HALTED; } -static inline void compute_hflags(CPUState *env) +static always_inline void compute_hflags(CPUState *env) { env->hflags &= ~(MIPS_HFLAG_64 | MIPS_HFLAG_CP0 | MIPS_HFLAG_F64 | - MIPS_HFLAG_FPU | MIPS_HFLAG_UM); + MIPS_HFLAG_FPU | MIPS_HFLAG_KSU); if (!(env->CP0_Status & (1 << CP0St_EXL)) && !(env->CP0_Status & (1 << CP0St_ERL)) && !(env->hflags & MIPS_HFLAG_DM)) { - if (env->CP0_Status & (1 << CP0St_UM)) - env->hflags |= MIPS_HFLAG_UM; - if (env->CP0_Status & (1 << CP0St_R0)) - env->hflags |= MIPS_HFLAG_SM; + env->hflags |= (env->CP0_Status >> CP0St_KSU) & MIPS_HFLAG_KSU; } -#if defined(TARGET_MIPSN32) || defined(TARGET_MIPS64) - if (!(env->hflags & MIPS_HFLAG_UM) || +#if defined(TARGET_MIPS64) + if (((env->hflags & MIPS_HFLAG_KSU) != MIPS_HFLAG_UM) || (env->CP0_Status & (1 << CP0St_PX)) || (env->CP0_Status & (1 << CP0St_UX))) env->hflags |= MIPS_HFLAG_64; #endif if ((env->CP0_Status & (1 << CP0St_CU0)) || - (!(env->hflags & MIPS_HFLAG_UM) && - !(env->hflags & MIPS_HFLAG_SM))) + !(env->hflags & MIPS_HFLAG_KSU)) env->hflags |= MIPS_HFLAG_CP0; if (env->CP0_Status & (1 << CP0St_CU1)) env->hflags |= MIPS_HFLAG_FPU; |