drc: handle regs-not-in-psxRegs case better
[pcsx_rearmed.git] / libpcsxcore / new_dynarec / linkage_arm64.S
index 5c4d127..72d13f3 100644 (file)
@@ -84,36 +84,13 @@ DRC_VAR(mini_ht, 256)
        .text
        .align  2
 
-/* r0 = virtual target address */
-/* r1 = instruction to patch */
-.macro dyna_linker_main
-       /* XXX TODO: should be able to do better than this... */
-       bl      get_addr_ht
-       br      x0
-.endm
-
-
 FUNCTION(dyna_linker):
        /* r0 = virtual target address */
        /* r1 = instruction to patch */
-       dyna_linker_main
+       bl      ndrc_get_addr_ht
+       br      x0
        .size   dyna_linker, .-dyna_linker
 
-FUNCTION(exec_pagefault):
-       /* r0 = instruction pointer */
-       /* r1 = fault address */
-       /* r2 = cause */
-       bl      abort
-       .size   exec_pagefault, .-exec_pagefault
-
-/* Special dynamic linker for the case where a page fault
-   may occur in a branch delay slot */
-FUNCTION(dyna_linker_ds):
-       /* r0 = virtual target address */
-       /* r1 = instruction to patch */
-       dyna_linker_main
-       .size   dyna_linker_ds, .-dyna_linker_ds
-
        .align  2
 FUNCTION(cc_interrupt):
        ldr     w0, [rFP, #LO_last_count]
@@ -123,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]
@@ -136,7 +114,7 @@ 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
 
@@ -152,7 +130,7 @@ FUNCTION(fp_exception):
        str     w1, [rFP, #LO_reg_cop0+48] /* Status */
        str     w2, [rFP, #LO_reg_cop0+52] /* Cause */
        add     w0, w3, #0x80
-       bl      get_addr_ht
+       bl      ndrc_get_addr_ht
        br      x0
        .size   fp_exception, .-fp_exception
        .align  2
@@ -182,7 +160,8 @@ 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,
@@ -193,7 +172,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
 
@@ -212,7 +191,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