X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Flinkage_arm.s;h=54511108cc47e76ea0964d602fce620f5da7cf8e;hp=3418ae9ac4152fe2188ceba5ba02969f1c569324;hb=67ba0fb4fa3f120c4156ca7d6155c51b7623e84f;hpb=7139f3c8070e9aa14fd36c2451d7f10079caa37a diff --git a/libpcsxcore/new_dynarec/linkage_arm.s b/libpcsxcore/new_dynarec/linkage_arm.s index 3418ae9a..54511108 100644 --- a/libpcsxcore/new_dynarec/linkage_arm.s +++ b/libpcsxcore/new_dynarec/linkage_arm.s @@ -35,6 +35,8 @@ rdram = 0x80000000 .global hi .global lo .global reg_cop0 + .global reg_cop2d + .global reg_cop2c .global FCR0 .global FCR31 .global next_interupt @@ -58,8 +60,6 @@ rdram = 0x80000000 .global memory_map /* psx */ .global psxRegs - .global psxHLEt_addr - .global code .bss .align 4 @@ -139,7 +139,6 @@ pcaddr = PC code = PC + 4 .type code, %object .size code, 4 -.global cycle cycle = code + 4 .type cycle, %object .size cycle, 4 @@ -151,13 +150,10 @@ intCycle = interrupt + 4 .size intCycle, 128 psxRegs_end = intCycle + 128 -psxHLEt_addr = psxRegs_end - .type psxHLEt_addr, %object - .size psxHLEt_addr, 4 -align0 = psxHLEt_addr + 4 /* just for alignment */ +align0 = psxRegs_end /* just for alignment */ .type align0, %object - .size align0, 4 -branch_target = align0 + 4 + .size align0, 8 +branch_target = align0 + 8 .type branch_target, %object .size branch_target, 4 mini_ht = branch_target + 4 @@ -551,7 +547,8 @@ cc_interrupt: str r1, [fp, #pending_exception-dynarec_local] and r2, r2, r10, lsr #17 add r3, fp, #restore_candidate-dynarec_local - str r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + str r10, [fp, #cycle-dynarec_local] /* PCSX cycles */ +@@ str r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ ldr r4, [r2, r3] mov r10, lr tst r4, r4 @@ -559,7 +556,7 @@ cc_interrupt: .E1: bl gen_interupt mov lr, r10 - ldr r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + ldr r10, [fp, #cycle-dynarec_local] ldr r0, [fp, #next_interupt-dynarec_local] ldr r1, [fp, #pending_exception-dynarec_local] ldr r2, [fp, #stop-dynarec_local] @@ -597,7 +594,7 @@ do_interrupt: ldr r0, [fp, #pcaddr-dynarec_local] bl get_addr_ht ldr r1, [fp, #next_interupt-dynarec_local] - ldr r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + ldr r10, [fp, #cycle-dynarec_local] str r1, [fp, #last_count-dynarec_local] sub r10, r10, r1 add r10, r10, #2 @@ -655,13 +652,16 @@ jump_syscall_hle: add r2, r2, r10 mov r0, #0x20 /* cause */ str r2, [fp, #cycle-dynarec_local] /* PCSX cycle counter */ - str r2, [fp, #reg_cop0+36-dynarec_local] /* Count */ bl psxException /* note: psxException might do recorsive recompiler call from it's HLE code, * so be ready for this */ +pcsx_return: + ldr r1, [fp, #next_interupt-dynarec_local] + ldr r10, [fp, #cycle-dynarec_local] ldr r0, [fp, #pcaddr-dynarec_local] - mov r10, #0 /* FIXME */ + sub r10, r10, r1 + str r1, [fp, #last_count-dynarec_local] bl get_addr_ht mov pc, r0 .size jump_syscall_hle, .-jump_syscall_hle @@ -672,18 +672,10 @@ jump_syscall_hle: jump_hlecall: ldr r2, [fp, #last_count-dynarec_local] str r0, [fp, #pcaddr-dynarec_local] - and r1, r1, #7 add r2, r2, r10 - ldr r3, [fp, #psxHLEt_addr-dynarec_local] /* psxHLEt */ str r2, [fp, #cycle-dynarec_local] /* PCSX cycle counter */ - str r2, [fp, #reg_cop0+36-dynarec_local] /* Count */ - mov lr, pc - ldr pc, [r3, r1, lsl #2] - - ldr r0, [fp, #pcaddr-dynarec_local] - mov r10, #0 /* FIXME */ - bl get_addr_ht - mov pc, r0 + adr lr, pcsx_return + bx r1 .size jump_hlecall, .-jump_hlecall new_dyna_leave: @@ -693,10 +685,11 @@ new_dyna_leave: ldr r0, [fp, #last_count-dynarec_local] add r12, fp, #28 add r10, r0, r10 - str r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + str r10, [fp, #cycle-dynarec_local] ldmia r12, {r4, r5, r6, r7, r8, r9, sl, fp, pc} .size new_dyna_leave, .-new_dyna_leave + /* these are used to call memhandlers */ .align 2 .global indirect_jump_indexed .type indirect_jump_indexed, %function @@ -707,7 +700,7 @@ indirect_jump_indexed: indirect_jump: ldr r12, [fp, #last_count-dynarec_local] add r2, r2, r12 - str r2, [fp, #reg_cop0+36-dynarec_local] /* Count */ + str r2, [fp, #cycle-dynarec_local] mov pc, r0 .size indirect_jump, .-indirect_jump .size indirect_jump_indexed, .-indirect_jump_indexed @@ -721,7 +714,7 @@ jump_eret: bic r1, r1, #2 add r10, r0, r10 str r1, [fp, #reg_cop0+48-dynarec_local] /* Status */ - str r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + str r10, [fp, #cycle-dynarec_local] bl check_interupt ldr r1, [fp, #next_interupt-dynarec_local] ldr r0, [fp, #reg_cop0+56-dynarec_local] /* EPC */ @@ -749,7 +742,7 @@ new_dyna_start: /*bl new_recompile_block*/ bl get_addr_ht ldr r1, [fp, #next_interupt-dynarec_local] - ldr r10, [fp, #reg_cop0+36-dynarec_local] /* Count */ + ldr r10, [fp, #cycle-dynarec_local] str r1, [fp, #last_count-dynarec_local] sub r10, r10, r1 mov pc, r0