X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Flinkage_arm64.S;h=501a4fe7729bd3b1df6191675300c35bc19d3651;hb=f9e9616e4ccc5de395bb548e95785565a42eed14;hp=38c78dc362b0bc6ad4bb305a102d61f2f3ef39f7;hpb=a5cd72d0e598f037fd9d9f23948af5b2fb06e2eb;p=pcsx_rearmed.git diff --git a/libpcsxcore/new_dynarec/linkage_arm64.S b/libpcsxcore/new_dynarec/linkage_arm64.S index 38c78dc3..501a4fe7 100644 --- a/libpcsxcore/new_dynarec/linkage_arm64.S +++ b/libpcsxcore/new_dynarec/linkage_arm64.S @@ -97,10 +97,9 @@ FUNCTION(cc_interrupt): add rCC, w0, rCC str wzr, [rFP, #LO_pending_exception] str rCC, [rFP, #LO_cycle] /* PCSX cycles */ -# str rCC, [rFP, #LO_reg_cop0+36] /* Count */ mov x21, lr 1: - add x0, rFP, #(LO_psxRegs + 34*4) /* CP0 */ + add x0, rFP, #LO_reg_cop0 /* CP0 */ bl gen_interupt mov lr, x21 ldr rCC, [rFP, #LO_cycle] @@ -119,6 +118,14 @@ FUNCTION(cc_interrupt): .size cc_interrupt, .-cc_interrupt .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 @@ -148,7 +155,7 @@ call_psxException: str w2, [rFP, #LO_pcaddr] add rCC, w3, rCC str rCC, [rFP, #LO_cycle] /* PCSX cycles */ - add x2, rFP, #(LO_psxRegs + 34*4) /* CP0 */ + add x2, rFP, #LO_reg_cop0 /* CP0 */ bl psxException /* note: psxException might do recursive recompiler call from it's HLE code, @@ -294,7 +301,7 @@ FUNCTION(jump_handle_swl): orr w4, wzr, w0, lsr #12 ldr x3, [x3, w4, uxtw #3] adds x3, x3, x3 - bcs 4f + bcs jump_handle_swx_interp add x3, x0, x3 mov w0, w2 tbz x3, #1, 10f // & 2 @@ -318,10 +325,6 @@ FUNCTION(jump_handle_swl): lsr w2, w1, #24 strb w2, [x3] ret -4: - mov w0, w2 // todo - bl abort - ret FUNCTION(jump_handle_swr): /* w0 = address, w1 = data, w2 = cycles */ @@ -329,7 +332,7 @@ FUNCTION(jump_handle_swr): orr w4, wzr, w0, lsr #12 ldr x3, [x3, w4, uxtw #3] adds x3, x3, x3 - bcs 4f + bcs jump_handle_swx_interp add x3, x0, x3 mov w0, w2 tbz x3, #1, 10f // & 2 @@ -350,10 +353,14 @@ FUNCTION(jump_handle_swr): 0: str w1, [x3] ret -4: - mov w0, w2 // todo - bl abort - ret + +jump_handle_swx_interp: /* almost never happens */ + ldr w3, [rFP, #LO_last_count] + add x0, rFP, #LO_psxRegs + add w2, w3, w2 + str w2, [rFP, #LO_cycle] /* PCSX cycles */ + bl execI + b jump_to_new_pc FUNCTION(call_gteStall): /* w0 = op_cycles, w1 = cycles */ @@ -367,3 +374,27 @@ FUNCTION(call_gteStall): add rCC, rCC, w0 ret +#ifdef DRC_DBG +#undef do_insn_cmp +FUNCTION(do_insn_cmp_arm64): + stp x2, x3, [sp, #(SSP_CALLEE_REGS + 2*8)] + stp x4, x5, [sp, #(SSP_CALLEE_REGS + 4*8)] + stp x6, x7, [sp, #(SSP_CALLEE_REGS + 6*8)] + stp x8, x9, [sp, #(SSP_CALLEE_REGS + 8*8)] + stp x10, x11, [sp, #(SSP_CALLEE_REGS + 10*8)] + stp x12, x13, [sp, #(SSP_CALLEE_REGS + 12*8)] + stp x14, x15, [sp, #(SSP_CALLEE_REGS + 14*8)] + stp x16, x17, [sp, #(SSP_CALLEE_REGS + 16*8)] + stp x18, x30, [sp, #(SSP_CALLEE_REGS + 18*8)] + bl do_insn_cmp + ldp x2, x3, [sp, #(SSP_CALLEE_REGS + 2*8)] + ldp x4, x5, [sp, #(SSP_CALLEE_REGS + 4*8)] + ldp x6, x7, [sp, #(SSP_CALLEE_REGS + 6*8)] + ldp x8, x9, [sp, #(SSP_CALLEE_REGS + 8*8)] + ldp x10, x11, [sp, #(SSP_CALLEE_REGS + 10*8)] + ldp x12, x13, [sp, #(SSP_CALLEE_REGS + 12*8)] + ldp x14, x15, [sp, #(SSP_CALLEE_REGS + 14*8)] + ldp x16, x17, [sp, #(SSP_CALLEE_REGS + 16*8)] + ldp x18, x30, [sp, #(SSP_CALLEE_REGS + 18*8)] + ret +#endif