drc: update according to interpreter (2)
[pcsx_rearmed.git] / libpcsxcore / new_dynarec / linkage_arm64.S
index 33fc048..8d11fcf 100644 (file)
@@ -87,7 +87,7 @@ DRC_VAR(mini_ht, 256)
 FUNCTION(dyna_linker):
        /* r0 = virtual target address */
        /* r1 = instruction to patch */
-       bl      get_addr_ht
+       bl      ndrc_get_addr_ht
        br      x0
        .size   dyna_linker, .-dyna_linker
 
@@ -100,6 +100,7 @@ FUNCTION(cc_interrupt):
 #      str     rCC, [rFP, #LO_reg_cop0+36]     /* Count */
        mov     x21, lr
 1:
+       add     x0, rFP, #(LO_psxRegs + 34*4)   /* CP0 */
        bl      gen_interupt
        mov     lr, x21
        ldr     rCC, [rFP, #LO_cycle]
@@ -113,53 +114,49 @@ FUNCTION(cc_interrupt):
        ret
 2:
        ldr     w0, [rFP, #LO_pcaddr]
-       bl      get_addr_ht
+       bl      ndrc_get_addr_ht
        br      x0
        .size   cc_interrupt, .-cc_interrupt
 
        .align  2
-FUNCTION(fp_exception):
-       mov     w2, #0x10000000
-0:
-       ldr     w1, [rFP, #LO_reg_cop0+48] /* Status */
-       mov     w3, #0x80000000
-       str     w0, [rFP, #LO_reg_cop0+56] /* EPC */
-       orr     w1, w1, #2
-       add     w2, w2, #0x2c
-       str     w1, [rFP, #LO_reg_cop0+48] /* Status */
-       str     w2, [rFP, #LO_reg_cop0+52] /* Cause */
-       add     w0, w3, #0x80
-       bl      get_addr_ht
-       br      x0
-       .size   fp_exception, .-fp_exception
-       .align  2
-FUNCTION(fp_exception_ds):
-       mov     w2, #0x90000000 /* Set high bit if delay slot */
-       b       0b
-       .size   fp_exception_ds, .-fp_exception_ds
-
-       .align  2
+FUNCTION(jump_addrerror_ds): /* R3000E_AdEL / R3000E_AdES in w0 */
+       str     w1, [rFP, #(LO_psxRegs + (34+8)*4)]  /* BadVaddr */
+       mov     w1, #1
+       b       call_psxException
+FUNCTION(jump_addrerror):
+       str     w1, [rFP, #(LO_psxRegs + (34+8)*4)]  /* BadVaddr */
+       mov     w1, #0
+       b       call_psxException
+FUNCTION(jump_overflow_ds):
+       mov     w0, #(12<<2)  /* R3000E_Ov */
+       mov     w1, #1
+       b       call_psxException
+FUNCTION(jump_overflow):
+       mov     w0, #(12<<2)
+       mov     w1, #0
+       b       call_psxException
 FUNCTION(jump_break_ds):
-       mov     w0, #0x24
+       mov     w0, #(9<<2)  /* R3000E_Bp */
        mov     w1, #1
        b       call_psxException
 FUNCTION(jump_break):
-       mov     w0, #0x24
+       mov     w0, #(9<<2)
        mov     w1, #0
        b       call_psxException
 FUNCTION(jump_syscall_ds):
-       mov     w0, #0x20
-       mov     w1, #1
+       mov     w0, #(8<<2)  /* R3000E_Syscall */
+       mov     w1, #2
        b       call_psxException
 FUNCTION(jump_syscall):
-       mov     w0, #0x20
+       mov     w0, #(8<<2)
        mov     w1, #0
 
 call_psxException:
        ldr     w3, [rFP, #LO_last_count]
        str     w2, [rFP, #LO_pcaddr]
        add     rCC, w3, rCC
-       str     rCC, [rFP, #LO_cycle]           /* PCSX cycles */
+       str     rCC, [rFP, #LO_cycle]           /* PCSX cycles */
+       add     x2, rFP, #(LO_psxRegs + 34*4)   /* CP0 */
        bl      psxException
 
        /* note: psxException might do recursive recompiler call from it's HLE code,
@@ -170,7 +167,7 @@ FUNCTION(jump_to_new_pc):
        ldr     w0, [rFP, #LO_pcaddr]
        sub     rCC, rCC, w1
        str     w1, [rFP, #LO_last_count]
-       bl      get_addr_ht
+       bl      ndrc_get_addr_ht
        br      x0
        .size   jump_to_new_pc, .-jump_to_new_pc
 
@@ -189,7 +186,7 @@ FUNCTION(new_dyna_start):
        ldr     w0,  [rFP, #LO_pcaddr]
        str     w1,  [rFP, #LO_last_count]
        sub     rCC, w2, w1
-       bl      get_addr_ht
+       bl      ndrc_get_addr_ht
        br      x0
        .size   new_dyna_start, .-new_dyna_start