--- trunk/src/include/cpu_sh.h 2007/10/08 16:18:51 14 +++ trunk/src/include/cpu_sh.h 2007/10/08 16:19:23 20 @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * - * $Id: cpu_sh.h,v 1.4 2005/09/04 13:06:11 debug Exp $ + * $Id: cpu_sh.h,v 1.10 2005/11/16 21:15:19 debug Exp $ */ #include "misc.h" @@ -53,22 +53,22 @@ /* Translation cache struct for each physical page: */ struct sh_tc_physpage { + struct sh_instr_call ics[SH_IC_ENTRIES_PER_PAGE + 1]; uint32_t next_ofs; /* or 0 for end of chain */ - uint64_t physaddr; int flags; - struct sh_instr_call ics[SH_IC_ENTRIES_PER_PAGE + 1]; + uint64_t physaddr; }; #define SH_N_VPH_ENTRIES 1048576 #define SH_MAX_VPH_TLB_ENTRIES 256 struct sh_vpg_tlb_entry { - int valid; - int writeflag; + uint8_t valid; + uint8_t writeflag; int64_t timestamp; - unsigned char *host_page; uint64_t vaddr_page; uint64_t paddr_page; + unsigned char *host_page; }; struct sh_cpu { @@ -89,6 +89,8 @@ struct sh_instr_call *cur_ic_page; struct sh_instr_call *next_ic; + void (*combination_check)(struct cpu *, + struct sh_instr_call *, int low_addr); /* * Virtual -> physical -> host address translation: @@ -99,21 +101,24 @@ */ struct sh_vpg_tlb_entry vph_tlb_entry[SH_MAX_VPH_TLB_ENTRIES]; - unsigned char *host_load[SH_N_VPH_ENTRIES]; - unsigned char *host_store[SH_N_VPH_ENTRIES]; - uint32_t phys_addr[SH_N_VPH_ENTRIES]; + unsigned char *host_load[SH_N_VPH_ENTRIES]; + unsigned char *host_store[SH_N_VPH_ENTRIES]; + uint32_t phys_addr[SH_N_VPH_ENTRIES]; struct sh_tc_physpage *phys_page[SH_N_VPH_ENTRIES]; + + uint32_t phystranslation[SH_N_VPH_ENTRIES/32]; + uint8_t vaddr_to_tlbindex[SH_N_VPH_ENTRIES]; }; /* cpu_sh.c: */ void sh_update_translation_table(struct cpu *cpu, uint64_t vaddr_page, unsigned char *host_page, int writeflag, uint64_t paddr_page); -void sh_invalidate_translation_caches_paddr(struct cpu *cpu, uint64_t, int); +void sh_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); void sh_invalidate_code_translation(struct cpu *cpu, uint64_t, int); void sh32_update_translation_table(struct cpu *cpu, uint64_t vaddr_page, unsigned char *host_page, int writeflag, uint64_t paddr_page); -void sh32_invalidate_translation_caches_paddr(struct cpu *cpu, uint64_t, int); +void sh32_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); void sh32_invalidate_code_translation(struct cpu *cpu, uint64_t, int); int sh_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr, unsigned char *data, size_t len, int writeflag, int cache_flags);