@ -87,7 +87,8 @@ DATA_TYPE REGPARM glue(glue(__ld, SUFFIX), MMUSUFFIX)(target_ulong addr,
DATA_TYPE res ;
int index ;
target_ulong tlb_addr ;
target_phys_addr_t addend ;
target_phys_addr_t ioaddr ;
unsigned long addend ;
void * retaddr ;
/* test if there is match for unaligned or IO access */
@ -101,8 +102,8 @@ DATA_TYPE REGPARM glue(glue(__ld, SUFFIX), MMUSUFFIX)(target_ulong addr,
if ( ( addr & ( DATA_SIZE - 1 ) ) ! = 0 )
goto do_unaligned_access ;
retaddr = GETPC ( ) ;
addend = env - > iotlb [ mmu_idx ] [ index ] ;
res = glue ( io_read , SUFFIX ) ( addend , addr , retaddr ) ;
ioaddr = env - > iotlb [ mmu_idx ] [ index ] ;
res = glue ( io_read , SUFFIX ) ( ioaddr , addr , retaddr ) ;
} else if ( ( ( addr & ~ TARGET_PAGE_MASK ) + DATA_SIZE - 1 ) > = TARGET_PAGE_SIZE ) {
/* slow unaligned access (it spans two pages or IO) */
do_unaligned_access :
@ -143,7 +144,8 @@ static DATA_TYPE glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(target_ulong addr,
{
DATA_TYPE res , res1 , res2 ;
int index , shift ;
target_phys_addr_t addend ;
target_phys_addr_t ioaddr ;
unsigned long addend ;
target_ulong tlb_addr , addr1 , addr2 ;
index = ( addr > > TARGET_PAGE_BITS ) & ( CPU_TLB_SIZE - 1 ) ;
@ -154,8 +156,8 @@ static DATA_TYPE glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(target_ulong addr,
/* IO access */
if ( ( addr & ( DATA_SIZE - 1 ) ) ! = 0 )
goto do_unaligned_access ;
addend = env - > iotlb [ mmu_idx ] [ index ] ;
res = glue ( io_read , SUFFIX ) ( addend , addr , retaddr ) ;
ioaddr = env - > iotlb [ mmu_idx ] [ index ] ;
res = glue ( io_read , SUFFIX ) ( ioaddr , addr , retaddr ) ;
} else if ( ( ( addr & ~ TARGET_PAGE_MASK ) + DATA_SIZE - 1 ) > = TARGET_PAGE_SIZE ) {
do_unaligned_access :
/* slow unaligned access (it spans two pages) */
@ -224,7 +226,8 @@ void REGPARM glue(glue(__st, SUFFIX), MMUSUFFIX)(target_ulong addr,
DATA_TYPE val ,
int mmu_idx )
{
target_phys_addr_t addend ;
target_phys_addr_t ioaddr ;
unsigned long addend ;
target_ulong tlb_addr ;
void * retaddr ;
int index ;
@ -238,8 +241,8 @@ void REGPARM glue(glue(__st, SUFFIX), MMUSUFFIX)(target_ulong addr,
if ( ( addr & ( DATA_SIZE - 1 ) ) ! = 0 )
goto do_unaligned_access ;
retaddr = GETPC ( ) ;
addend = env - > iotlb [ mmu_idx ] [ index ] ;
glue ( io_write , SUFFIX ) ( addend , val , addr , retaddr ) ;
ioaddr = env - > iotlb [ mmu_idx ] [ index ] ;
glue ( io_write , SUFFIX ) ( ioaddr , val , addr , retaddr ) ;
} else if ( ( ( addr & ~ TARGET_PAGE_MASK ) + DATA_SIZE - 1 ) > = TARGET_PAGE_SIZE ) {
do_unaligned_access :
retaddr = GETPC ( ) ;
@ -277,7 +280,8 @@ static void glue(glue(slow_st, SUFFIX), MMUSUFFIX)(target_ulong addr,
int mmu_idx ,
void * retaddr )
{
target_phys_addr_t addend ;
target_phys_addr_t ioaddr ;
unsigned long addend ;
target_ulong tlb_addr ;
int index , i ;
@ -289,8 +293,8 @@ static void glue(glue(slow_st, SUFFIX), MMUSUFFIX)(target_ulong addr,
/* IO access */
if ( ( addr & ( DATA_SIZE - 1 ) ) ! = 0 )
goto do_unaligned_access ;
addend = env - > iotlb [ mmu_idx ] [ index ] ;
glue ( io_write , SUFFIX ) ( addend , val , addr , retaddr ) ;
ioaddr = env - > iotlb [ mmu_idx ] [ index ] ;
glue ( io_write , SUFFIX ) ( ioaddr , val , addr , retaddr ) ;
} else if ( ( ( addr & ~ TARGET_PAGE_MASK ) + DATA_SIZE - 1 ) > = TARGET_PAGE_SIZE ) {
do_unaligned_access :
/* XXX: not efficient, but simple */