aboutsummaryrefslogtreecommitdiff
path: root/libpcsxcore/new_dynarec
diff options
context:
space:
mode:
authornotaz2011-09-25 16:47:14 +0300
committernotaz2011-09-27 02:09:35 +0300
commit59774ed0120d20c731ee20da88ba6356d184dc8a (patch)
tree2d025303afb700215faf1bf95fa9735e5eaa68f7 /libpcsxcore/new_dynarec
parent41f55c9fb3e682e2c424e98ec70ab6aad226f85d (diff)
downloadpcsx_rearmed-59774ed0120d20c731ee20da88ba6356d184dc8a.tar.gz
pcsx_rearmed-59774ed0120d20c731ee20da88ba6356d184dc8a.tar.bz2
pcsx_rearmed-59774ed0120d20c731ee20da88ba6356d184dc8a.zip
gte: split arm code for pollux, generate flagless handlers
flagless are unused but will be used later, at least I hope so.
Diffstat (limited to 'libpcsxcore/new_dynarec')
-rw-r--r--libpcsxcore/new_dynarec/emu_if.c28
-rw-r--r--libpcsxcore/new_dynarec/emu_if.h1
2 files changed, 24 insertions, 5 deletions
diff --git a/libpcsxcore/new_dynarec/emu_if.c b/libpcsxcore/new_dynarec/emu_if.c
index 8a068ea..fbd4f96 100644
--- a/libpcsxcore/new_dynarec/emu_if.c
+++ b/libpcsxcore/new_dynarec/emu_if.c
@@ -14,7 +14,10 @@
#include "../cdrom.h"
#include "../psxdma.h"
#include "../mdec.h"
+#include "../gte_arm.h"
#include "../gte_neon.h"
+#define FLAGLESS
+#include "../gte.h"
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
@@ -140,6 +143,17 @@ void new_dyna_restore(void)
void *gte_handlers[64];
+void *gte_handlers_nf[64] = {
+ NULL , gteRTPS_nf , NULL , NULL , NULL , NULL , gteNCLIP_nf, NULL , // 00
+ NULL , NULL , NULL , NULL , gteOP_nf , NULL , NULL , NULL , // 08
+ gteDPCS_nf, gteINTPL_nf, gteMVMVA_nf, gteNCDS_nf, gteCDP_nf, NULL , gteNCDT_nf , NULL , // 10
+ NULL , NULL , NULL , gteNCCS_nf, gteCC_nf , NULL , gteNCS_nf , NULL , // 18
+ gteNCT_nf , NULL , NULL , NULL , NULL , NULL , NULL , NULL , // 20
+ gteSQR_nf , gteDCPL_nf , gteDPCT_nf , NULL , NULL , gteAVSZ3_nf, gteAVSZ4_nf, NULL , // 28
+ gteRTPT_nf, NULL , NULL , NULL , NULL , NULL , NULL , NULL , // 30
+ NULL , NULL , NULL , NULL , NULL , gteGPF_nf , gteGPL_nf , gteNCCT_nf, // 38
+};
+
/* from gte.txt.. not sure if this is any good. */
const char gte_cycletab[64] = {
/* 1 2 3 4 5 6 7 8 9 a b c d e f */
@@ -161,12 +175,16 @@ static int ari64_init()
for (i = 0; i < ARRAY_SIZE(gte_handlers); i++)
if (psxCP2[i] != psxNULL)
gte_handlers[i] = psxCP2[i];
-#ifndef DRC_DBG
+
+#if !defined(DRC_DBG) && !defined(PCNT)
+#ifdef __arm__
+ gte_handlers[0x06] = gteNCLIP_arm;
+#endif
#ifdef __ARM_NEON__
- gte_handlers[0x01] = gteRTPS_neon;
- gte_handlers[0x30] = gteRTPT_neon;
- gte_handlers[0x12] = gteMVMVA_neon;
- gte_handlers[0x06] = gteNCLIP_neon;
+ // compiler's _nf version is still a lot slower then neon
+ gte_handlers[0x01] = gte_handlers_nf[0x01] = gteRTPS_neon;
+ gte_handlers[0x30] = gte_handlers_nf[0x30] = gteRTPT_neon;
+ gte_handlers[0x12] = gte_handlers_nf[0x12] = gteMVMVA_neon;
#endif
#endif
psxH_ptr = psxH;
diff --git a/libpcsxcore/new_dynarec/emu_if.h b/libpcsxcore/new_dynarec/emu_if.h
index 8acd1f5..e16cca5 100644
--- a/libpcsxcore/new_dynarec/emu_if.h
+++ b/libpcsxcore/new_dynarec/emu_if.h
@@ -30,6 +30,7 @@ extern int reg_cop0[];
/* COP2/GTE */
extern int reg_cop2d[], reg_cop2c[];
extern void *gte_handlers[64];
+extern void *gte_handlers_nf[64];
extern const char gte_cycletab[64];
/* dummy */