DSP LLE Jit, joined work with XK and skidu.

VERY EXPERIMENTAL DON'T EXPECT HIGH PERFORMANCE!.



git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5288 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee
2010-04-07 15:04:45 +00:00
parent 1b96bef8e1
commit 499936561a
22 changed files with 1305 additions and 324 deletions

View File

@ -20,7 +20,9 @@
#ifndef _DSPTABLES_H
#define _DSPTABLES_H
#include "Common.h"
//nclude "Common.h"
#include "DSPEmitter.h"
#include "DSPCommon.h"
// The non-ADDR ones that end with _D are the opposite one - if the bit specify
// ACC0, then ACC_D will be ACC1.
@ -67,9 +69,8 @@ enum partype_t
#define OPTABLE_SIZE 0xffff + 1
#define EXT_OPTABLE_SIZE 0xff + 1
typedef u16 UDSPInstruction;
typedef void (*dspInstFunc)(const UDSPInstruction);
typedef void (*dspIntFunc)(const UDSPInstruction);
typedef void (DSPEmitter::*dspJitFunc)(const UDSPInstruction);
struct param2_t
{
@ -86,8 +87,8 @@ typedef struct
u16 opcode;
u16 opcode_mask;
dspInstFunc interpFunc;
dspInstFunc jitFunc;
dspIntFunc intFunc;
dspJitFunc jitFunc;
u8 size;
u8 param_count;
@ -141,11 +142,11 @@ inline void ExecuteInstruction(const UDSPInstruction inst)
if (tinst->extended) {
if ((inst >> 12) == 0x3)
extOpTable[inst & 0x7F]->interpFunc(inst);
extOpTable[inst & 0x7F]->intFunc(inst);
else
extOpTable[inst & 0xFF]->interpFunc(inst);
extOpTable[inst & 0xFF]->intFunc(inst);
}
tinst->interpFunc(inst);
tinst->intFunc(inst);
if (tinst->extended) {
applyWriteBackLog();
}