@ -32,8 +32,8 @@ static void cf_rte(CPUM68KState *env)
uint32_t fmt ;
sp = env - > aregs [ 7 ] ;
fmt = cpu_ldl_mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
env - > pc = cpu_ldl_mmuidx_ra ( env , sp + 4 , MMU_KERNEL_IDX , 0 ) ;
fmt = cpu_ldl_be_ mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
env - > pc = cpu_ldl_be_ mmuidx_ra ( env , sp + 4 , MMU_KERNEL_IDX , 0 ) ;
sp | = ( fmt > > 28 ) & 3 ;
env - > aregs [ 7 ] = sp + 8 ;
@ -48,13 +48,13 @@ static void m68k_rte(CPUM68KState *env)
sp = env - > aregs [ 7 ] ;
throwaway :
sr = cpu_lduw_mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
sr = cpu_lduw_be_ mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
sp + = 2 ;
env - > pc = cpu_ldl_mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
env - > pc = cpu_ldl_be_ mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
sp + = 4 ;
if ( m68k_feature ( env , M68K_FEATURE_EXCEPTION_FORMAT_VEC ) ) {
/* all except 68000 */
fmt = cpu_lduw_mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
fmt = cpu_lduw_be_ mmuidx_ra ( env , sp , MMU_KERNEL_IDX , 0 ) ;
sp + = 2 ;
switch ( fmt > > 12 ) {
case 0 :
@ -250,12 +250,12 @@ static void cf_interrupt_all(CPUM68KState *env, int is_hw)
/* ??? This could cause MMU faults. */
sp & = ~ 3 ;
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , retaddr , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , retaddr , MMU_KERNEL_IDX , 0 ) ;
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , fmt , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , fmt , MMU_KERNEL_IDX , 0 ) ;
env - > aregs [ 7 ] = sp ;
/* Jump to vector. */
env - > pc = cpu_ldl_mmuidx_ra ( env , env - > vbr + vector , MMU_KERNEL_IDX , 0 ) ;
env - > pc = cpu_ldl_be_ mmuidx_ra ( env , env - > vbr + vector , MMU_KERNEL_IDX , 0 ) ;
do_plugin_vcpu_interrupt_cb ( cs , retaddr ) ;
}
@ -270,24 +270,25 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
switch ( format ) {
case 4 :
* sp - = 4 ;
cpu_stl_mmuidx_ra ( env , * sp , env - > pc , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , * sp , env - > pc , MMU_KERNEL_IDX , 0 ) ;
* sp - = 4 ;
cpu_stl_mmuidx_ra ( env , * sp , addr , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , * sp , addr , MMU_KERNEL_IDX , 0 ) ;
break ;
case 3 :
case 2 :
* sp - = 4 ;
cpu_stl_mmuidx_ra ( env , * sp , addr , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , * sp , addr , MMU_KERNEL_IDX , 0 ) ;
break ;
}
* sp - = 2 ;
cpu_stw_mmuidx_ra ( env , * sp , ( format < < 12 ) + ( cs - > exception_index < < 2 ) ,
MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_mmuidx_ra ( env , * sp ,
( format < < 12 ) + ( cs - > exception_index < < 2 ) ,
MMU_KERNEL_IDX , 0 ) ;
}
* sp - = 4 ;
cpu_stl_mmuidx_ra ( env , * sp , retaddr , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , * sp , retaddr , MMU_KERNEL_IDX , 0 ) ;
* sp - = 2 ;
cpu_stw_mmuidx_ra ( env , * sp , sr , MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_ mmuidx_ra ( env , * sp , sr , MMU_KERNEL_IDX , 0 ) ;
}
static void m68k_interrupt_all ( CPUM68KState * env , int is_hw )
@ -346,49 +347,49 @@ static void m68k_interrupt_all(CPUM68KState *env, int is_hw)
env - > mmu . fault = true ;
/* push data 3 */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* push data 2 */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* push data 1 */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 1 / push data 0 */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 1 address */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 2 data */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 2 address */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 3 data */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 3 address */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
/* fault address */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
/* write back 1 status */
sp - = 2 ;
cpu_stw_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 2 status */
sp - = 2 ;
cpu_stw_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* write back 3 status */
sp - = 2 ;
cpu_stw_mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_ mmuidx_ra ( env , sp , 0 , MMU_KERNEL_IDX , 0 ) ;
/* special status word */
sp - = 2 ;
cpu_stw_mmuidx_ra ( env , sp , env - > mmu . ssw , MMU_KERNEL_IDX , 0 ) ;
cpu_stw_be_ mmuidx_ra ( env , sp , env - > mmu . ssw , MMU_KERNEL_IDX , 0 ) ;
/* effective address */
sp - = 4 ;
cpu_stl_mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
cpu_stl_be_ mmuidx_ra ( env , sp , env - > mmu . ar , MMU_KERNEL_IDX , 0 ) ;
do_stack_frame ( env , & sp , 7 , oldsr , 0 , env - > pc ) ;
env - > mmu . fault = false ;
@ -436,7 +437,7 @@ static void m68k_interrupt_all(CPUM68KState *env, int is_hw)
env - > aregs [ 7 ] = sp ;
/* Jump to vector. */
env - > pc = cpu_ldl_mmuidx_ra ( env , env - > vbr + vector , MMU_KERNEL_IDX , 0 ) ;
env - > pc = cpu_ldl_be_ mmuidx_ra ( env , env - > vbr + vector , MMU_KERNEL_IDX , 0 ) ;
do_plugin_vcpu_interrupt_cb ( cs , last_pc ) ;
}
@ -784,11 +785,11 @@ void HELPER(cas2w)(CPUM68KState *env, uint32_t regs, uint32_t a1, uint32_t a2)
int16_t l1 , l2 ;
uintptr_t ra = GETPC ( ) ;
l1 = cpu_lduw_data_ra ( env , a1 , ra ) ;
l2 = cpu_lduw_data_ra ( env , a2 , ra ) ;
l1 = cpu_lduw_be_ data_ra ( env , a1 , ra ) ;
l2 = cpu_lduw_be_ data_ra ( env , a2 , ra ) ;
if ( l1 = = c1 & & l2 = = c2 ) {
cpu_stw_data_ra ( env , a1 , u1 , ra ) ;
cpu_stw_data_ra ( env , a2 , u2 , ra ) ;
cpu_stw_be_ data_ra ( env , a1 , u1 , ra ) ;
cpu_stw_be_ data_ra ( env , a2 , u2 , ra ) ;
}
if ( c1 ! = l1 ) {
@ -840,11 +841,11 @@ static void do_cas2l(CPUM68KState *env, uint32_t regs, uint32_t a1, uint32_t a2,
}
} else {
/* We're executing in a serial context -- no need to be atomic. */
l1 = cpu_ldl_data_ra ( env , a1 , ra ) ;
l2 = cpu_ldl_data_ra ( env , a2 , ra ) ;
l1 = cpu_ldl_be_ data_ra ( env , a1 , ra ) ;
l2 = cpu_ldl_be_ data_ra ( env , a2 , ra ) ;
if ( l1 = = c1 & & l2 = = c2 ) {
cpu_stl_data_ra ( env , a1 , u1 , ra ) ;
cpu_stl_data_ra ( env , a2 , u2 , ra ) ;
cpu_stl_be_ data_ra ( env , a1 , u1 , ra ) ;
cpu_stl_be_ data_ra ( env , a2 , u2 , ra ) ;
}
}
@ -946,12 +947,12 @@ static uint64_t bf_load(CPUM68KState *env, uint32_t addr, int blen,
case 0 :
return cpu_ldub_data_ra ( env , addr , ra ) ;
case 1 :
return cpu_lduw_data_ra ( env , addr , ra ) ;
return cpu_lduw_be_ data_ra ( env , addr , ra ) ;
case 2 :
case 3 :
return cpu_ldl_data_ra ( env , addr , ra ) ;
return cpu_ldl_be_ data_ra ( env , addr , ra ) ;
case 4 :
return cpu_ldq_data_ra ( env , addr , ra ) ;
return cpu_ldq_be_ data_ra ( env , addr , ra ) ;
default :
g_assert_not_reached ( ) ;
}
@ -965,14 +966,14 @@ static void bf_store(CPUM68KState *env, uint32_t addr, int blen,
cpu_stb_data_ra ( env , addr , data , ra ) ;
break ;
case 1 :
cpu_stw_data_ra ( env , addr , data , ra ) ;
cpu_stw_be_ data_ra ( env , addr , data , ra ) ;
break ;
case 2 :
case 3 :
cpu_stl_data_ra ( env , addr , data , ra ) ;
cpu_stl_be_ data_ra ( env , addr , data , ra ) ;
break ;
case 4 :
cpu_stq_data_ra ( env , addr , data , ra ) ;
cpu_stq_be_ data_ra ( env , addr , data , ra ) ;
break ;
default :
g_assert_not_reached ( ) ;