dolphin/Source/TestSuite/ASM/source/asm_tables.h

52 lines
1.4 KiB
C

#include "Defines.h"
#include "Instructions.h"
enum Modify
{
MOD_CR0 = (1 << 0),
MOD_CR1 = (1 << 1),
MOD_SR = (1 << 2),
MOD_XER = (1 << 3),
MOD_FPSCR = (1 << 4)
};
enum IOput
{
IO_ARG1 = (1 << 0),
IO_ARG2 = (1 << 1),
IO_ARG3 = (1 << 2),
};
enum inst_type
{
TYPE_INTEGER,
TYPE_FLOAT
};
struct inst
{
char name[16];
u32 Modifies; // Flag modification
u8 numInput;
u32 Input;
u32 Ouput;
inst_type type;
void (*Call)(u32*, u32*, u32*, u32*);
void (*CallFP)(float*, float*, float*, float*);
};
static inst instructions[] = {
{ "add", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, add},
{ "add.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, add},
{ "subfc", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, subfc},
{ "subfc.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, subfcRC},
{ "divw", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1, TYPE_INTEGER, divw},
{ "divw.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, divwRC},
{ "divwo", MOD_XER, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, divwo},
{ "divwo.", MOD_CR0 | MOD_XER, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1, TYPE_INTEGER, divwoRC},
//{ "fsqrt", MOD_FPSCR, 2, IO_ARG1 | IO_ARG2, IO_ARG1,TYPE_FLOAT, NULL, fsqrt},
//{ "fsqrt.", MOD_CR1 | MOD_FPSCR, 2, IO_ARG1 | IO_ARG2, IO_ARG1,TYPE_FLOAT, NULL, fsqrtRC}
};
void RunInstruction(u32 inst);