improve ARM feature detection
[pcsx_rearmed.git] / libpcsxcore / ppc / reguse.h
1 #ifndef __REGUSE_H__
2 #define __REGUSE_H__
3
4 #ifdef __cplusplus
5 extern "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
76 int useOfPsxReg(u32 code, int use, int psxreg) __attribute__ ((__pure__));;
77 int nextPsxRegUse(u32 pc, int psxreg) __attribute__ ((__pure__));;
78 int isPsxRegUsed(u32 pc, int psxreg) __attribute__ ((__pure__));;
79
80 #ifdef __cplusplus
81 }
82 #endif
83 #endif