|
|
1.1 root 1: /* c2.h 4.7 83/08/11 */
2:
3: /*
4: * Header for object code improver
5: */
6:
7: #define JBR 1
8: #define CBR 2
9: #define JMP 3
10: #define LABEL 4
11: #define DLABEL 5
12: #define EROU 7
13: #define JSW 9
14: #define MOV 10
15: #define CLR 11
16: #define INC 12
17: #define DEC 13
18: #define TST 14
19: #define PUSH 15
20: #define CVT 16
21: #define CMP 17
22: #define ADD 18
23: #define SUB 19
24: #define BIT 20
25: #define BIC 21
26: #define BIS 22
27: #define XOR 23
28: #define COM 24
29: #define NEG 25
30: #define MUL 26
31: #define DIV 27
32: #define ASH 28
33: #define EXTV 29
34: #define EXTZV 30
35: #define INSV 31
36: #define CALLS 32
37: #define RET 33
38: #define CASE 34
39: #define SOB 35
40: #define TEXT 36
41: #define DATA 37
42: #define BSS 38
43: #define ALIGN 39
44: #define END 40
45: #define MOVZ 41
46: #define WGEN 42
47: #define SOBGEQ 43
48: #define SOBGTR 44
49: #define AOBLEQ 45
50: #define AOBLSS 46
51: #define ACB 47
52: #define MOVA 48
53: #define PUSHA 49
54: #define LGEN 50
55: #define SET 51
56: #define MOVC3 52
57: #define RSB 53
58: #define JSB 54
59: #define MFPR 55
60: #define MTPR 56
61: #define PROBER 57
62: #define PROBEW 58
63: #define LCOMM 59
64: #define COMM 60
65:
66: #define JEQ 0
67: #define JNE 1
68: #define JLE 2
69: #define JGE 3
70: #define JLT 4
71: #define JGT 5
72: /* rearranged for unsigned branches so that jxxu = jxx + 6 */
73: #define JLOS 8
74: #define JHIS 9
75: #define JLO 10
76: #define JHI 11
77:
78: #define JBC 12
79: #define JBS 13
80: #define JLBC 14
81: #define JLBS 15
82: #define JBCC 16
83: #define JBSC 17
84: #define JBCS 18
85: #define JBSS 19
86:
87: /*
88: * When the new opcodes were added, the relative
89: * ordering of the first 3 (those that are not float)
90: * had to be retained, so that other parts of the program
91: * were not broken.
92: *
93: * In addition, the distance between OP3 and OP2 must be preserved.
94: * The order of definitions above OP2 must not be changed.
95: *
96: * Note that these definitions DO NOT correspond to
97: * those definitions used in as, adb and sdb.
98: */
99: #define BYTE 1
100: #define WORD 2
101: #define LONG 3
102: #define FFLOAT 4
103: #define DFLOAT 5
104: #define QUAD 6
105: #define OP2 7
106: #define OP3 8
107: #define OPB 9
108: #define OPX 10
109: #define GFLOAT 11
110: #define HFLOAT 12
111: #define OCTA 13
112:
113: #define T(a,b) (a|((b)<<8))
114: #define U(a,b) (a|((b)<<4))
115:
116: #define C2_ASIZE 128
117:
118: struct optab {
119: char opstring[7];
120: short opcode;
121: } optab[];
122:
123: struct node {
124: char op;
125: char subop;
126: short refc;
127: struct node *forw;
128: struct node *back;
129: struct node *ref;
130: char *code;
131: struct optab *pop;
132: long labno;
133: short seq;
134: };
135:
136: struct {
137: short combop;
138: };
139:
140: char line[512];
141: struct node first;
142: char *curlp;
143: int nbrbr;
144: int nsaddr;
145: int redunm;
146: int iaftbr;
147: int njp1;
148: int nrlab;
149: int nxjump;
150: int ncmot;
151: int nrevbr;
152: int loopiv;
153: int nredunj;
154: int nskip;
155: int ncomj;
156: int nsob;
157: int nrtst;
158: int nbj;
159: int nfield;
160:
161: int nchange;
162: int isn;
163: int debug;
164: char *lasta;
165: char *lastr;
166: char *firstr;
167: char revbr[];
168: #define NREG 12
169: char *regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */
170: char conloc[C2_ASIZE];
171: char conval[C2_ASIZE];
172: char ccloc[C2_ASIZE];
173:
174: #define RT1 12
175: #define RT2 13
176: #define RT3 14
177: #define RT4 15
178: #define LABHS 127
179:
180: struct { char lbyte; };
181:
182: char *copy();
183: long getnum();
184: struct node *codemove();
185: struct node *insertl();
186: struct node *nonlab();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.