Commit a2458627f9d29675ef29d2a3c8c6a3df99bedfb1
1 parent
b1fc0348
ppc64 target
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1523 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
5 changed files
with
48 additions
and
6 deletions
Makefile.target
... | ... | @@ -4,6 +4,9 @@ TARGET_BASE_ARCH:=$(TARGET_ARCH) |
4 | 4 | ifeq ($(TARGET_ARCH), x86_64) |
5 | 5 | TARGET_BASE_ARCH:=i386 |
6 | 6 | endif |
7 | +ifeq ($(TARGET_ARCH), ppc64) | |
8 | +TARGET_BASE_ARCH:=ppc | |
9 | +endif | |
7 | 10 | ifeq ($(TARGET_ARCH), sparc64) |
8 | 11 | TARGET_BASE_ARCH:=sparc |
9 | 12 | endif |
... | ... | @@ -195,7 +198,7 @@ ifeq ($(TARGET_ARCH), x86_64) |
195 | 198 | LIBOBJS+=helper.o helper2.o |
196 | 199 | endif |
197 | 200 | |
198 | -ifeq ($(TARGET_ARCH), ppc) | |
201 | +ifeq ($(TARGET_BASE_ARCH), ppc) | |
199 | 202 | LIBOBJS+= op_helper.o helper.o |
200 | 203 | endif |
201 | 204 | |
... | ... | @@ -225,7 +228,7 @@ endif |
225 | 228 | ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha) |
226 | 229 | LIBOBJS+=alpha-dis.o |
227 | 230 | endif |
228 | -ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc) | |
231 | +ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc) | |
229 | 232 | LIBOBJS+=ppc-dis.o |
230 | 233 | endif |
231 | 234 | ifeq ($(findstring mips, $(TARGET_ARCH) $(ARCH)),mips) |
... | ... | @@ -286,7 +289,7 @@ VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV) |
286 | 289 | VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o |
287 | 290 | VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o |
288 | 291 | endif |
289 | -ifeq ($(TARGET_ARCH), ppc) | |
292 | +ifeq ($(TARGET_BASE_ARCH), ppc) | |
290 | 293 | VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV) |
291 | 294 | VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o |
292 | 295 | VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o |
... | ... | @@ -400,7 +403,7 @@ op.o: op.c op_template.h op_mem.h fop_template.h fbranch_template.h |
400 | 403 | magic_load.o: elf_op.h |
401 | 404 | endif |
402 | 405 | |
403 | -ifeq ($(TARGET_ARCH), ppc) | |
406 | +ifeq ($(TARGET_BASE_ARCH), ppc) | |
404 | 407 | op.o: op.c op_template.h op_mem.h |
405 | 408 | op_helper.o: op_helper_mem.h |
406 | 409 | translate.o: translate.c translate_init.c | ... | ... |
configure
... | ... | @@ -611,6 +611,7 @@ target_bigendian="no" |
611 | 611 | [ "$target_cpu" = "sparc" ] && target_bigendian=yes |
612 | 612 | [ "$target_cpu" = "sparc64" ] && target_bigendian=yes |
613 | 613 | [ "$target_cpu" = "ppc" ] && target_bigendian=yes |
614 | +[ "$target_cpu" = "ppc64" ] && target_bigendian=yes | |
614 | 615 | [ "$target_cpu" = "mips" ] && target_bigendian=yes |
615 | 616 | target_softmmu="no" |
616 | 617 | if expr $target : '.*-softmmu' > /dev/null ; then |
... | ... | @@ -676,6 +677,11 @@ elif test "$target_cpu" = "ppc" ; then |
676 | 677 | echo "TARGET_ARCH=ppc" >> $config_mak |
677 | 678 | echo "#define TARGET_ARCH \"ppc\"" >> $config_h |
678 | 679 | echo "#define TARGET_PPC 1" >> $config_h |
680 | +elif test "$target_cpu" = "ppc64" ; then | |
681 | + echo "TARGET_ARCH=ppc64" >> $config_mak | |
682 | + echo "#define TARGET_ARCH \"ppc64\"" >> $config_h | |
683 | + echo "#define TARGET_PPC 1" >> $config_h | |
684 | + echo "#define TARGET_PPC64 1" >> $config_h | |
679 | 685 | elif test "$target_cpu" = "x86_64" ; then |
680 | 686 | echo "TARGET_ARCH=x86_64" >> $config_mak |
681 | 687 | echo "#define TARGET_ARCH \"x86_64\"" >> $config_h | ... | ... |
dis-asm.h
... | ... | @@ -126,6 +126,24 @@ enum bfd_architecture |
126 | 126 | #define bfd_mach_h8300h 2 |
127 | 127 | #define bfd_mach_h8300s 3 |
128 | 128 | bfd_arch_powerpc, /* PowerPC */ |
129 | +#define bfd_mach_ppc 0 | |
130 | +#define bfd_mach_ppc64 1 | |
131 | +#define bfd_mach_ppc_403 403 | |
132 | +#define bfd_mach_ppc_403gc 4030 | |
133 | +#define bfd_mach_ppc_505 505 | |
134 | +#define bfd_mach_ppc_601 601 | |
135 | +#define bfd_mach_ppc_602 602 | |
136 | +#define bfd_mach_ppc_603 603 | |
137 | +#define bfd_mach_ppc_ec603e 6031 | |
138 | +#define bfd_mach_ppc_604 604 | |
139 | +#define bfd_mach_ppc_620 620 | |
140 | +#define bfd_mach_ppc_630 630 | |
141 | +#define bfd_mach_ppc_750 750 | |
142 | +#define bfd_mach_ppc_860 860 | |
143 | +#define bfd_mach_ppc_a35 35 | |
144 | +#define bfd_mach_ppc_rs64ii 642 | |
145 | +#define bfd_mach_ppc_rs64iii 643 | |
146 | +#define bfd_mach_ppc_7400 7400 | |
129 | 147 | bfd_arch_rs6000, /* IBM RS/6000 */ |
130 | 148 | bfd_arch_hppa, /* HP PA RISC */ |
131 | 149 | bfd_arch_d10v, /* Mitsubishi D10V */ | ... | ... |
disas.c
... | ... | @@ -179,6 +179,11 @@ void target_disas(FILE *out, target_ulong code, target_ulong size, int flags) |
179 | 179 | #elif defined(TARGET_PPC) |
180 | 180 | if (cpu_single_env->msr[MSR_LE]) |
181 | 181 | disasm_info.endian = BFD_ENDIAN_LITTLE; |
182 | +#ifdef TARGET_PPC64 | |
183 | + disasm_info.mach = bfd_mach_ppc64; | |
184 | +#else | |
185 | + disasm_info.mach = bfd_mach_ppc; | |
186 | +#endif | |
182 | 187 | print_insn = print_insn_ppc; |
183 | 188 | #elif defined(TARGET_MIPS) |
184 | 189 | print_insn = print_insn_big_mips; |
... | ... | @@ -355,6 +360,11 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) |
355 | 360 | #elif defined(TARGET_SPARC) |
356 | 361 | print_insn = print_insn_sparc; |
357 | 362 | #elif defined(TARGET_PPC) |
363 | +#ifdef TARGET_PPC64 | |
364 | + disasm_info.mach = bfd_mach_ppc64; | |
365 | +#else | |
366 | + disasm_info.mach = bfd_mach_ppc; | |
367 | +#endif | |
358 | 368 | print_insn = print_insn_ppc; |
359 | 369 | #elif defined(TARGET_MIPS) |
360 | 370 | print_insn = print_insn_big_mips; | ... | ... |
ppc-dis.c
... | ... | @@ -3084,8 +3084,13 @@ int print_insn_ppc (bfd_vma pc, disassemble_info *info) |
3084 | 3084 | opc = bfd_getb32(buf); |
3085 | 3085 | else |
3086 | 3086 | opc = bfd_getl32(buf); |
3087 | - return print_insn_powerpc (info, opc, pc, | |
3088 | - PPC | B32 | M601); | |
3087 | + if (info->mach == bfd_mach_ppc64) { | |
3088 | + return print_insn_powerpc (info, opc, pc, | |
3089 | + PPC | B64); | |
3090 | + } else { | |
3091 | + return print_insn_powerpc (info, opc, pc, | |
3092 | + PPC | B32 | M601); | |
3093 | + } | |
3089 | 3094 | } |
3090 | 3095 | |
3091 | 3096 | /* Print a PowerPC or POWER instruction. */ | ... | ... |