~registry/dolphin-emu/triforce

« back to all changes in this revision

Viewing changes to Source/TestSuite/ASM/source/asm_tables.h

  • Committer: Sérgio Benjamim
  • Date: 2015-02-13 05:54:40 UTC
  • Revision ID: sergio_br2@yahoo.com.br-20150213055440-ey2rt3sjpy27km78
Dolphin Triforce branch from code.google, commit b957980 (4.0-315).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include "Defines.h"
 
3
#include "Instructions.h"
 
4
 
 
5
enum Modify
 
6
{
 
7
        MOD_CR0 = (1 << 0),
 
8
        MOD_CR1 = (1 << 1),
 
9
        MOD_SR = (1 << 2),
 
10
        MOD_XER = (1 << 3),
 
11
        MOD_FPSCR = (1 << 4)
 
12
};
 
13
enum IOput
 
14
{
 
15
        IO_ARG1 = (1 << 0),
 
16
        IO_ARG2 = (1 << 1),
 
17
        IO_ARG3 = (1 << 2),
 
18
};
 
19
enum inst_type
 
20
{
 
21
        TYPE_INTEGER,
 
22
        TYPE_FLOAT
 
23
};
 
24
 
 
25
struct inst
 
26
{
 
27
        char name[16];
 
28
        u32 Modifies; // Flag modification
 
29
        u8 numInput;
 
30
        u32 Input;
 
31
        u32 Ouput;
 
32
        inst_type type;
 
33
        void (*Call)(u32*, u32*, u32*, u32*);
 
34
        void (*CallFP)(float*, float*, float*, float*);
 
35
        
 
36
};
 
37
 
 
38
static inst instructions[] = {
 
39
        { "add", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, add},
 
40
        { "add.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, add},
 
41
        { "subfc", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, subfc},
 
42
        { "subfc.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, subfcRC},
 
43
        { "divw", NULL, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1, TYPE_INTEGER, divw},
 
44
        { "divw.", MOD_CR0, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, divwRC},
 
45
        { "divwo", MOD_XER, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1,TYPE_INTEGER, divwo},
 
46
        { "divwo.", MOD_CR0 | MOD_XER, 3, IO_ARG1 | IO_ARG2 | IO_ARG3, IO_ARG1, TYPE_INTEGER, divwoRC},
 
47
        //{ "fsqrt", MOD_FPSCR, 2, IO_ARG1 | IO_ARG2, IO_ARG1,TYPE_FLOAT, NULL, fsqrt},
 
48
        //{ "fsqrt.", MOD_CR1 | MOD_FPSCR, 2, IO_ARG1 | IO_ARG2, IO_ARG1,TYPE_FLOAT, NULL, fsqrtRC}
 
49
};
 
50
 
 
51
 
 
52
void RunInstruction(u32 inst);