]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/5l/optab.c
merge
[plan9front.git] / sys / src / cmd / 5l / optab.c
1 #include        "l.h"
2
3 Optab   optab[] =
4 {
5         { ATEXT,        C_LEXT, C_NONE, C_LCON,          0, 0, 0 },
6         { ATEXT,        C_LEXT, C_REG,  C_LCON,          0, 0, 0 },
7         { ATEXT,        C_ADDR, C_NONE, C_LCON,          0, 0, 0 },
8         { ATEXT,        C_ADDR, C_REG,  C_LCON,          0, 0, 0 },
9
10         { AADD,         C_REG,  C_REG,  C_REG,           1, 4, 0 },
11         { AADD,         C_REG,  C_NONE, C_REG,           1, 4, 0 },
12         { AMOVW,        C_REG,  C_NONE, C_REG,           1, 4, 0 },
13         { AMVN,         C_REG,  C_NONE, C_REG,           1, 4, 0 },
14         { ACMP,         C_REG,  C_REG,  C_NONE,          1, 4, 0 },
15
16         { AADD,         C_RCON, C_REG,  C_REG,           2, 4, 0 },
17         { AADD,         C_RCON, C_NONE, C_REG,           2, 4, 0 },
18         { AMOVW,        C_RCON, C_NONE, C_REG,           2, 4, 0 },
19         { AMVN,         C_RCON, C_NONE, C_REG,           2, 4, 0 },
20         { ACMP,         C_RCON, C_REG,  C_NONE,          2, 4, 0 },
21
22         { AADD,         C_SHIFT,C_REG,  C_REG,           3, 4, 0 },
23         { AADD,         C_SHIFT,C_NONE, C_REG,           3, 4, 0 },
24         { AMVN,         C_SHIFT,C_NONE, C_REG,           3, 4, 0 },
25         { ACMP,         C_SHIFT,C_REG,  C_NONE,          3, 4, 0 },
26
27         { AMOVW,        C_RECON,C_NONE, C_REG,           4, 4, REGSB },
28         { AMOVW,        C_RACON,C_NONE, C_REG,           4, 4, REGSP },
29
30         { AB,           C_NONE, C_NONE, C_SBRA,          5, 4, 0,       LPOOL },
31         { ABL,          C_NONE, C_NONE, C_SBRA,          5, 4, 0 },
32         { ABEQ,         C_NONE, C_NONE, C_SBRA,          5, 4, 0 },
33
34         { AB,           C_NONE, C_NONE, C_ROREG,         6, 4, 0,       LPOOL },
35         { ABL,          C_NONE, C_NONE, C_ROREG,         7, 8, 0 },
36
37         { ASLL,         C_RCON, C_REG,  C_REG,           8, 4, 0 },
38         { ASLL,         C_RCON, C_NONE, C_REG,           8, 4, 0 },
39
40         { ASLL,         C_REG,  C_NONE, C_REG,           9, 4, 0 },
41         { ASLL,         C_REG,  C_REG,  C_REG,           9, 4, 0 },
42
43         { ASWI,         C_NONE, C_NONE, C_NONE,         10, 4, 0 },
44         { ASWI,         C_NONE, C_NONE, C_LOREG,        10, 4, 0 },
45
46         { AWORD,        C_NONE, C_NONE, C_LCON,         11, 4, 0 },
47         { AWORD,        C_NONE, C_NONE, C_LEXT,         11, 4, 0 },
48         { AWORD,        C_NONE, C_NONE, C_ADDR,         11, 4, 0 },
49
50         { AMOVW,        C_NCON, C_NONE, C_REG,          12, 4, 0 },
51         { AMOVW,        C_LCON, C_NONE, C_REG,          12, 4, 0,       LFROM },
52
53         { AADD,         C_NCON, C_REG,  C_REG,          13, 8, 0 },
54         { AADD,         C_NCON, C_NONE, C_REG,          13, 8, 0 },
55         { AMVN,         C_NCON, C_NONE, C_REG,          13, 8, 0 },
56         { ACMP,         C_NCON, C_REG,  C_NONE,         13, 8, 0 },
57         { AADD,         C_LCON, C_REG,  C_REG,          13, 8, 0,       LFROM },
58         { AADD,         C_LCON, C_NONE, C_REG,          13, 8, 0,       LFROM },
59         { AMVN,         C_LCON, C_NONE, C_REG,          13, 8, 0,       LFROM },
60         { ACMP,         C_LCON, C_REG,  C_NONE,         13, 8, 0,       LFROM },
61
62         { AMOVB,        C_REG,  C_NONE, C_REG,          14, 8, 0 },
63         { AMOVBU,       C_REG,  C_NONE, C_REG,          58, 4, 0 },
64         { AMOVH,        C_REG,  C_NONE, C_REG,          14, 8, 0 },
65         { AMOVHU,       C_REG,  C_NONE, C_REG,          14, 8, 0 },
66
67         { AMUL,         C_REG,  C_REG,  C_REG,          15, 4, 0 },
68         { AMUL,         C_REG,  C_NONE, C_REG,          15, 4, 0 },
69
70         { ADIV,         C_REG,  C_REG,  C_REG,          16, 4, 0 },
71         { ADIV,         C_REG,  C_NONE, C_REG,          16, 4, 0 },
72
73         { AMULL,        C_REG,  C_REG,  C_REGREG,       17, 4, 0 },
74
75         { AMOVW,        C_REG,  C_NONE, C_SEXT,         20, 4, REGSB },
76         { AMOVW,        C_REG,  C_NONE, C_SAUTO,        20, 4, REGSP },
77         { AMOVW,        C_REG,  C_NONE, C_SOREG,        20, 4, 0 },
78         { AMOVB,        C_REG,  C_NONE, C_SEXT,         20, 4, REGSB },
79         { AMOVB,        C_REG,  C_NONE, C_SAUTO,        20, 4, REGSP },
80         { AMOVB,        C_REG,  C_NONE, C_SOREG,        20, 4, 0 },
81         { AMOVBU,       C_REG,  C_NONE, C_SEXT,         20, 4, REGSB },
82         { AMOVBU,       C_REG,  C_NONE, C_SAUTO,        20, 4, REGSP },
83         { AMOVBU,       C_REG,  C_NONE, C_SOREG,        20, 4, 0 },
84
85         { AMOVW,        C_SEXT, C_NONE, C_REG,          21, 4, REGSB },
86         { AMOVW,        C_SAUTO,C_NONE, C_REG,          21, 4, REGSP },
87         { AMOVW,        C_SOREG,C_NONE, C_REG,          21, 4, 0 },
88         { AMOVBU,       C_SEXT, C_NONE, C_REG,          21, 4, REGSB },
89         { AMOVBU,       C_SAUTO,C_NONE, C_REG,          21, 4, REGSP },
90         { AMOVBU,       C_SOREG,C_NONE, C_REG,          21, 4, 0 },
91
92         { AMOVB,        C_SEXT, C_NONE, C_REG,          22, 12, REGSB },
93         { AMOVB,        C_SAUTO,C_NONE, C_REG,          22, 12, REGSP },
94         { AMOVB,        C_SOREG,C_NONE, C_REG,          22, 12, 0 },
95         { AMOVH,        C_SEXT, C_NONE, C_REG,          22, 12, REGSB },
96         { AMOVH,        C_SAUTO,C_NONE, C_REG,          22, 12, REGSP },
97         { AMOVH,        C_SOREG,C_NONE, C_REG,          22, 12, 0 },
98         { AMOVHU,       C_SEXT, C_NONE, C_REG,          22, 12, REGSB },
99         { AMOVHU,       C_SAUTO,C_NONE, C_REG,          22, 12, REGSP },
100         { AMOVHU,       C_SOREG,C_NONE, C_REG,          22, 12, 0 },
101
102         { AMOVH,        C_REG,  C_NONE, C_SEXT,         23, 12, REGSB },
103         { AMOVH,        C_REG,  C_NONE, C_SAUTO,        23, 12, REGSP },
104         { AMOVH,        C_REG,  C_NONE, C_SOREG,        23, 12, 0 },
105         { AMOVHU,       C_REG,  C_NONE, C_SEXT,         23, 12, REGSB },
106         { AMOVHU,       C_REG,  C_NONE, C_SAUTO,        23, 12, REGSP },
107         { AMOVHU,       C_REG,  C_NONE, C_SOREG,        23, 12, 0 },
108
109         { AMOVW,        C_REG,  C_NONE, C_LEXT,         30, 8, REGSB,   LTO },
110         { AMOVW,        C_REG,  C_NONE, C_LAUTO,        30, 8, REGSP,   LTO },
111         { AMOVW,        C_REG,  C_NONE, C_LOREG,        30, 8, 0,       LTO },
112         { AMOVW,        C_REG,  C_NONE, C_ADDR,         64, 8, 0,       LTO },
113         { AMOVB,        C_REG,  C_NONE, C_LEXT,         30, 8, REGSB,   LTO },
114         { AMOVB,        C_REG,  C_NONE, C_LAUTO,        30, 8, REGSP,   LTO },
115         { AMOVB,        C_REG,  C_NONE, C_LOREG,        30, 8, 0,       LTO },
116         { AMOVB,        C_REG,  C_NONE, C_ADDR,         64, 8, 0,       LTO },
117         { AMOVBU,       C_REG,  C_NONE, C_LEXT,         30, 8, REGSB,   LTO },
118         { AMOVBU,       C_REG,  C_NONE, C_LAUTO,        30, 8, REGSP,   LTO },
119         { AMOVBU,       C_REG,  C_NONE, C_LOREG,        30, 8, 0,       LTO },
120         { AMOVBU,       C_REG,  C_NONE, C_ADDR,         64, 8, 0,       LTO },
121
122         { AMOVW,        C_LEXT, C_NONE, C_REG,          31, 8, REGSB,   LFROM },
123         { AMOVW,        C_LAUTO,C_NONE, C_REG,          31, 8, REGSP,   LFROM },
124         { AMOVW,        C_LOREG,C_NONE, C_REG,          31, 8, 0,       LFROM },
125         { AMOVW,        C_ADDR, C_NONE, C_REG,          65, 8, 0,       LFROM },
126         { AMOVBU,       C_LEXT, C_NONE, C_REG,          31, 8, REGSB,   LFROM },
127         { AMOVBU,       C_LAUTO,C_NONE, C_REG,          31, 8, REGSP,   LFROM },
128         { AMOVBU,       C_LOREG,C_NONE, C_REG,          31, 8, 0,       LFROM },
129         { AMOVBU,       C_ADDR, C_NONE, C_REG,          65, 8, 0,       LFROM },
130
131         { AMOVB,        C_LEXT, C_NONE, C_REG,          32, 16, REGSB,  LFROM },
132         { AMOVB,        C_LAUTO,C_NONE, C_REG,          32, 16, REGSP,  LFROM },
133         { AMOVB,        C_LOREG,C_NONE, C_REG,          32, 16, 0,      LFROM },
134         { AMOVB,        C_ADDR, C_NONE, C_REG,          66, 16, 0,      LFROM },
135         { AMOVH,        C_LEXT, C_NONE, C_REG,          32, 16, REGSB,  LFROM },
136         { AMOVH,        C_LAUTO,C_NONE, C_REG,          32, 16, REGSP,  LFROM },
137         { AMOVH,        C_LOREG,C_NONE, C_REG,          32, 16, 0,      LFROM },
138         { AMOVH,        C_ADDR, C_NONE, C_REG,          66, 16, 0,      LFROM },
139         { AMOVHU,       C_LEXT, C_NONE, C_REG,          32, 16, REGSB,  LFROM },
140         { AMOVHU,       C_LAUTO,C_NONE, C_REG,          32, 16, REGSP,  LFROM },
141         { AMOVHU,       C_LOREG,C_NONE, C_REG,          32, 16, 0,      LFROM },
142         { AMOVHU,       C_ADDR, C_NONE, C_REG,          66, 16, 0,      LFROM },
143
144         { AMOVH,        C_REG,  C_NONE, C_LEXT,         33, 24, REGSB,  LTO },
145         { AMOVH,        C_REG,  C_NONE, C_LAUTO,        33, 24, REGSP,  LTO },
146         { AMOVH,        C_REG,  C_NONE, C_LOREG,        33, 24, 0,      LTO },
147         { AMOVH,        C_REG,  C_NONE, C_ADDR,         67, 24, 0,      LTO },
148         { AMOVHU,       C_REG,  C_NONE, C_LEXT,         33, 24, REGSB,  LTO },
149         { AMOVHU,       C_REG,  C_NONE, C_LAUTO,        33, 24, REGSP,  LTO },
150         { AMOVHU,       C_REG,  C_NONE, C_LOREG,        33, 24, 0,      LTO },
151         { AMOVHU,       C_REG,  C_NONE, C_ADDR,         67, 24, 0,      LTO },
152
153         { AMOVW,        C_LECON,C_NONE, C_REG,          34, 8, REGSB,   LFROM },
154         { AMOVW,        C_LACON,C_NONE, C_REG,          34, 8, REGSP,   LFROM },
155
156         { AMOVW,        C_PSR,  C_NONE, C_REG,          35, 4, 0 },
157         { AMOVW,        C_REG,  C_NONE, C_PSR,          36, 4, 0 },
158         { AMOVW,        C_RCON, C_NONE, C_PSR,          37, 4, 0 },
159
160         { AMOVM,        C_LCON, C_NONE, C_SOREG,        38, 4, 0 },
161         { AMOVM,        C_SOREG,C_NONE, C_LCON,         39, 4, 0 },
162
163         { ASWPW,        C_SOREG,C_REG,  C_REG,          40, 4, 0 },
164         { ALDREX,       C_SOREG,C_NONE, C_REG,          40, 4, 0 },
165         { ASTREX,       C_SOREG,C_REG,  C_REG,          40, 4, 0 },
166
167         { ARFE,         C_NONE, C_NONE, C_NONE,         41, 4, 0 },
168         { ACLREX,       C_NONE, C_NONE, C_NONE,         42, 4, 0 },
169
170         { AMOVF,        C_FREG, C_NONE, C_FEXT,         50, 4, REGSB },
171         { AMOVF,        C_FREG, C_NONE, C_FAUTO,        50, 4, REGSP },
172         { AMOVF,        C_FREG, C_NONE, C_FOREG,        50, 4, 0 },
173
174         { AMOVF,        C_FEXT, C_NONE, C_FREG,         51, 4, REGSB },
175         { AMOVF,        C_FAUTO,C_NONE, C_FREG,         51, 4, REGSP },
176         { AMOVF,        C_FOREG,C_NONE, C_FREG,         51, 4, 0 },
177
178         { AMOVF,        C_FREG, C_NONE, C_LEXT,         52, 12, REGSB,  LTO },
179         { AMOVF,        C_FREG, C_NONE, C_LAUTO,        52, 12, REGSP,  LTO },
180         { AMOVF,        C_FREG, C_NONE, C_LOREG,        52, 12, 0,      LTO },
181
182         { AMOVF,        C_LEXT, C_NONE, C_FREG,         53, 12, REGSB,  LFROM },
183         { AMOVF,        C_LAUTO,C_NONE, C_FREG,         53, 12, REGSP,  LFROM },
184         { AMOVF,        C_LOREG,C_NONE, C_FREG,         53, 12, 0,      LFROM },
185
186         { AMOVF,        C_FREG, C_NONE, C_ADDR,         68, 8, 0,       LTO },
187         { AMOVF,        C_ADDR, C_NONE, C_FREG,         69, 8, 0,       LFROM },
188
189         { AADDF,        C_FREG, C_NONE, C_FREG,         54, 4, 0 },
190         { AADDF,        C_FREG, C_REG,  C_FREG,         54, 4, 0 },
191         { AADDF,        C_FCON, C_NONE, C_FREG,         54, 4, 0 },
192         { AADDF,        C_FCON, C_REG,  C_FREG,         54, 4, 0 },
193         { AMOVF,        C_FCON, C_NONE, C_FREG,         54, 4, 0 },
194         { AMOVF,        C_FREG, C_NONE, C_FREG,         54, 4, 0 },
195
196         { ACMPF,        C_FREG, C_REG,  C_NONE,         54, 4, 0 },
197         { ACMPF,        C_FCON, C_REG,  C_NONE,         54, 4, 0 },
198
199         { AMOVFW,       C_FREG, C_NONE, C_REG,          55, 4, 0 },
200         { AMOVFW,       C_REG,  C_NONE, C_FREG,         55, 4, 0 },
201
202         { AMOVW,        C_REG,  C_NONE, C_FCR,          56, 4, 0 },
203         { AMOVW,        C_FCR,  C_NONE, C_REG,          57, 4, 0 },
204
205         { AMOVW,        C_SHIFT,C_NONE, C_REG,          59, 4, 0 },
206         { AMOVBU,       C_SHIFT,C_NONE, C_REG,          59, 4, 0 },
207
208         { AMOVB,        C_SHIFT,C_NONE, C_REG,          60, 4, 0 },
209
210         { AMOVW,        C_REG,  C_NONE, C_SHIFT,        61, 4, 0 },
211         { AMOVB,        C_REG,  C_NONE, C_SHIFT,        61, 4, 0 },
212         { AMOVBU,       C_REG,  C_NONE, C_SHIFT,        61, 4, 0 },
213
214         { ACASE,        C_REG,  C_NONE, C_NONE,         62, 4, 0 },
215         { ABCASE,       C_NONE, C_NONE, C_SBRA,         63, 4, 0 },
216
217         { AADDF,        C_FREG, C_NONE, C_FREG,         74, 4, 0, VFP },
218         { AADDF,        C_FREG, C_REG,  C_FREG,         74, 4, 0, VFP },
219         { AMOVF,        C_FREG, C_NONE, C_FREG,         74, 4, 0, VFP },
220         { ACMPF,        C_FREG, C_REG,  C_NONE,         75, 8, 0, VFP },
221         { ACMPF,        C_FCON, C_REG,  C_NONE,         75, 8, 0, VFP },
222         { AMOVFW,       C_FREG, C_NONE, C_REG,          76, 8, 0, VFP },
223         { AMOVFW,       C_REG,  C_NONE, C_FREG,         76, 8, 0, VFP },
224
225         { AMOVH,        C_REG,  C_NONE, C_HEXT,         70, 4, REGSB,   V4 },
226         { AMOVH,        C_REG,  C_NONE, C_HAUTO,        70, 4, REGSP,   V4 },
227         { AMOVH,        C_REG,  C_NONE, C_HOREG,        70, 4, 0,       V4 },
228         { AMOVHU,       C_REG,  C_NONE, C_HEXT,         70, 4, REGSB,   V4 },
229         { AMOVHU,       C_REG,  C_NONE, C_HAUTO,        70, 4, REGSP,   V4 },
230         { AMOVHU,       C_REG,  C_NONE, C_HOREG,        70, 4, 0,       V4 },
231
232         { AMOVB,        C_HEXT, C_NONE, C_REG,          71, 4, REGSB,   V4 },
233         { AMOVB,        C_HAUTO,C_NONE, C_REG,          71, 4, REGSP,   V4 },
234         { AMOVB,        C_HOREG,C_NONE, C_REG,          71, 4, 0,       V4 },
235         { AMOVH,        C_HEXT, C_NONE, C_REG,          71, 4, REGSB,   V4 },
236         { AMOVH,        C_HAUTO,C_NONE, C_REG,          71, 4, REGSP,   V4 },
237         { AMOVH,        C_HOREG,C_NONE, C_REG,          71, 4, 0,       V4 },
238         { AMOVHU,       C_HEXT, C_NONE, C_REG,          71, 4, REGSB,   V4 },
239         { AMOVHU,       C_HAUTO,C_NONE, C_REG,          71, 4, REGSP,   V4 },
240         { AMOVHU,       C_HOREG,C_NONE, C_REG,          71, 4, 0,       V4 },
241
242         { AMOVH,        C_REG,  C_NONE, C_LEXT,         72, 8, REGSB,   LTO|V4 },
243         { AMOVH,        C_REG,  C_NONE, C_LAUTO,        72, 8, REGSP,   LTO|V4 },
244         { AMOVH,        C_REG,  C_NONE, C_LOREG,        72, 8, 0,       LTO|V4 },
245         { AMOVHU,       C_REG,  C_NONE, C_LEXT,         72, 8, REGSB,   LTO|V4 },
246         { AMOVHU,       C_REG,  C_NONE, C_LAUTO,        72, 8, REGSP,   LTO|V4 },
247         { AMOVHU,       C_REG,  C_NONE, C_LOREG,        72, 8, 0,       LTO|V4 },
248
249         { AMOVB,        C_LEXT, C_NONE, C_REG,          73, 8, REGSB,   LFROM|V4 },
250         { AMOVB,        C_LAUTO,C_NONE, C_REG,          73, 8, REGSP,   LFROM|V4 },
251         { AMOVB,        C_LOREG,C_NONE, C_REG,          73, 8, 0,       LFROM|V4 },
252         { AMOVH,        C_LEXT, C_NONE, C_REG,          73, 8, REGSB,   LFROM|V4 },
253         { AMOVH,        C_LAUTO,C_NONE, C_REG,          73, 8, REGSP,   LFROM|V4 },
254         { AMOVH,        C_LOREG,C_NONE, C_REG,          73, 8, 0,       LFROM|V4 },
255         { AMOVHU,       C_LEXT, C_NONE, C_REG,          73, 8, REGSB,   LFROM|V4 },
256         { AMOVHU,       C_LAUTO,C_NONE, C_REG,          73, 8, REGSP,   LFROM|V4 },
257         { AMOVHU,       C_LOREG,C_NONE, C_REG,          73, 8, 0,       LFROM|V4 },
258
259         { AXXX,         C_NONE, C_NONE, C_NONE,          0, 4, 0 },
260 };