@@ -80,12 +80,8 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
8080 }
8181
8282 let slow_write_label = block_asm. new_label ( ) ;
83- let slow_write_patch_label = block_asm. new_label ( ) ;
8483 let continue_label = block_asm. new_label ( ) ;
8584
86- block_asm. branch ( slow_write_label, Cond :: NV ) ;
87- block_asm. pad_block_half ( slow_write_label, 0 ) ;
88-
8985 let cpsr_backup_reg = block_asm. new_reg ( ) ;
9086 block_asm. mrs_cpsr ( cpsr_backup_reg) ;
9187
@@ -109,8 +105,7 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
109105 ) ;
110106
111107 block_asm. cmp ( fast_mmu_offset_reg, 0 ) ;
112- block_asm. branch ( slow_write_patch_label, Cond :: EQ ) ;
113- block_asm. pad_block_half ( slow_write_label, 0 ) ;
108+ block_asm. branch ( slow_write_label, Cond :: EQ ) ;
114109
115110 let shm_ptr = get_mem ! ( self . emu) . shm . as_ptr ( ) ;
116111
@@ -133,12 +128,8 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
133128
134129 block_asm. branch ( continue_label, Cond :: AL ) ;
135130
136- block_asm. label_unlikely ( slow_write_patch_label) ;
137- block_asm. call ( inst_slow_mem_patch :: < true > as * const ( ) ) ;
138- block_asm. msr_cpsr ( cpsr_backup_reg) ;
139- block_asm. branch ( slow_write_label, Cond :: AL ) ;
140-
141131 block_asm. label_unlikely ( slow_write_label) ;
132+ block_asm. msr_cpsr ( cpsr_backup_reg) ;
142133 block_asm. save_context ( ) ;
143134
144135 let op0_addr = get_regs ! ( self . emu, CPU ) . get_reg ( op0) as * const _ as u32 ;
@@ -266,7 +257,7 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
266257 block_asm. label_unlikely ( slow_read_patch_label) ;
267258 let cpsr_backup_reg = block_asm. new_reg ( ) ;
268259 block_asm. mrs_cpsr ( cpsr_backup_reg) ;
269- block_asm. call ( inst_slow_mem_patch :: < false > as * const ( ) ) ;
260+ block_asm. call ( inst_slow_mem_patch as * const ( ) ) ;
270261 block_asm. msr_cpsr ( cpsr_backup_reg) ;
271262 block_asm. branch ( slow_read_label, Cond :: AL ) ;
272263
@@ -377,8 +368,6 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
377368 debug_assert ! ( non_gp_regs. is_empty( ) ) ;
378369
379370 if inst_info. op . mem_is_write ( ) {
380- block_asm. branch ( slow_label, Cond :: NV ) ;
381- block_asm. pad_block_half ( slow_label, 0 ) ;
382371 block_asm. mrs_cpsr ( cpsr_backup_reg) ;
383372
384373 let mmu_ptr = get_mmu ! ( self . emu, CPU ) . get_mmu_write_tcm ( ) . as_ptr ( ) ;
@@ -395,8 +384,7 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
395384 block_asm. transfer_read ( mmu_offset_reg, mmu_ptr_reg, ( mmu_index_reg. into ( ) , ShiftType :: Lsl , BlockOperand :: from ( 2 ) ) , false , MemoryAmount :: Word ) ;
396385
397386 block_asm. cmp ( mmu_offset_reg, 0 ) ;
398- block_asm. branch ( slow_patch_label, Cond :: EQ ) ;
399- block_asm. pad_block_half ( slow_label, 0 ) ;
387+ block_asm. branch ( slow_label, Cond :: EQ ) ;
400388
401389 let shm_ptr = get_mem ! ( self . emu) . shm . as_ptr ( ) ;
402390
@@ -497,17 +485,18 @@ impl<const CPU: CpuType> JitAsm<'_, CPU> {
497485 } ;
498486
499487 if use_fast_mem {
500- block_asm. label_unlikely ( slow_patch_label) ;
501- if inst_info. op . mem_is_write ( ) {
502- block_asm. call ( inst_slow_mem_patch :: < true > as * const ( ) ) ;
503- } else {
488+ if !inst_info. op . mem_is_write ( ) {
489+ block_asm. label_unlikely ( slow_patch_label) ;
504490 block_asm. mrs_cpsr ( cpsr_backup_reg) ;
505- block_asm. call ( inst_slow_mem_patch :: < false > as * const ( ) ) ;
491+ block_asm. call ( inst_slow_mem_patch as * const ( ) ) ;
492+ block_asm. msr_cpsr ( cpsr_backup_reg) ;
493+ block_asm. branch ( slow_label, Cond :: AL ) ;
506494 }
507- block_asm. msr_cpsr ( cpsr_backup_reg) ;
508- block_asm. branch ( slow_label, Cond :: AL ) ;
509495
510496 block_asm. label_unlikely ( slow_label) ;
497+ if inst_info. op . mem_is_write ( ) {
498+ block_asm. msr_cpsr ( cpsr_backup_reg) ;
499+ }
511500 }
512501 block_asm. save_context ( ) ;
513502 block_asm. call3 (
0 commit comments