From fbe4f65b28aa24534afe7669eb3087c1b5657c08 Mon Sep 17 00:00:00 2001 From: ths Date: Sun, 1 Apr 2007 11:16:48 +0000 Subject: [PATCH] MIPS64 configurations. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2564 c046a42c-6fe2-441c-8c8c-71466251a162 --- .cvsignore | 4 ++++ Makefile | 2 ++ Makefile.target | 35 ++++++++++++++++++++++++++++------- configure | 18 ++++++++++++++++-- target-mips/op_helper.c | 2 -- 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/.cvsignore b/.cvsignore index ae68e450c8..5277a1d7d1 100644 --- a/.cvsignore +++ b/.cvsignore @@ -29,6 +29,10 @@ mips-softmmu mipsel-softmmu mips-linux-user mipsel-linux-user +mips64-softmmu +mips64el-softmmu +mips64-linux-user +mips64el-linux-user m68k-linux-user .gdbinit sh4-linux-user diff --git a/Makefile b/Makefile index 9b9a32d0c8..60e3ec1978 100644 --- a/Makefile +++ b/Makefile @@ -141,6 +141,8 @@ tarbin: $(bindir)/qemu-system-x86_64 \ $(bindir)/qemu-system-mips \ $(bindir)/qemu-system-mipsel \ + $(bindir)/qemu-system-mips64 \ + $(bindir)/qemu-system-mips64el \ $(bindir)/qemu-system-arm \ $(bindir)/qemu-i386 \ $(bindir)/qemu-arm \ diff --git a/Makefile.target b/Makefile.target index b52656434f..3d221babb8 100644 --- a/Makefile.target +++ b/Makefile.target @@ -4,6 +4,9 @@ TARGET_BASE_ARCH:=$(TARGET_ARCH) ifeq ($(TARGET_ARCH), x86_64) TARGET_BASE_ARCH:=i386 endif +ifeq ($(TARGET_ARCH), mips64) +TARGET_BASE_ARCH:=mips +endif ifeq ($(TARGET_ARCH), ppc64) TARGET_BASE_ARCH:=ppc endif @@ -44,6 +47,11 @@ ifeq ($(TARGET_ARCH),mips) TARGET_ARCH2=mipsel endif endif +ifeq ($(TARGET_ARCH),mips64) + ifneq ($(TARGET_WORDS_BIGENDIAN),yes) + TARGET_ARCH2=mips64el + endif +endif QEMU_USER=qemu-$(TARGET_ARCH2) # system emulator name ifdef CONFIG_SOFTMMU @@ -170,7 +178,19 @@ BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld endif ifeq ($(ARCH),mips) +ifeq ($(WORDS_BIGENDIAN),yes) BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld +else +BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld +endif +endif + +ifeq ($(ARCH),mips64) +ifeq ($(WORDS_BIGENDIAN),yes) +BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld +else +BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld +endif endif ifeq ($(CONFIG_DARWIN),yes) @@ -258,7 +278,7 @@ ifeq ($(TARGET_BASE_ARCH), ppc) LIBOBJS+= op_helper.o helper.o endif -ifeq ($(TARGET_ARCH), mips) +ifeq ($(TARGET_BASE_ARCH), mips) LIBOBJS+= op_helper.o helper.o endif @@ -295,7 +315,7 @@ endif ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc) LIBOBJS+=ppc-dis.o endif -ifeq ($(findstring mips, $(TARGET_ARCH) $(ARCH)),mips) +ifeq ($(findstring mips, $(TARGET_BASE_ARCH) $(ARCH)),mips) LIBOBJS+=mips-dis.o endif ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc) @@ -387,7 +407,7 @@ VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o VL_OBJS+= grackle_pci.o prep_pci.o unin_pci.o CPPFLAGS += -DHAS_AUDIO endif -ifeq ($(TARGET_ARCH), mips) +ifeq ($(TARGET_BASE_ARCH), mips) VL_OBJS+= mips_r4k.o mips_malta.o mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o VL_OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o VL_OBJS+= piix_pci.o parallel.o mixeng.o cirrus_vga.o $(SOUND_HW) $(AUDIODRV) @@ -554,10 +574,11 @@ op_helper.o: op_helper_mem.h translate.o: translate.c translate_init.c endif -ifeq ($(TARGET_ARCH), mips) -op.o: op.c op_template.c fop_template.c op_mem.c -op_helper.o: op_helper_mem.c -translate.o: translate.c translate_init.c +ifeq ($(TARGET_BASE_ARCH), mips) +helper.o: cpu.h exec-all.h +op.o: op_template.c fop_template.c op_mem.c exec.h +op_helper.o: op_helper_mem.c exec.h softmmu_template.h +translate.o: translate_init.c exec-all.h disas.h endif loader.o: loader.c elf_ops.h diff --git a/configure b/configure index 63f327e91f..7754774d61 100755 --- a/configure +++ b/configure @@ -50,6 +50,9 @@ case "$cpu" in mips) cpu="mips" ;; + mips64) + cpu="mips64" + ;; s390) cpu="s390" ;; @@ -418,7 +421,7 @@ fi if test -z "$target_list" ; then # these targets are portable if [ "$softmmu" = "yes" ] ; then - target_list="i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu arm-softmmu ppc64-softmmu" + target_list="i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu arm-softmmu ppc64-softmmu" fi # the following are Linux specific if [ "$linux_user" = "yes" ] ; then @@ -457,7 +460,7 @@ fi else # if cross compiling, cannot launch a program, so make a static guess -if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k" -o "$cpu" = "armv4b"; then +if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "mips64" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k" -o "$cpu" = "armv4b"; then bigendian="yes" fi @@ -675,6 +678,9 @@ elif test "$cpu" = "powerpc" ; then elif test "$cpu" = "mips" ; then echo "ARCH=mips" >> $config_mak echo "#define HOST_MIPS 1" >> $config_h +elif test "$cpu" = "mips64" ; then + echo "ARCH=mips64" >> $config_mak + echo "#define HOST_MIPS64 1" >> $config_h elif test "$cpu" = "s390" ; then echo "ARCH=s390" >> $config_mak echo "#define HOST_S390 1" >> $config_h @@ -801,6 +807,7 @@ target_bigendian="no" [ "$target_cpu" = "ppc" ] && target_bigendian=yes [ "$target_cpu" = "ppc64" ] && target_bigendian=yes [ "$target_cpu" = "mips" ] && target_bigendian=yes +[ "$target_cpu" = "mips64" ] && target_bigendian=yes [ "$target_cpu" = "sh4eb" ] && target_bigendian=yes [ "$target_cpu" = "m68k" ] && target_bigendian=yes target_softmmu="no" @@ -903,6 +910,13 @@ elif test "$target_cpu" = "mips" -o "$target_cpu" = "mipsel" ; then echo "#define TARGET_MIPS 1" >> $config_h echo "CONFIG_SOFTFLOAT=yes" >> $config_mak echo "#define CONFIG_SOFTFLOAT 1" >> $config_h +elif test "$target_cpu" = "mips64" -o "$target_cpu" = "mips64el" ; then + echo "TARGET_ARCH=mips64" >> $config_mak + echo "#define TARGET_ARCH \"mips64\"" >> $config_h + echo "#define TARGET_MIPS 1" >> $config_h + echo "#define TARGET_MIPS64 1" >> $config_h + echo "CONFIG_SOFTFLOAT=yes" >> $config_mak + echo "#define CONFIG_SOFTFLOAT 1" >> $config_h elif test "$target_cpu" = "sh4" -o "$target_cpu" = "sh4eb" ; then echo "TARGET_ARCH=sh4" >> $config_mak echo "#define TARGET_ARCH \"sh4\"" >> $config_h diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c index f9748fc16b..fb70f51e86 100644 --- a/target-mips/op_helper.c +++ b/target-mips/op_helper.c @@ -336,8 +336,6 @@ void do_mtc0_status_irqraise_debug(void) fprintf(logfile, "Raise pending IRQs\n"); } -#include "softfloat.h" - void fpu_handle_exception(void) { #ifdef CONFIG_SOFTFLOAT