@@ -13,7 +13,7 @@ QEMU_CFLAGS += -I.. -I$(SRC_PATH)/target-$(TARGET_BASE_ARCH) -DNEED_CPU_H
ARCH_DIRS = $(TARGET_BASE_ARCH)
ifeq ($(TARGET_BASE_ARCH), multi)
-ARCH_DIRS +=
+ARCH_DIRS += microblaze
endif
QEMU_CFLAGS+=-I$(SRC_PATH)/include
@@ -5281,7 +5281,7 @@ if [ "$HOST_VARIANT_DIR" != "" ]; then
fi
case "$target_name" in
multi)
- MULTI_TARGETS=""
+ MULTI_TARGETS="microblaze"
esac
case "$target_name" in
i386|x86_64)
@@ -5400,6 +5400,7 @@ for i in $ARCH $TARGET_BASE_ARCH $MULTI_TARGETS; do
echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
;;
microblaze*)
+ echo "CONFIG_ARCH_MULTI=y" >> $config_target_mak
echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
;;
@@ -22,8 +22,9 @@
#include "config.h"
#include "qemu-common.h"
-#define TARGET_LONG_BITS 64
+#include "target-multi/cpu-head.h"
+#undef CPUArchState
#define CPUArchState struct CPUMBState
#include "exec/cpu-defs.h"
@@ -221,8 +222,6 @@ typedef struct CPUMBState CPUMBState;
#define CC_NE 1
#define CC_EQ 0
-#define NB_MMU_MODES 3
-
#define STREAM_EXCEPTION (1 << 0)
#define STREAM_ATOMIC (1 << 1)
#define STREAM_TEST (1 << 2)
@@ -275,12 +274,6 @@ struct CPUMBState {
void mb_tcg_init(void);
MicroBlazeCPU *cpu_mb_init(const char *cpu_model);
-/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */
-#define TARGET_PAGE_BITS 12
-
-#define TARGET_PHYS_ADDR_SPACE_BITS 48
-#define TARGET_VIRT_ADDR_SPACE_BITS 64
-
#ifdef CONFIG_USER_ONLY
#define cpu_init(cpu_model) CPU(cpu_mb_init(cpu_model))
#endif
@@ -306,12 +299,6 @@ void mb_cpu_unassigned_access(CPUState *cpu, hwaddr addr,
unsigned size);
#endif
-#define cpu_get_tb_cpu_state(env, pc, cs_base, flags) \
- (ENV_GET_CPU(env)->cpu_get_tb_cpu_state(ENV_GET_CPU(env), (pc), \
- (cs_base), (flags)))
-
-#define cpu_mmu_index(env) (ENV_GET_CPU(env)->cpu_mmu_index(ENV_GET_CPU(env)))
-
#include "exec/cpu-all.h"
#include "exec/exec-all.h"
@@ -28,6 +28,7 @@
#include "trace-tcg.h"
+#include "target-multi/translate.h"
#define SIM_COMPAT 0
#define DISAS_GNU 1
@@ -49,7 +50,6 @@
*/
static TCGv_i32 env_debug;
-static TCGv_ptr cpu_env;
static TCGv_i32 cpu_R[32];
static TCGv_i32 cpu_SR[18];
static TCGv_i32 env_imm;
@@ -1933,7 +1933,7 @@ void mb_tcg_init(void)
{
int i;
- cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
+ multi_translate_init();
env_debug = tcg_global_mem_new_i32(TCG_AREG0,
offsetof(CPUMBState, debug),
@@ -0,0 +1 @@
+#include <target-microblaze/helper.h>
Convert Microblaze to a multi-arch enabled architecture. Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> --- Makefile.target | 2 +- configure | 3 ++- target-microblaze/cpu.h | 17 ++--------------- target-microblaze/translate.c | 4 ++-- target-multi/helper.h | 1 + 5 files changed, 8 insertions(+), 19 deletions(-)