xref: /csrg-svn/old/pcc/c2.vax/c22.c (revision 1497)
1*1497Sbill static	char sccsid[] = "@(#)c22.c 4.1 10/17/80";
2*1497Sbill #include "c2.h"
3*1497Sbill /* char c22[] = "@(#)c22.c 1.10 80/03/14 10:27:37"; */
4*1497Sbill #define readonly
5*1497Sbill 
6*1497Sbill readonly char revbr[] = {
7*1497Sbill 	JNE, JEQ, JGT, JLT, JGE, JLE,
8*1497Sbill 	JNE, JEQ, JHI, JLO, JHIS, JLOS,
9*1497Sbill 	JBS, JBC, JLBS, JLBC, JBSC, JBCC, JBSS, JBCS };
10*1497Sbill 
11*1497Sbill /* cursed be the preprocessor, whose impotence and stupidity
12*1497Sbill /* prevented this table being macro-generated from ../as/instrs
13*1497Sbill */
14*1497Sbill 
15*1497Sbill readonly struct optab optab[] = {
16*1497Sbill "jbr",JBR,
17*1497Sbill "jeql",T(CBR,JEQ),
18*1497Sbill "jneq",T(CBR,JNE),
19*1497Sbill "jleq",T(CBR,JLE),
20*1497Sbill "jgeq",T(CBR,JGE),
21*1497Sbill "jlss",T(CBR,JLT),
22*1497Sbill "jgtr",T(CBR,JGT),
23*1497Sbill "jbc",T(CBR,JBC),
24*1497Sbill "jbs",T(CBR,JBS),
25*1497Sbill "jlequ",T(CBR,JLOS),
26*1497Sbill "jgequ",T(CBR,JHIS),
27*1497Sbill "jlssu",T(CBR,JLO),
28*1497Sbill "jgtru",T(CBR,JHI),
29*1497Sbill "jlbc",T(CBR,JLBC),
30*1497Sbill "jlbs",T(CBR,JLBS),
31*1497Sbill "jbcc",T(CBR,JBCC),
32*1497Sbill "jbsc",T(CBR,JBSC),
33*1497Sbill "jbcs",T(CBR,JBCS),
34*1497Sbill "jbss",T(CBR,JBSS),
35*1497Sbill "acbb",T(ACB,BYTE),
36*1497Sbill "acbd",T(ACB,DOUBLE),
37*1497Sbill "acbf",T(ACB,FLOAT),
38*1497Sbill "acbl",T(ACB,LONG),
39*1497Sbill "acbw",T(ACB,WORD),
40*1497Sbill "addb2",T(ADD,U(BYTE,OP2)),
41*1497Sbill "addb3",T(ADD,U(BYTE,OP3)),
42*1497Sbill "addd2",T(ADD,U(DOUBLE,OP2)),
43*1497Sbill "addd3",T(ADD,U(DOUBLE,OP3)),
44*1497Sbill "addf2",T(ADD,U(FLOAT,OP2)),
45*1497Sbill "addf3",T(ADD,U(FLOAT,OP3)),
46*1497Sbill "addl2",T(ADD,U(LONG,OP2)),
47*1497Sbill "addl3",T(ADD,U(LONG,OP3)),
48*1497Sbill "addw2",T(ADD,U(WORD,OP2)),
49*1497Sbill "addw3",T(ADD,U(WORD,OP3)),
50*1497Sbill "aobleq",AOBLEQ,
51*1497Sbill "aoblss",AOBLSS,
52*1497Sbill "ashl",T(ASH,LONG),
53*1497Sbill "ashq",T(ASH,QUAD),
54*1497Sbill "bbc",T(CBR,JBC),
55*1497Sbill "bbcc",T(CBR,JBCC),
56*1497Sbill "bbcci",T(CBR,JBCC),
57*1497Sbill "bbcs",T(CBR,JBCS),
58*1497Sbill "bbs",T(CBR,JBS),
59*1497Sbill "bbsc",T(CBR,JBSC),
60*1497Sbill "bbss",T(CBR,JBSS),
61*1497Sbill "bbssi",T(CBR,JBSS),
62*1497Sbill "bcc",T(CBR,JHIS),
63*1497Sbill "bcs",T(CBR,JLO),
64*1497Sbill "beql",T(CBR,JEQ),
65*1497Sbill "beqlu",T(CBR,JEQ),
66*1497Sbill "bgeq",T(CBR,JGE),
67*1497Sbill "bgequ",T(CBR,JHIS),
68*1497Sbill "bgtr",T(CBR,JGT),
69*1497Sbill "bgtru",T(CBR,JHI),
70*1497Sbill "bicb2",T(BIC,U(BYTE,OP2)),
71*1497Sbill "bicb3",T(BIC,U(BYTE,OP3)),
72*1497Sbill "bicl2",T(BIC,U(LONG,OP2)),
73*1497Sbill "bicl3",T(BIC,U(LONG,OP3)),
74*1497Sbill "bicw2",T(BIC,U(WORD,OP2)),
75*1497Sbill "bicw3",T(BIC,U(WORD,OP3)),
76*1497Sbill "bisb2",T(BIS,U(BYTE,OP2)),
77*1497Sbill "bisb3",T(BIS,U(BYTE,OP3)),
78*1497Sbill "bisl2",T(BIS,U(LONG,OP2)),
79*1497Sbill "bisl3",T(BIS,U(LONG,OP3)),
80*1497Sbill "bisw2",T(BIS,U(WORD,OP2)),
81*1497Sbill "bisw3",T(BIS,U(WORD,OP3)),
82*1497Sbill "bitb",T(BIT,BYTE),
83*1497Sbill "bitl",T(BIT,LONG),
84*1497Sbill "bitw",T(BIT,WORD),
85*1497Sbill "blbs",T(CBR,JLBS),
86*1497Sbill "blbc",T(CBR,JLBC),
87*1497Sbill "bleq",T(CBR,JLE),
88*1497Sbill "blequ",T(CBR,JLOS),
89*1497Sbill "blss",T(CBR,JLT),
90*1497Sbill "blssu",T(CBR,JLO),
91*1497Sbill "bneq",T(CBR,JNE),
92*1497Sbill "bnequ",T(CBR,JNE),
93*1497Sbill "brb",JBR,
94*1497Sbill "brw",JBR,
95*1497Sbill "bvc",T(CBR,0),
96*1497Sbill "bvs",T(CBR,0),
97*1497Sbill "callg",CALLS,
98*1497Sbill "calls",CALLS,
99*1497Sbill "caseb",T(CASE,BYTE),
100*1497Sbill "casel",T(CASE,LONG),
101*1497Sbill "casew",T(CASE,WORD),
102*1497Sbill "clrb",T(CLR,BYTE),
103*1497Sbill "clrd",T(CLR,DOUBLE),
104*1497Sbill "clrf",T(CLR,FLOAT),
105*1497Sbill "clrl",T(CLR,LONG),
106*1497Sbill "clrq",T(CLR,QUAD),
107*1497Sbill "clrw",T(CLR,WORD),
108*1497Sbill "cmpb",T(CMP,BYTE),
109*1497Sbill "cmpd",T(CMP,DOUBLE),
110*1497Sbill "cmpf",T(CMP,FLOAT),
111*1497Sbill "cmpl",T(CMP,LONG),
112*1497Sbill "cmpw",T(CMP,WORD),
113*1497Sbill "cvtbd",T(CVT,U(BYTE,DOUBLE)),
114*1497Sbill "cvtbf",T(CVT,U(BYTE,FLOAT)),
115*1497Sbill "cvtbl",T(CVT,U(BYTE,LONG)),
116*1497Sbill "cvtbw",T(CVT,U(BYTE,WORD)),
117*1497Sbill "cvtdb",T(CVT,U(DOUBLE,BYTE)),
118*1497Sbill "cvtdf",T(CVT,U(DOUBLE,FLOAT)),
119*1497Sbill "cvtdl",T(CVT,U(DOUBLE,LONG)),
120*1497Sbill "cvtdw",T(CVT,U(DOUBLE,WORD)),
121*1497Sbill "cvtfb",T(CVT,U(FLOAT,BYTE)),
122*1497Sbill "cvtfd",T(CVT,U(FLOAT,DOUBLE)),
123*1497Sbill "cvtfl",T(CVT,U(FLOAT,LONG)),
124*1497Sbill "cvtfw",T(CVT,U(FLOAT,WORD)),
125*1497Sbill "cvtlb",T(CVT,U(LONG,BYTE)),
126*1497Sbill "cvtld",T(CVT,U(LONG,DOUBLE)),
127*1497Sbill "cvtlf",T(CVT,U(LONG,FLOAT)),
128*1497Sbill "cvtlw",T(CVT,U(LONG,WORD)),
129*1497Sbill "cvtrdl",T(CVT,U(DOUBLE,LONG)),
130*1497Sbill "cvtrfl",T(CVT,U(FLOAT,LONG)),
131*1497Sbill "cvtwb",T(CVT,U(WORD,BYTE)),
132*1497Sbill "cvtwd",T(CVT,U(WORD,DOUBLE)),
133*1497Sbill "cvtwf",T(CVT,U(WORD,FLOAT)),
134*1497Sbill "cvtwl",T(CVT,U(WORD,LONG)),
135*1497Sbill "decb",T(DEC,BYTE),
136*1497Sbill "decl",T(DEC,LONG),
137*1497Sbill "decw",T(DEC,WORD),
138*1497Sbill "divb2",T(DIV,U(BYTE,OP2)),
139*1497Sbill "divb3",T(DIV,U(BYTE,OP3)),
140*1497Sbill "divd2",T(DIV,U(DOUBLE,OP2)),
141*1497Sbill "divd3",T(DIV,U(DOUBLE,OP3)),
142*1497Sbill "divf2",T(DIV,U(FLOAT,OP2)),
143*1497Sbill "divf3",T(DIV,U(FLOAT,OP3)),
144*1497Sbill "divl2",T(DIV,U(LONG,OP2)),
145*1497Sbill "divl3",T(DIV,U(LONG,OP3)),
146*1497Sbill "divw2",T(DIV,U(WORD,OP2)),
147*1497Sbill "divw3",T(DIV,U(WORD,OP3)),
148*1497Sbill "extv",T(EXTV,LONG),
149*1497Sbill "extzv",T(EXTZV,LONG),
150*1497Sbill "incb",T(INC,BYTE),
151*1497Sbill "incl",T(INC,LONG),
152*1497Sbill "incw",T(INC,WORD),
153*1497Sbill "insv",T(INSV,-1),
154*1497Sbill "jmp",JMP,
155*1497Sbill "mcomb",T(COM,BYTE),
156*1497Sbill "mcoml",T(COM,LONG),
157*1497Sbill "mcomw",T(COM,WORD),
158*1497Sbill "mnegb",T(NEG,BYTE),
159*1497Sbill "mnegd",T(NEG,DOUBLE),
160*1497Sbill "mnegf",T(NEG,FLOAT),
161*1497Sbill "mnegl",T(NEG,LONG),
162*1497Sbill "mnegw",T(NEG,WORD),
163*1497Sbill "movab",T(MOVA,BYTE),
164*1497Sbill "movad",T(MOVA,DOUBLE),
165*1497Sbill "movaf",T(MOVA,FLOAT),
166*1497Sbill "moval",T(MOVA,LONG),
167*1497Sbill "movaq",T(MOVA,QUAD),
168*1497Sbill "movaw",T(MOVA,WORD),
169*1497Sbill "movb",T(MOV,BYTE),
170*1497Sbill "movd",T(MOV,DOUBLE),
171*1497Sbill "movf",T(MOV,FLOAT),
172*1497Sbill "movl",T(MOV,LONG),
173*1497Sbill "movq",T(MOV,QUAD),
174*1497Sbill "movw",T(MOV,WORD),
175*1497Sbill "movzbl",T(MOVZ,U(BYTE,LONG)),
176*1497Sbill "movzbw",T(MOVZ,U(BYTE,WORD)),
177*1497Sbill "movzwl",T(MOVZ,U(WORD,LONG)),
178*1497Sbill "mulb2",T(MUL,U(BYTE,OP2)),
179*1497Sbill "mulb3",T(MUL,U(BYTE,OP3)),
180*1497Sbill "muld2",T(MUL,U(DOUBLE,OP2)),
181*1497Sbill "muld3",T(MUL,U(DOUBLE,OP3)),
182*1497Sbill "mulf2",T(MUL,U(FLOAT,OP2)),
183*1497Sbill "mulf3",T(MUL,U(FLOAT,OP3)),
184*1497Sbill "mull2",T(MUL,U(LONG,OP2)),
185*1497Sbill "mull3",T(MUL,U(LONG,OP3)),
186*1497Sbill "mulw2",T(MUL,U(WORD,OP2)),
187*1497Sbill "mulw3",T(MUL,U(WORD,OP3)),
188*1497Sbill "pushab",T(PUSHA,BYTE),
189*1497Sbill "pushad",T(PUSHA,DOUBLE),
190*1497Sbill "pushaf",T(PUSHA,FLOAT),
191*1497Sbill "pushal",T(PUSHA,LONG),
192*1497Sbill "pushaq",T(PUSHA,QUAD),
193*1497Sbill "pushaw",T(PUSHA,WORD),
194*1497Sbill "pushl",T(PUSH,LONG),
195*1497Sbill "ret",T(JBR,RET),
196*1497Sbill "sobgeq",SOBGEQ,
197*1497Sbill "sobgtr",SOBGTR,
198*1497Sbill "subb2",T(SUB,U(BYTE,OP2)),
199*1497Sbill "subb3",T(SUB,U(BYTE,OP3)),
200*1497Sbill "subd2",T(SUB,U(DOUBLE,OP2)),
201*1497Sbill "subd3",T(SUB,U(DOUBLE,OP3)),
202*1497Sbill "subf2",T(SUB,U(FLOAT,OP2)),
203*1497Sbill "subf3",T(SUB,U(FLOAT,OP3)),
204*1497Sbill "subl2",T(SUB,U(LONG,OP2)),
205*1497Sbill "subl3",T(SUB,U(LONG,OP3)),
206*1497Sbill "subw2",T(SUB,U(WORD,OP2)),
207*1497Sbill "subw3",T(SUB,U(WORD,OP3)),
208*1497Sbill "tstb",T(TST,BYTE),
209*1497Sbill "tstd",T(TST,DOUBLE),
210*1497Sbill "tstf",T(TST,FLOAT),
211*1497Sbill "tstl",T(TST,LONG),
212*1497Sbill "tstw",T(TST,WORD),
213*1497Sbill "xorb2",T(XOR,U(BYTE,OP2)),
214*1497Sbill "xorb3",T(XOR,U(BYTE,OP3)),
215*1497Sbill "xorl2",T(XOR,U(LONG,OP2)),
216*1497Sbill "xorl3",T(XOR,U(LONG,OP3)),
217*1497Sbill "xorw2",T(XOR,U(WORD,OP2)),
218*1497Sbill "xorw3",T(XOR,U(WORD,OP3)),
219*1497Sbill "movc3",MOVC3,
220*1497Sbill ".globl",EROU,
221*1497Sbill ".text",TEXT,
222*1497Sbill ".data",DATA,
223*1497Sbill ".bss",BSS,
224*1497Sbill ".align",ALIGN,
225*1497Sbill ".word",WGEN,
226*1497Sbill ".long",LGEN,
227*1497Sbill ".set",SET,
228*1497Sbill ".lcomm",LCOMM,
229*1497Sbill ".comm",COMM,
230*1497Sbill ".end",END,
231*1497Sbill "rsb",T(JBR,RSB),
232*1497Sbill "jsb",JSB,
233*1497Sbill "mfpr",T(MFPR,LONG),
234*1497Sbill "mtpr",T(MTPR,LONG),
235*1497Sbill "prober",T(PROBER,BYTE),
236*1497Sbill "probew",T(PROBEW,BYTE),
237*1497Sbill "adawi",0,
238*1497Sbill "addp4",0,
239*1497Sbill "addp6",0,
240*1497Sbill "adwc",0,
241*1497Sbill "ashp",0,
242*1497Sbill "bicpsw",0,
243*1497Sbill "bispsw",0,
244*1497Sbill "bpt",0,
245*1497Sbill "bsbb",0,
246*1497Sbill "bsbw",0,
247*1497Sbill "chme",0,
248*1497Sbill "chmk",0,
249*1497Sbill "chms",0,
250*1497Sbill "chmu",0,
251*1497Sbill "cmpc3",0,
252*1497Sbill "cmpc5",0,
253*1497Sbill "cmpp3",0,
254*1497Sbill "cmpp4",0,
255*1497Sbill "cmpv",0,
256*1497Sbill "cmpzv",0,
257*1497Sbill "crc",0,
258*1497Sbill "cvtlp",0,
259*1497Sbill "cvtpl",0,
260*1497Sbill "cvttp",0,
261*1497Sbill "cvtpt",0,
262*1497Sbill "cvtps",0,
263*1497Sbill "cvtsp",0,
264*1497Sbill "divp",0,
265*1497Sbill "editpc",0,
266*1497Sbill "ediv",0,
267*1497Sbill "emodd",0,
268*1497Sbill "emodf",0,
269*1497Sbill "emul",0,
270*1497Sbill "ffc",0,
271*1497Sbill "ffs",0,
272*1497Sbill "halt",0,
273*1497Sbill "index",0,
274*1497Sbill "insque",0,
275*1497Sbill "ldpctx",0,
276*1497Sbill "locc",0,
277*1497Sbill "matchc",0,
278*1497Sbill "movc5",0,
279*1497Sbill "movp",0,
280*1497Sbill "movpsl",0,
281*1497Sbill "movtc",0,
282*1497Sbill "movtuc",0,
283*1497Sbill "mulp",0,
284*1497Sbill "nop",0,
285*1497Sbill "polyd",0,
286*1497Sbill "polyf",0,
287*1497Sbill "popr",0,
288*1497Sbill "pushr",0,
289*1497Sbill "rei",0,
290*1497Sbill "remque",0,
291*1497Sbill "rotl",0,
292*1497Sbill "sbwc",0,
293*1497Sbill "scanc",0,
294*1497Sbill "skpc",0,
295*1497Sbill "spanc",0,
296*1497Sbill "subp4",0,
297*1497Sbill "subp6",0,
298*1497Sbill "svpctx",0,
299*1497Sbill "xfc",0,
300*1497Sbill "escd",0,
301*1497Sbill "esce",0,
302*1497Sbill "escf",0,
303*1497Sbill 	0,	0};
304