1.1 --- a/src/sh4/mmu.c Tue Jan 15 20:50:23 2008 +0000
1.2 +++ b/src/sh4/mmu.c Tue Jan 22 11:29:43 2008 +0000
1.8 + * Translate address for disassembly purposes (ie performs an instruction
1.9 + * lookup) - does not raise exceptions or modify any state, and ignores
1.10 + * protection bits. Returns the translated address, or MMU_VMA_ERROR
1.11 + * on translation failure.
1.13 +sh4addr_t mmu_vma_to_phys_disasm( sh4vma_t vma )
1.15 + if( vma & 0x80000000 ) {
1.16 + if( vma < 0xC0000000 ) {
1.17 + /* P1, P2 and P4 regions are pass-through (no translation) */
1.18 + return VMA_TO_EXT_ADDR(vma);
1.19 + } else if( vma >= 0xE0000000 && vma < 0xFFFFFF00 ) {
1.20 + /* Not translatable */
1.21 + return MMU_VMA_ERROR;
1.25 + uint32_t mmucr = MMIO_READ(MMU,MMUCR);
1.26 + if( (mmucr & MMUCR_AT) == 0 ) {
1.27 + return VMA_TO_EXT_ADDR(vma);
1.30 + int entryNo = mmu_itlb_lookup_vpn( vma );
1.31 + if( entryNo == -2 ) {
1.32 + entryNo = mmu_itlb_lookup_vpn_asid( vma );
1.34 + if( entryNo < 0 ) {
1.35 + return MMU_VMA_ERROR;
1.37 + return (mmu_itlb[entryNo].ppn & mmu_itlb[entryNo].mask) |
1.38 + (vma & (~mmu_itlb[entryNo].mask));
1.42 gboolean sh4_flush_store_queue( sh4addr_t addr )
1.44 uint32_t mmucr = MMIO_READ(MMU,MMUCR);