X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Flinkage_arm64.S;h=38c78dc362b0bc6ad4bb305a102d61f2f3ef39f7;hb=a5cd72d0e598f037fd9d9f23948af5b2fb06e2eb;hp=5c4d12746bc3bb0202ce0ad1d77123633ae4bac6;hpb=398d69247112982aa5ddb91bf0fa2a435c6e008c;p=pcsx_rearmed.git diff --git a/libpcsxcore/new_dynarec/linkage_arm64.S b/libpcsxcore/new_dynarec/linkage_arm64.S index 5c4d1274..38c78dc3 100644 --- a/libpcsxcore/new_dynarec/linkage_arm64.S +++ b/libpcsxcore/new_dynarec/linkage_arm64.S @@ -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,53 +114,41 @@ 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_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, @@ -193,7 +159,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 +178,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