xref: /plan9/sys/src/cmd/6l/optab.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include	"l.h"
2 
3 uchar	ynone[] =
4 {
5 	Ynone,	Ynone,	Ynone,	Znone,	1,
6 	0
7 };
8 uchar	ytext[] =
9 {
10 	Ym,	Ynone,	Yi32,	Zpseudo,0,
11 	0
12 };
13 uchar	ypseudo[] =
14 {
15 	Ynone,	Ynone,	Ynone,	Zpseudo,0,
16 	Ynone,	Ynone,	Yr,	Zpseudo,0,
17 	0
18 };
19 uchar	ynop[] =
20 {
21 	Ynone,	Ynone,	Ynone,	Zpseudo,1,
22 	Ynone,	Ynone,	Yr,	Zpseudo,1,
23 	0
24 };
25 uchar	yadd[] =
26 {
27 	Yri5,	Ynri5,	Yr,	Zrrr,	0,
28 	Yi32,	Ynri5,	Yr,	Zirr,	1,
29 	0
30 };
31 uchar	ycmp[] =
32 {
33 	Yri5,	Ynone,	Yri5,	Zrrx,	0,
34 	Yi32,	Ynone,	Yr,	Zirx,	1,
35 	0
36 };
37 uchar	ymova[] =
38 {
39 	Ym,	Ynone,	Yr,	Zmr,	1,
40 	0
41 };
42 uchar	ymov[] =
43 {
44 	Yri5,	Ynone,	Yr,	Zrxr,	0,
45 	Yi32,	Ynone,	Yr,	Zir,	1,
46 	Ym,	Ynone,	Yr,	Zmr,	1,
47 	Yi32,	Ynone,	Ym,	Zim,	0,
48 	Yr,	Ynone,	Ym,	Zrm,	1,
49 	0
50 };
51 uchar	ybcond[] =
52 {
53 	Ynone,	Ynone,	Ybr,	Zbr,	1,
54 	0
55 };
56 uchar	ycall[] =
57 {
58 	Ynone,	Ynone,	Ybr,	Zbr,	1,
59 	Ynone,	Ynone,	Ym,	Zmbr,	1,
60 	0
61 };
62 uchar	ylong[] =
63 {
64 	Yi32,	Ynone,	Ynone,	Zlong,	1,
65 	0
66 };
67 uchar	ysysctl[] =
68 {
69 	Yr,	Yr,	Yr,	Zrrr,	1,
70 	0
71 };
72 
73 Optab optab[] =
74 /*	as, ytab, andproto, opcode */
75 {
76 	{ AXXX },
77 	{ AADJSP },
78 	{ ABYTE },
79 	{ ADATA },
80 	{ AGLOBL },
81 	{ AGOK },
82 	{ AHISTORY },
83 	{ ALONG,	ylong },
84 	{ ANAME },
85 	{ ANOP,		ypseudo },
86 	{ ARTS },
87 	{ ATEXT,	ytext },
88 	{ ASYSCALL },
89 	{ ASYSCTL,	ysysctl, 0x659 },
90 	{ AMOV,		ymov, 0x5cc, 0x90, 0x92 },
91 	{ AMOVA,	ymova, 0x8c },
92 	{ AMOVIB,	ymov, 0x5cc, 0xc0, 0x82 },
93 	{ AMOVIS,	ymov, 0x5cc, 0xc8, 0x8a },
94 	{ AMOVOB,	ymov, 0x5cc, 0x80, 0x82 },
95 	{ AMOVOS,	ymov, 0x5cc, 0x88, 0x8a },
96 	{ AMOVQ,	ymov, 0x5fc, 0xb0, 0xb2 },
97 	{ AMOVT,	ymov, 0x5ec, 0xa0, 0xa2 },
98 	{ AMOVV },
99 	{ ASYNMOV },
100 	{ ASYNMOVV },
101 	{ ASYNMOVQ },
102 	{ AADDC,	yadd, 0x5b0 },
103 	{ AADDI,	yadd, 0x591 },
104 	{ AADDO,	yadd, 0x590 },
105 	{ AALTERBIT },
106 	{ AAND,		yadd, 0x581 },
107 	{ AANDNOT,	yadd, 0x582 },
108 	{ AATADD },
109 	{ AATMOD },
110 	{ ABAL,		ycall, 0x0b, 0x85 },
111 	{ AB,		ycall, 0x08, 0x84 },
112 	{ ABBC },
113 	{ ABBS },
114 	{ ABE,		ybcond, 0x12 },
115 	{ ABNE,		ybcond, 0x15 },
116 	{ ABL,		ybcond, 0x14 },
117 	{ ABLE,		ybcond, 0x16 },
118 	{ ABG,		ybcond, 0x11 },
119 	{ ABGE,		ybcond, 0x13 },
120 	{ ABO,		ybcond, 0x17 },
121 	{ ABNO,		ybcond, 0x10 },
122 	{ ACALL },
123 	{ ACALLS },
124 	{ ACHKBIT },
125 	{ ACLRBIT },
126 	{ ACMPI,	ycmp, 0x5a1 },
127 	{ ACMPO,	ycmp, 0x5a0 },
128 	{ ACMPDECI },
129 	{ ACMPDECO },
130 	{ ACMPINCI },
131 	{ ACMPINCO },
132 	{ ACMPIBE },
133 	{ ACMPIBNE },
134 	{ ACMPIBL },
135 	{ ACMPIBLE },
136 	{ ACMPIBG },
137 	{ ACMPIBGE },
138 	{ ACMPIBO },
139 	{ ACMPIBNO },
140 	{ ACMPOBE },
141 	{ ACMPOBNE },
142 	{ ACMPOBL },
143 	{ ACMPOBLE },
144 	{ ACMPOBG },
145 	{ ACMPOBGE },
146 	{ ACONCMPI },
147 	{ ACONCMPO },
148 	{ ADADDC },
149 	{ ADIVI,	yadd, 0x74b },
150 	{ ADIVO,	yadd, 0x70b },
151 	{ ADMOVT },
152 	{ ADSUBC },
153 	{ AEDIV },
154 	{ AEMUL },
155 	{ AEXTRACT },
156 	{ AFAULTE,	ynone, 0x1a0 },
157 	{ AFAULTNE,	ynone, 0x1d0 },
158 	{ AFAULTL,	ynone, 0x1c0 },
159 	{ AFAULTLE,	ynone, 0x1e0 },
160 	{ AFAULTG,	ynone, 0x190 },
161 	{ AFAULTGE,	ynone, 0x1b0 },
162 	{ AFAULTO,	ynone, 0x1f0 },
163 	{ AFAULTNO,	ynone, 0x180 },
164 	{ AFLUSHREG },
165 	{ AFMARK,	ynone, 0x66c },
166 	{ AMARK },
167 	{ AMODAC },
168 	{ AMODI },
169 	{ AMODIFY },
170 	{ AMODPC,	ysysctl, 0x655 },
171 	{ AMODTC },
172 	{ AMULI,	yadd, 0x741 },
173 	{ AMULO,	yadd, 0x701 },
174 	{ ANAND,	yadd, 0x58e },
175 	{ ANOR,		yadd, 0x588 },
176 	{ ANOT },
177 	{ ANOTAND,	yadd, 0x584 },
178 	{ ANOTBIT },
179 	{ ANOTOR,	yadd, 0x58d },
180 	{ AOR,		yadd, 0x587 },
181 	{ AORNOT,	yadd, 0x58b },
182 	{ AREMI,	yadd, 0x748 },
183 	{ AREMO,	yadd, 0x708 },
184 	{ ARET },
185 	{ AROTATE,	yadd, 0x59d },
186 	{ ASCANBIT },
187 	{ ASCANBYTE },
188 	{ ASETBIT },
189 	{ ASHLO,	yadd, 0x59c },
190 	{ ASHRO,	yadd, 0x598 },
191 	{ ASHLI,	yadd, 0x59e },
192 	{ ASHRI,	yadd, 0x59b },
193 	{ ASHRDI,	yadd, 0x59a },
194 	{ ASPANBIT },
195 	{ ASUBC,	yadd, 0x5b2 },
196 	{ ASUBI,	yadd, 0x593 },
197 	{ ASUBO,	yadd, 0x592 },
198 	{ ASYNCF },
199 	{ ATESTE },
200 	{ ATESTNE },
201 	{ ATESTL },
202 	{ ATESTLE },
203 	{ ATESTG },
204 	{ ATESTGE },
205 	{ ATESTO },
206 	{ ATESTNO },
207 	{ AXNOR,	yadd, 0x589 },
208 	{ AXOR,		yadd, 0x586 },
209 	{ AEND },
210 	0,
211 };
212