notaz.gp2x.de
/
pcsx_rearmed.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
b9b6152
)
drc: use direct hle calls
author
notaz
<notasas@gmail.com>
Sun, 5 Dec 2010 15:00:51 +0000
(17:00 +0200)
committer
notaz
<notasas@gmail.com>
Sun, 5 Dec 2010 15:00:51 +0000
(17:00 +0200)
libpcsxcore/new_dynarec/emu_if.c
patch
|
blob
|
blame
|
history
libpcsxcore/new_dynarec/emu_if.h
patch
|
blob
|
blame
|
history
libpcsxcore/new_dynarec/linkage_arm.s
patch
|
blob
|
blame
|
history
libpcsxcore/new_dynarec/new_dynarec.c
patch
|
blob
|
blame
|
history
diff --git
a/libpcsxcore/new_dynarec/emu_if.c
b/libpcsxcore/new_dynarec/emu_if.c
index
cd44726
..
d9d753d
100644
(file)
--- a/
libpcsxcore/new_dynarec/emu_if.c
+++ b/
libpcsxcore/new_dynarec/emu_if.c
@@
-123,7
+123,6
@@
static int ari64_init()
if (psxCP2[i] != psxNULL)
gte_handlers[i] = psxCP2[i];
if (psxCP2[i] != psxNULL)
gte_handlers[i] = psxCP2[i];
- psxHLEt_addr = (void *)psxHLEt; // FIXME: rm
return 0;
}
return 0;
}
@@
-187,7
+186,6
@@
unsigned short hword;
unsigned char byte;
int pending_exception;
unsigned int next_interupt;
unsigned char byte;
int pending_exception;
unsigned int next_interupt;
-void *psxHLEt_addr;
void new_dynarec_init() {}
int new_dyna_start() {}
void new_dynarec_cleanup() {}
void new_dynarec_init() {}
int new_dyna_start() {}
void new_dynarec_cleanup() {}
diff --git
a/libpcsxcore/new_dynarec/emu_if.h
b/libpcsxcore/new_dynarec/emu_if.h
index
700182a
..
e93fabd
100644
(file)
--- a/
libpcsxcore/new_dynarec/emu_if.h
+++ b/
libpcsxcore/new_dynarec/emu_if.h
@@
-54,4
+54,4
@@
void MTC0_();
#define MTC0 MTC0_ /* don't call interpreter with wrong args */
/* misc */
#define MTC0 MTC0_ /* don't call interpreter with wrong args */
/* misc */
-extern void
*psxHLEt_addr
;
+extern void
(*psxHLEt[])()
;
diff --git
a/libpcsxcore/new_dynarec/linkage_arm.s
b/libpcsxcore/new_dynarec/linkage_arm.s
index
aeb8baa
..
5451110
100644
(file)
--- a/
libpcsxcore/new_dynarec/linkage_arm.s
+++ b/
libpcsxcore/new_dynarec/linkage_arm.s
@@
-60,7
+60,6
@@
rdram = 0x80000000
.global memory_map
/* psx */
.global psxRegs
.global memory_map
/* psx */
.global psxRegs
- .global psxHLEt_addr
.bss
.align 4
.bss
.align 4
@@
-151,13
+150,10
@@
intCycle = interrupt + 4
.size intCycle, 128
psxRegs_end = intCycle + 128
.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
.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
.type branch_target, %object
.size branch_target, 4
mini_ht = branch_target + 4
@@
-676,12
+672,10
@@
pcsx_return:
jump_hlecall:
ldr r2, [fp, #last_count-dynarec_local]
str r0, [fp, #pcaddr-dynarec_local]
jump_hlecall:
ldr r2, [fp, #last_count-dynarec_local]
str r0, [fp, #pcaddr-dynarec_local]
- and r1, r1, #7
add r2, r2, r10
add r2, r2, r10
- ldr r3, [fp, #psxHLEt_addr-dynarec_local] /* psxHLEt */
str r2, [fp, #cycle-dynarec_local] /* PCSX cycle counter */
adr lr, pcsx_return
str r2, [fp, #cycle-dynarec_local] /* PCSX cycle counter */
adr lr, pcsx_return
- ldr pc, [r3, r1, lsl #2] @ FIXME
+ bx r1
.size jump_hlecall, .-jump_hlecall
new_dyna_leave:
.size jump_hlecall, .-jump_hlecall
new_dyna_leave:
diff --git
a/libpcsxcore/new_dynarec/new_dynarec.c
b/libpcsxcore/new_dynarec/new_dynarec.c
index
62250d9
..
55e5ec9
100644
(file)
--- a/
libpcsxcore/new_dynarec/new_dynarec.c
+++ b/
libpcsxcore/new_dynarec/new_dynarec.c
@@
-3708,9
+3708,9
@@
void hlecall_assemble(int i,struct regstat *i_regs)
assert(ccreg==HOST_CCREG);
assert(!is_delayslot);
emit_movimm(start+i*4+4,0); // Get PC
assert(ccreg==HOST_CCREG);
assert(!is_delayslot);
emit_movimm(start+i*4+4,0); // Get PC
- emit_movimm(
source[i],1); // opcode
+ emit_movimm(
(int)psxHLEt[source[i]&7],1);
emit_addimm(HOST_CCREG,CLOCK_DIVIDER*ccadj[i],HOST_CCREG); // XXX
emit_addimm(HOST_CCREG,CLOCK_DIVIDER*ccadj[i],HOST_CCREG); // XXX
- emit_jmp((int)jump_hlecall);
// XXX
+ emit_jmp((int)jump_hlecall);
}
void ds_assemble(int i,struct regstat *i_regs)
}
void ds_assemble(int i,struct regstat *i_regs)