--- trunk/src/include/cpu_ppc.h 2007/10/08 16:19:37 22 +++ trunk/src/include/cpu_ppc.h 2007/10/08 16:22:56 44 @@ -2,7 +2,7 @@ #define CPU_PPC_H /* - * Copyright (C) 2005-2006 Anders Gavare. All rights reserved. + * Copyright (C) 2005-2007 Anders Gavare. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * - * $Id: cpu_ppc.h,v 1.60 2006/02/09 22:40:27 debug Exp $ + * $Id: cpu_ppc.h,v 1.72 2007/07/20 09:03:33 debug Exp $ */ #include "misc.h" @@ -65,7 +65,9 @@ #define PPC_603 4 #define PPC_NO_DEC 8 /* No DEC (decrementer) SPR */ -/* TODO: Most of these just bogus */ +/* + * TODO: Most of these just bogus + */ #define PPC_CPU_TYPE_DEFS { \ { "PPC405GP", 0x40110000, 32, PPC_NOFP|PPC_NO_DEC, \ @@ -84,6 +86,7 @@ #define PPC_NGPRS 32 #define PPC_NFPRS 32 +#define PPC_NVRS 32 #define PPC_N_TGPRS 4 #define PPC_N_IC_ARGS 3 @@ -95,7 +98,11 @@ #define PPC_ADDR_TO_PAGENR(a) ((a) >> (PPC_IC_ENTRIES_SHIFT \ + PPC_INSTR_ALIGNMENT_SHIFT)) +#define PPC_L2N 17 +#define PPC_L3N 18 + DYNTRANS_MISC_DECLARATIONS(ppc,PPC,uint64_t) +DYNTRANS_MISC64_DECLARATIONS(ppc,PPC,uint8_t) #define PPC_MAX_VPH_TLB_ENTRIES 128 @@ -117,6 +124,9 @@ uint64_t gpr[PPC_NGPRS]; /* General Purpose Registers */ uint64_t fpr[PPC_NFPRS]; /* Floating-Point Registers */ + uint64_t vr_hi[PPC_NVRS];/* 128-bit Vector registers */ + uint64_t vr_lo[PPC_NVRS];/* (Hi and lo 64-bit parts) */ + uint64_t msr; /* Machine state register */ uint64_t tgpr[PPC_N_TGPRS];/*Temporary gpr 0..3 */ @@ -133,8 +143,8 @@ */ DYNTRANS_ITC(ppc) VPH_TLBS(ppc,PPC) - VPH32(ppc,PPC,uint64_t,uint8_t) - VPH64(ppc,PPC,uint8_t) + VPH32(ppc,PPC) + VPH64(ppc,PPC) }; @@ -190,6 +200,8 @@ /* cpu_ppc.c: */ +int ppc_run_instr(struct cpu *cpu); +int ppc32_run_instr(struct cpu *cpu); void ppc_exception(struct cpu *cpu, int exception_nr); void ppc_update_translation_table(struct cpu *cpu, uint64_t vaddr_page, unsigned char *host_page, int writeflag, uint64_t paddr_page); @@ -199,12 +211,13 @@ void ppc32_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); void ppc_invalidate_code_translation(struct cpu *cpu, uint64_t, int); void ppc32_invalidate_code_translation(struct cpu *cpu, uint64_t, int); +void ppc_init_64bit_dummy_tables(struct cpu *cpu); int ppc_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr, unsigned char *data, size_t len, int writeflag, int cache_flags); int ppc_cpu_family_init(struct cpu_family *); /* memory_ppc.c: */ -int ppc_translate_address(struct cpu *cpu, uint64_t vaddr, +int ppc_translate_v2p(struct cpu *cpu, uint64_t vaddr, uint64_t *return_addr, int flags); #endif /* CPU_PPC_H */