exec: Change tlb_fill() argument to CPUState
Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
f0c3c505a8
commit
d5a11fefef
@ -332,7 +332,7 @@ bool io_mem_read(struct MemoryRegion *mr, hwaddr addr,
|
|||||||
bool io_mem_write(struct MemoryRegion *mr, hwaddr addr,
|
bool io_mem_write(struct MemoryRegion *mr, hwaddr addr,
|
||||||
uint64_t value, unsigned size);
|
uint64_t value, unsigned size);
|
||||||
|
|
||||||
void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cpu, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr);
|
uintptr_t retaddr);
|
||||||
|
|
||||||
uint8_t helper_ldb_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
|
uint8_t helper_ldb_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
|
||||||
|
@ -158,7 +158,7 @@ WORD_TYPE helper_le_ld_name(CPUArchState *env, target_ulong addr, int mmu_idx,
|
|||||||
do_unaligned_access(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
do_unaligned_access(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tlb_fill(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
tlb_fill(ENV_GET_CPU(env), addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
||||||
tlb_addr = env->tlb_table[mmu_idx][index].ADDR_READ;
|
tlb_addr = env->tlb_table[mmu_idx][index].ADDR_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ WORD_TYPE helper_be_ld_name(CPUArchState *env, target_ulong addr, int mmu_idx,
|
|||||||
do_unaligned_access(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
do_unaligned_access(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tlb_fill(env, addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
tlb_fill(ENV_GET_CPU(env), addr, READ_ACCESS_TYPE, mmu_idx, retaddr);
|
||||||
tlb_addr = env->tlb_table[mmu_idx][index].ADDR_READ;
|
tlb_addr = env->tlb_table[mmu_idx][index].ADDR_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,7 +360,7 @@ void helper_le_st_name(CPUArchState *env, target_ulong addr, DATA_TYPE val,
|
|||||||
do_unaligned_access(env, addr, 1, mmu_idx, retaddr);
|
do_unaligned_access(env, addr, 1, mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tlb_fill(env, addr, 1, mmu_idx, retaddr);
|
tlb_fill(ENV_GET_CPU(env), addr, 1, mmu_idx, retaddr);
|
||||||
tlb_addr = env->tlb_table[mmu_idx][index].addr_write;
|
tlb_addr = env->tlb_table[mmu_idx][index].addr_write;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ void helper_be_st_name(CPUArchState *env, target_ulong addr, DATA_TYPE val,
|
|||||||
do_unaligned_access(env, addr, 1, mmu_idx, retaddr);
|
do_unaligned_access(env, addr, 1, mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tlb_fill(env, addr, 1, mmu_idx, retaddr);
|
tlb_fill(ENV_GET_CPU(env), addr, 1, mmu_idx, retaddr);
|
||||||
tlb_addr = env->tlb_table[mmu_idx][index].addr_write;
|
tlb_addr = env->tlb_table[mmu_idx][index].addr_write;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,14 +152,16 @@ void alpha_cpu_unassigned_access(CPUState *cs, hwaddr addr,
|
|||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
/* XXX: fix it to restore all registers */
|
/* XXX: fix it to restore all registers */
|
||||||
void tlb_fill(CPUAlphaState *env, target_ulong addr, int is_write,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write,
|
||||||
int mmu_idx, uintptr_t retaddr)
|
int mmu_idx, uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
AlphaCPU *cpu = alpha_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = alpha_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = alpha_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret != 0)) {
|
if (unlikely(ret != 0)) {
|
||||||
|
AlphaCPU *cpu = ALPHA_CPU(cs);
|
||||||
|
CPUAlphaState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
}
|
}
|
||||||
|
@ -72,17 +72,19 @@ uint32_t HELPER(neon_tbl)(CPUARMState *env, uint32_t ireg, uint32_t def,
|
|||||||
#include "exec/softmmu_template.h"
|
#include "exec/softmmu_template.h"
|
||||||
|
|
||||||
/* try to fill the TLB and return an exception if error. If retaddr is
|
/* try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
* NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
* from generated code or from helper.c)
|
||||||
void tlb_fill(CPUARMState *env, target_ulong addr, int is_write, int mmu_idx,
|
*/
|
||||||
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = arm_env_get_cpu(env);
|
|
||||||
CPUState *cs = CPU(cpu);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = arm_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
ret = arm_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -54,15 +54,16 @@
|
|||||||
/* Try to fill the TLB and return an exception if error. If retaddr is
|
/* Try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
void tlb_fill(CPUCRISState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
CRISCPU *cpu = cris_env_get_cpu(env);
|
CRISCPU *cpu = CRIS_CPU(cs);
|
||||||
|
CPUCRISState *env = &cpu->env;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
D_LOG("%s pc=%x tpc=%x ra=%p\n", __func__,
|
D_LOG("%s pc=%x tpc=%x ra=%p\n", __func__,
|
||||||
env->pc, env->pregs[PR_EDA], (void *)retaddr);
|
env->pc, env->pregs[PR_EDA], (void *)retaddr);
|
||||||
ret = cris_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = cris_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
|
@ -129,18 +129,20 @@ void helper_boundl(CPUX86State *env, target_ulong a0, int v)
|
|||||||
|
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
/* try to fill the TLB and return an exception if error. If retaddr is
|
/* try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
* NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
* from generated code or from helper.c)
|
||||||
|
*/
|
||||||
/* XXX: fix it to restore all registers */
|
/* XXX: fix it to restore all registers */
|
||||||
void tlb_fill(CPUX86State *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
X86CPU *cpu = x86_env_get_cpu(env);
|
|
||||||
CPUState *cs = CPU(cpu);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = x86_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
ret = x86_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
X86CPU *cpu = X86_CPU(cs);
|
||||||
|
CPUX86State *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -150,16 +150,19 @@ uint32_t HELPER(rcsr_jrx)(CPULM32State *env)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Try to fill the TLB and return an exception if error. If retaddr is
|
/* Try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
* NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
* from generated code or from helper.c)
|
||||||
void tlb_fill(CPULM32State *env, target_ulong addr, int is_write, int mmu_idx,
|
*/
|
||||||
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
LM32CPU *cpu = lm32_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = lm32_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = lm32_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
LM32CPU *cpu = LM32_CPU(cs);
|
||||||
|
CPULM32State *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -53,14 +53,16 @@ extern int semihosting_enabled;
|
|||||||
/* Try to fill the TLB and return an exception if error. If retaddr is
|
/* Try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
void tlb_fill(CPUM68KState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
M68kCPU *cpu = m68k_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = m68k_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = m68k_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
M68kCPU *cpu = M68K_CPU(cs);
|
||||||
|
CPUM68KState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -39,16 +39,19 @@
|
|||||||
#include "exec/softmmu_template.h"
|
#include "exec/softmmu_template.h"
|
||||||
|
|
||||||
/* Try to fill the TLB and return an exception if error. If retaddr is
|
/* Try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
* NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
* from generated code or from helper.c)
|
||||||
void tlb_fill(CPUMBState *env, target_ulong addr, int is_write, int mmu_idx,
|
*/
|
||||||
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
MicroBlazeCPU *cpu = mb_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = mb_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = mb_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
|
||||||
|
CPUMBState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -2145,15 +2145,16 @@ static void do_unaligned_access(CPUMIPSState *env, target_ulong addr,
|
|||||||
do_raise_exception(env, (is_write == 1) ? EXCP_AdES : EXCP_AdEL, retaddr);
|
do_raise_exception(env, (is_write == 1) ? EXCP_AdES : EXCP_AdEL, retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlb_fill(CPUMIPSState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
MIPSCPU *cpu = mips_env_get_cpu(env);
|
|
||||||
CPUState *cs = CPU(cpu);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = mips_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
ret = mips_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
MIPSCPU *cpu = MIPS_CPU(cs);
|
||||||
|
CPUMIPSState *env = &cpu->env;
|
||||||
|
|
||||||
do_raise_exception_err(env, cs->exception_index,
|
do_raise_exception_err(env, cs->exception_index,
|
||||||
env->error_code, retaddr);
|
env->error_code, retaddr);
|
||||||
}
|
}
|
||||||
|
@ -46,13 +46,14 @@
|
|||||||
/* Try to fill the TLB and return an exception if error. If retaddr is
|
/* Try to fill the TLB and return an exception if error. If retaddr is
|
||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
void tlb_fill(CPUMoxieState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
MoxieCPU *cpu = moxie_env_get_cpu(env);
|
MoxieCPU *cpu = MOXIE_CPU(cs);
|
||||||
|
CPUMoxieState *env = &cpu->env;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = moxie_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = moxie_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -36,15 +36,17 @@
|
|||||||
#define SHIFT 3
|
#define SHIFT 3
|
||||||
#include "exec/softmmu_template.h"
|
#include "exec/softmmu_template.h"
|
||||||
|
|
||||||
void tlb_fill(CPUOpenRISCState *env, target_ulong addr, int is_write,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write,
|
||||||
int mmu_idx, uintptr_t retaddr)
|
int mmu_idx, uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
OpenRISCCPU *cpu = openrisc_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = openrisc_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = openrisc_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
OpenRISCCPU *cpu = OPENRISC_CPU(cs);
|
||||||
|
CPUOpenRISCState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault. */
|
/* now we have a real cpu fault. */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -2893,11 +2893,12 @@ void helper_booke206_tlbflush(CPUPPCState *env, uint32_t type)
|
|||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
/* XXX: fix it to restore all registers */
|
/* XXX: fix it to restore all registers */
|
||||||
void tlb_fill(CPUPPCState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
CPUState *cpu = CPU(ppc_env_get_cpu(env));
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
|
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (pcc->handle_mmu_fault) {
|
if (pcc->handle_mmu_fault) {
|
||||||
@ -2910,6 +2911,6 @@ void tlb_fill(CPUPPCState *env, target_ulong addr, int is_write, int mmu_idx,
|
|||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
}
|
}
|
||||||
helper_raise_exception_err(env, cpu->exception_index, env->error_code);
|
helper_raise_exception_err(env, cs->exception_index, env->error_code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,14 +44,16 @@
|
|||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
/* XXX: fix it to restore all registers */
|
/* XXX: fix it to restore all registers */
|
||||||
void tlb_fill(CPUS390XState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
S390CPU *cpu = s390_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = s390_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = s390_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret != 0)) {
|
if (unlikely(ret != 0)) {
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
if (likely(retaddr)) {
|
if (likely(retaddr)) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -38,15 +38,17 @@
|
|||||||
#define SHIFT 3
|
#define SHIFT 3
|
||||||
#include "exec/softmmu_template.h"
|
#include "exec/softmmu_template.h"
|
||||||
|
|
||||||
void tlb_fill(CPUSH4State *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
SuperHCPU *cpu = sh_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = superh_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = superh_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
|
SuperHCPU *cpu = SUPERH_CPU(cs);
|
||||||
|
CPUSH4State *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
}
|
}
|
||||||
|
@ -2438,14 +2438,16 @@ static void QEMU_NORETURN do_unaligned_access(CPUSPARCState *env,
|
|||||||
NULL, it means that the function was called in C code (i.e. not
|
NULL, it means that the function was called in C code (i.e. not
|
||||||
from generated code or from helper.c) */
|
from generated code or from helper.c) */
|
||||||
/* XXX: fix it to restore all registers */
|
/* XXX: fix it to restore all registers */
|
||||||
void tlb_fill(CPUSPARCState *env, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write, int mmu_idx,
|
||||||
uintptr_t retaddr)
|
uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
SPARCCPU *cpu = sparc_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = sparc_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = sparc_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
SPARCCPU *cpu = SPARC_CPU(cs);
|
||||||
|
CPUSPARCState *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
}
|
}
|
||||||
|
@ -257,14 +257,16 @@ uint32_t HELPER(ror_cc)(CPUUniCore32State *env, uint32_t x, uint32_t i)
|
|||||||
#define SHIFT 3
|
#define SHIFT 3
|
||||||
#include "exec/softmmu_template.h"
|
#include "exec/softmmu_template.h"
|
||||||
|
|
||||||
void tlb_fill(CPUUniCore32State *env, target_ulong addr, int is_write,
|
void tlb_fill(CPUState *cs, target_ulong addr, int is_write,
|
||||||
int mmu_idx, uintptr_t retaddr)
|
int mmu_idx, uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
UniCore32CPU *cpu = uc32_env_get_cpu(env);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = uc32_cpu_handle_mmu_fault(CPU(cpu), addr, is_write, mmu_idx);
|
ret = uc32_cpu_handle_mmu_fault(cs, addr, is_write, mmu_idx);
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
UniCore32CPU *cpu = UNICORE32_CPU(cs);
|
||||||
|
CPUUniCore32State *env = &cpu->env;
|
||||||
|
|
||||||
if (retaddr) {
|
if (retaddr) {
|
||||||
/* now we have a real cpu fault */
|
/* now we have a real cpu fault */
|
||||||
cpu_restore_state(env, retaddr);
|
cpu_restore_state(env, retaddr);
|
||||||
|
@ -60,9 +60,11 @@ static void do_unaligned_access(CPUXtensaState *env,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlb_fill(CPUXtensaState *env,
|
void tlb_fill(CPUState *cs,
|
||||||
target_ulong vaddr, int is_write, int mmu_idx, uintptr_t retaddr)
|
target_ulong vaddr, int is_write, int mmu_idx, uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
|
XtensaCPU *cpu = XTENSA_CPU(cs);
|
||||||
|
CPUXtensaState *env = &cpu->env;
|
||||||
uint32_t paddr;
|
uint32_t paddr;
|
||||||
uint32_t page_size;
|
uint32_t page_size;
|
||||||
unsigned access;
|
unsigned access;
|
||||||
|
Loading…
Reference in New Issue
Block a user