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