mirror of
https://github.com/qemu/qemu.git
synced 2024-12-13 05:33:34 +08:00
6ebbf39000
allowing support of more than 2 mmu access modes. Add backward compatibility is_user variable in targets code when needed. Implement per target cpu_mmu_index function, avoiding duplicated code and #ifdef TARGET_xxx in softmmu core functions. Implement per target mmu modes definitions. As an example, add PowerPC hypervisor mode definition and Alpha executive and kernel modes definitions. Optimize PowerPC case, precomputing mmu_idx when MSR register changes and using the same definition in code translation code. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3384 c046a42c-6fe2-441c-8c8c-71466251a162
69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
/*
|
|
* CRIS execution defines
|
|
*
|
|
* Copyright (c) 2007 AXIS Communications AB
|
|
* Written by Edgar E. Iglesias
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
#include "dyngen-exec.h"
|
|
|
|
#if 1
|
|
register struct CPUCRISState *env asm(AREG0);
|
|
/* This is only used for tb lookup. */
|
|
register uint32_t T0 asm(AREG1);
|
|
register uint32_t T1 asm(AREG2);
|
|
#else
|
|
struct CPUCRISState *env;
|
|
/* This is only used for tb lookup. */
|
|
uint32_t T0;
|
|
uint32_t T1;
|
|
#endif
|
|
#include "cpu.h"
|
|
#include "exec-all.h"
|
|
|
|
#define RETURN() __asm__ __volatile__("" : : : "memory");
|
|
|
|
static inline void env_to_regs(void)
|
|
{
|
|
}
|
|
|
|
static inline void regs_to_env(void)
|
|
{
|
|
}
|
|
|
|
int cpu_cris_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
|
|
int mmu_idx, int is_softmmu);
|
|
void tlb_fill (target_ulong addr, int is_write, int mmu_idx, void *retaddr);
|
|
|
|
#if !defined(CONFIG_USER_ONLY)
|
|
#include "softmmu_exec.h"
|
|
#endif
|
|
|
|
void cpu_cris_flush_flags(CPUCRISState *env, int cc_op);
|
|
void helper_movec(CPUCRISState *env, int reg, uint32_t val);
|
|
|
|
void cpu_loop_exit(void);
|
|
|
|
static inline int cpu_halted(CPUState *env) {
|
|
if (!env->halted)
|
|
return 0;
|
|
if (env->interrupt_request & CPU_INTERRUPT_HARD) {
|
|
env->halted = 0;
|
|
return 0;
|
|
}
|
|
return EXCP_HALTED;
|
|
}
|