gte_neon: hook into recompiler
[pcsx_rearmed.git] / libpcsxcore / ppc / reguse.h
CommitLineData
ef79bbde
P
1#ifndef __REGUSE_H__
2#define __REGUSE_H__
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8// include basic types
9#include "../psxcommon.h"
10
11#define REGUSE_NONE 0x0000
12#define REGUSE_UNKNOWN 0x0001
13
14//sub functions
15#define REGUSE_SPECIAL 0x0002
16#define REGUSE_REGIMM 0x0004
17#define REGUSE_COP0 0x0006
18#define REGUSE_COP2 0x0008
19#define REGUSE_BASIC 0x000a
20#define REGUSE_SUBMASK 0x000e /* sub function mask */
21
22#define REGUSE_ACC 0x0010 /* accumulator */
23#define REGUSE_LOGIC 0x0020 /* logic operations */
24#define REGUSE_MULT 0x0030 /* multiplier */
25#define REGUSE_JUMP 0x0040 /* jump to dest */
26#define REGUSE_JUMPR 0x0050 /* jump to reg */
27#define REGUSE_BRANCH 0x0060 /* branch */
28#define REGUSE_MEM_R 0x0070 /* read from memory */
29#define REGUSE_MEM_W 0x0080 /* write to memory */
30#define REGUSE_MEM 0x0090 /* read and write to memory */
31#define REGUSE_SYS 0x00a0 /* syscall */
32#define REGUSE_GTE 0x00b0 /* gte operation */
33#define REGUSE_SUB 0x00f0 /* sub usage */
34#define REGUSE_TYPEM 0x00f0 /* type mask */
35
36
37#define REGUSE_RS_R 0x0100
38#define REGUSE_RS_W 0x0200
39#define REGUSE_RS (REGUSE_RS_R | REGUSE_RS_W)
40#define REGUSE_RT_R 0x0400
41#define REGUSE_RT_W 0x0800
42#define REGUSE_RT (REGUSE_RT_R | REGUSE_RT_W)
43#define REGUSE_RD_R 0x1000
44#define REGUSE_RD_W 0x2000
45#define REGUSE_RD (REGUSE_RD_R | REGUSE_RD_W)
46
47#define REGUSE_R31_W 0x4000 /* writes to link register (r31) */
48#define REGUSE_PC 0x8000 /* reads pc */
49
50#define REGUSE_LO_R 0x10000
51#define REGUSE_LO_W 0x20000
52#define REGUSE_LO (REGUSE_LO_R | REGUSE_LO_W)
53#define REGUSE_HI_R 0x40000
54#define REGUSE_HI_W 0x80000
55#define REGUSE_HI (REGUSE_HI_R | REGUSE_HI_W)
56
57#define REGUSE_COP0_RD_R 0x100000
58#define REGUSE_COP0_RD_W 0x200000
59#define REGUSE_COP0_RD (REGUSE_COP0_RD_R | REGUSE_COP0_RD_W)
60#define REGUSE_COP0_STATUS 0x400000
61#define REGUSE_EXCEPTION 0x800000
62
63#define REGUSE_COP2_RT_R 0x1000000
64#define REGUSE_COP2_RT_W 0x2000000
65#define REGUSE_COP2_RT (REGUSE_COP2_RT_R | REGUSE_COP2_RT_W)
66#define REGUSE_COP2_RD_R 0x4000000
67#define REGUSE_COP2_RD_W 0x8000000
68#define REGUSE_COP2_RD (REGUSE_COP2_RD_R | REGUSE_COP2_RD_W)
69
70
71// specific register use
72#define REGUSE_READ 1
73#define REGUSE_WRITE 2
74#define REGUSE_RW 3
75
76int useOfPsxReg(u32 code, int use, int psxreg) __attribute__ ((__pure__));;
77int nextPsxRegUse(u32 pc, int psxreg) __attribute__ ((__pure__));;
78int isPsxRegUsed(u32 pc, int psxreg) __attribute__ ((__pure__));;
79
80#ifdef __cplusplus
81}
82#endif
83#endif