/*
* SH4 emulation
- *
+ *
* Copyright (c) 2005 Samuel Tardieu
*
* This library is free software; you can redistribute it and/or
#include <assert.h>
#include "exec.h"
-void cpu_loop_exit(void)
-{
- longjmp(env->jmp_env, 1);
-}
-
-void do_raise_exception(void)
-{
- cpu_loop_exit();
-}
-
#ifndef CONFIG_USER_ONLY
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
#define SHIFT 0
#include "softmmu_template.h"
#define SHIFT 3
#include "softmmu_template.h"
-void tlb_fill(target_ulong addr, int is_write, int is_user, void *retaddr)
+void tlb_fill(target_ulong addr, int is_write, int mmu_idx, void *retaddr)
{
TranslationBlock *tb;
CPUState *saved_env;
generated code */
saved_env = env;
env = cpu_single_env;
- ret = cpu_sh4_handle_mmu_fault(env, addr, is_write, is_user, 1);
+ ret = cpu_sh4_handle_mmu_fault(env, addr, is_write, mmu_idx, 1);
if (ret) {
if (retaddr) {
/* now we have a real cpu fault */
cpu_restore_state(tb, env, pc, NULL);
}
}
- do_raise_exception();
+ cpu_loop_exit();
}
env = saved_env;
}
#endif
+void helper_ldtlb(void)
+{
+#ifdef CONFIG_USER_ONLY
+ /* XXXXX */
+ assert(0);
+#else
+ cpu_load_tlb(env);
+#endif
+}
+
+void helper_raise_illegal_instruction(void)
+{
+ env->exception_index = 0x180;
+ cpu_loop_exit();
+}
+
+void helper_raise_slot_illegal_instruction(void)
+{
+ env->exception_index = 0x1a0;
+ cpu_loop_exit();
+}
+
+void helper_debug(void)
+{
+ env->exception_index = EXCP_DEBUG;
+ cpu_loop_exit();
+}
+
+void helper_sleep(void)
+{
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ cpu_loop_exit();
+}
+
+void helper_trapa(uint32_t tra)
+{
+ env->tra = tra << 2;
+ env->exception_index = 0x160;
+ cpu_loop_exit();
+}
+
void helper_addc_T0_T1(void)
{
uint32_t tmp0, tmp1;