--- trunk/src/memory_rw.c 2007/10/08 16:18:38 12 +++ trunk/src/memory_rw.c 2007/10/08 16:18:51 14 @@ -25,7 +25,7 @@ * SUCH DAMAGE. * * - * $Id: memory_rw.c,v 1.57 2005/08/12 21:57:02 debug Exp $ + * $Id: memory_rw.c,v 1.64 2005/09/22 09:06:59 debug Exp $ * * Generic memory_rw(), with special hacks for specific CPU families. * @@ -188,24 +188,23 @@ paddr = vaddr; #ifdef MEM_ALPHA - /* paddr &= 0x1fffffff; For testalpha */ - paddr &= 0x000003ffffffffffULL; -#endif - -#ifdef MEM_ARM - paddr &= 0x3fffffff; + /* paddr &= 0x1fffffff; For testalpha */ + paddr &= 0x000003ffffffffffULL; #endif #ifdef MEM_IA64 - /* For testia64 */ - paddr &= 0x3fffffff; + /* For testia64 */ + paddr &= 0x3fffffff; #endif #ifdef MEM_PPC - if (cpu->cd.ppc.bits == 32) - paddr &= 0xffffffff; + if (cpu->cd.ppc.bits == 32) + paddr &= 0xffffffff; #endif +#ifdef MEM_SH + paddr &= 0xffffffff; +#endif } else { ok = cpu->translate_address(cpu, vaddr, &paddr, (writeflag? FLAG_WRITEFLAG : 0) + @@ -213,6 +212,9 @@ #ifdef MEM_X86 + (cache_flags & NO_SEGMENTATION) #endif +#ifdef MEM_ARM + + (cache_flags & MEMORY_USER_ACCESS) +#endif + (cache==CACHE_INSTRUCTION? FLAG_INSTR : 0)); /* If the translation caused an exception, or was invalid in some way, we simply return without doing the memory @@ -570,6 +572,10 @@ #endif paddr & ~offset_mask); + if (writeflag == MEM_WRITE && + cpu->invalidate_code_translation != NULL) + cpu->invalidate_code_translation(cpu, paddr, INVALIDATE_PADDR); + if (writeflag == MEM_WRITE) { /* Ugly optimization, but it works: */ if (len == sizeof(uint32_t) && (offset & 3)==0