1.1 --- a/src/sh4/mmu.c Fri Dec 16 10:08:45 2011 +1000
1.2 +++ b/src/sh4/mmu.c Fri Dec 23 08:20:17 2011 +1000
1.7 -#define RAISE_TLB_ERROR(code, vpn) sh4_raise_tlb_exception(code, vpn)
1.8 -#define RAISE_MEM_ERROR(code, vpn) \
1.9 - MMIO_WRITE(MMU, TEA, vpn); \
1.10 - MMIO_WRITE(MMU, PTEH, ((MMIO_READ(MMU, PTEH) & 0x000003FF) | (vpn&0xFFFFFC00))); \
1.11 - sh4_raise_exception(code);
1.12 -#define RAISE_TLB_MULTIHIT_ERROR(vpn) sh4_raise_tlb_multihit(vpn)
1.14 /* An entry is a 1K entry if it's one of the mmu_utlb_1k_pages entries */
1.15 #define IS_1K_PAGE_ENTRY(ent) ( ((uintptr_t)(((struct utlb_1k_entry *)ent) - &mmu_utlb_1k_pages[0])) < UTLB_ENTRY_COUNT )
1.17 @@ -1198,13 +1191,6 @@
1.20 /********************** TLB Direct-Access Regions ***************************/
1.21 -#ifdef HAVE_FRAME_ADDRESS
1.22 -#define EXCEPTION_EXIT() do{ *(((void * volatile *)__builtin_frame_address(0))+1) = exc; } while(0)
1.24 -#define EXCEPTION_EXIT() sh4_core_exit(CORE_EXIT_EXCEPTION)
1.28 #define ITLB_ENTRY(addr) ((addr>>7)&0x03)
1.30 int32_t FASTCALL mmu_itlb_addr_read( sh4addr_t addr )
1.31 @@ -1326,7 +1312,7 @@
1.33 if( itlb == -2 || utlb == -2 ) {
1.34 RAISE_TLB_MULTIHIT_ERROR(addr); /* FIXME: should this only be raised if TLB is enabled? */
1.36 + SH4_EXCEPTION_EXIT();
1.40 @@ -1389,60 +1375,60 @@
1.41 static void FASTCALL address_error_read( sh4addr_t addr, void *exc )
1.43 RAISE_MEM_ERROR(EXC_DATA_ADDR_READ, addr);
1.45 + SH4_EXCEPTION_EXIT();
1.48 static void FASTCALL address_error_read_for_write( sh4addr_t addr, void *exc )
1.50 RAISE_MEM_ERROR(EXC_DATA_ADDR_WRITE, addr);
1.52 + SH4_EXCEPTION_EXIT();
1.55 static void FASTCALL address_error_read_burst( unsigned char *dest, sh4addr_t addr, void *exc )
1.57 RAISE_MEM_ERROR(EXC_DATA_ADDR_READ, addr);
1.59 + SH4_EXCEPTION_EXIT();
1.62 static void FASTCALL address_error_write( sh4addr_t addr, uint32_t val, void *exc )
1.64 RAISE_MEM_ERROR(EXC_DATA_ADDR_WRITE, addr);
1.66 + SH4_EXCEPTION_EXIT();
1.69 static void FASTCALL tlb_miss_read( sh4addr_t addr, void *exc )
1.72 RAISE_TLB_ERROR(EXC_TLB_MISS_READ, addr);
1.74 + SH4_EXCEPTION_EXIT();
1.77 static void FASTCALL tlb_miss_read_for_write( sh4addr_t addr, void *exc )
1.80 RAISE_TLB_ERROR(EXC_TLB_MISS_WRITE, addr);
1.82 + SH4_EXCEPTION_EXIT();
1.85 static void FASTCALL tlb_miss_read_burst( unsigned char *dest, sh4addr_t addr, void *exc )
1.88 RAISE_TLB_ERROR(EXC_TLB_MISS_READ, addr);
1.90 + SH4_EXCEPTION_EXIT();
1.93 static void FASTCALL tlb_miss_write( sh4addr_t addr, uint32_t val, void *exc )
1.96 RAISE_TLB_ERROR(EXC_TLB_MISS_WRITE, addr);
1.98 + SH4_EXCEPTION_EXIT();
1.101 static int32_t FASTCALL tlb_protected_read( sh4addr_t addr, void *exc )
1.104 RAISE_MEM_ERROR(EXC_TLB_PROT_READ, addr);
1.105 - EXCEPTION_EXIT();
1.106 + SH4_EXCEPTION_EXIT();
1.110 @@ -1450,7 +1436,7 @@
1.113 RAISE_MEM_ERROR(EXC_TLB_PROT_WRITE, addr);
1.114 - EXCEPTION_EXIT();
1.115 + SH4_EXCEPTION_EXIT();
1.119 @@ -1458,7 +1444,7 @@
1.122 RAISE_MEM_ERROR(EXC_TLB_PROT_READ, addr);
1.123 - EXCEPTION_EXIT();
1.124 + SH4_EXCEPTION_EXIT();
1.128 @@ -1466,41 +1452,41 @@
1.131 RAISE_MEM_ERROR(EXC_TLB_PROT_WRITE, addr);
1.132 - EXCEPTION_EXIT();
1.133 + SH4_EXCEPTION_EXIT();
1.136 static void FASTCALL tlb_initial_write( sh4addr_t addr, uint32_t val, void *exc )
1.139 RAISE_MEM_ERROR(EXC_INIT_PAGE_WRITE, addr);
1.140 - EXCEPTION_EXIT();
1.141 + SH4_EXCEPTION_EXIT();
1.144 static int32_t FASTCALL tlb_initial_read_for_write( sh4addr_t addr, void *exc )
1.147 RAISE_MEM_ERROR(EXC_INIT_PAGE_WRITE, addr);
1.148 - EXCEPTION_EXIT();
1.149 + SH4_EXCEPTION_EXIT();
1.153 static int32_t FASTCALL tlb_multi_hit_read( sh4addr_t addr, void *exc )
1.155 sh4_raise_tlb_multihit(addr);
1.156 - EXCEPTION_EXIT();
1.157 + SH4_EXCEPTION_EXIT();
1.161 static int32_t FASTCALL tlb_multi_hit_read_burst( unsigned char *dest, sh4addr_t addr, void *exc )
1.163 sh4_raise_tlb_multihit(addr);
1.164 - EXCEPTION_EXIT();
1.165 + SH4_EXCEPTION_EXIT();
1.168 static void FASTCALL tlb_multi_hit_write( sh4addr_t addr, uint32_t val, void *exc )
1.170 sh4_raise_tlb_multihit(addr);
1.171 - EXCEPTION_EXIT();
1.172 + SH4_EXCEPTION_EXIT();