Disable LLVM for gsharedvt methods.
[mono.git] / mono / mini / cpu-ia64.md
1 # ia64 cpu description file
2 #
3 # The instruction lengths are very conservative, it doesn't matter on ia64
4 # since there are no short branches.
5 #
6
7 label: len:0
8 break: len:48
9 jmp: len:128
10 br: len:48
11 throw: src1:i len:96
12 rethrow: src1:i len:48
13 ckfinite: dest:f src1:f len:48
14 ceq: dest:c len:48
15 cgt: dest:c len:48
16 cgt.un: dest:c len:48
17 clt: dest:c len:48
18 clt.un: dest:c len:48
19 localloc: dest:i src1:i len:92
20 compare: src1:i src2:i len:48
21 lcompare: src1:i src2:i len:48
22 icompare: src1:i src2:i len:48
23 compare_imm: src1:i len:48
24 icompare_imm: src1:i len:48
25 fcompare: src1:f src2:f clob:a len:48
26 oparglist: src1:b len:48
27 setlret: dest:r src1:i src2:i len:48
28 checkthis: src1:b len:48
29 call: dest:r clob:c len:80
30 voidcall: clob:c len:80
31 voidcall_reg: src1:i clob:c len:80
32 voidcall_membase: src1:b clob:c len:80
33 fcall: dest:g len:80 clob:c
34 fcall_reg: dest:g src1:i len:80 clob:c
35 fcall_membase: dest:g src1:b len:80 clob:c
36 lcall: dest:r len:80 clob:c
37 lcall_reg: dest:r src1:i len:80 clob:c
38 lcall_membase: dest:r src1:b len:80 clob:c
39 vcall: len:80 clob:c
40 vcall_reg: src1:i len:80 clob:c
41 vcall_membase: src1:b len:80 clob:c
42 call_reg: dest:r src1:i len:80 clob:c
43 call_membase: dest:r src1:b len:80 clob:c
44 iconst: dest:i len:48
45 i8const: dest:i len:48
46 r4const: dest:f len:48
47 r8const: dest:f len:48
48 store_membase_imm: dest:b len:48
49 store_membase_reg: dest:b src1:i len:48
50 storei8_membase_reg: dest:b src1:i len:48
51 storei1_membase_imm: dest:b len:48
52 storei1_membase_reg: dest:b src1:c len:48
53 storei2_membase_imm: dest:b len:48
54 storei2_membase_reg: dest:b src1:i len:48
55 storei4_membase_imm: dest:b len:48
56 storei4_membase_reg: dest:b src1:i len:48
57 storei8_membase_imm: dest:b len:48
58 storer4_membase_reg: dest:b src1:f len:48
59 storer8_membase_reg: dest:b src1:f len:48
60 load_membase: dest:i src1:b len:48
61 loadi1_membase: dest:c src1:b len:48
62 loadu1_membase: dest:c src1:b len:48
63 loadi2_membase: dest:i src1:b len:48
64 loadu2_membase: dest:i src1:b len:48
65 loadi4_membase: dest:i src1:b len:48
66 loadu4_membase: dest:i src1:b len:48
67 loadi8_membase: dest:i src1:b len:48
68 loadr4_membase: dest:f src1:b len:48
69 loadr8_membase: dest:f src1:b len:48
70 loadu4_mem: dest:i len:48
71 move: dest:i src1:i len:48
72 add_imm: dest:i src1:i len:48
73 sub_imm: dest:i src1:i len:48
74 mul_imm: dest:i src1:i len:48
75 # there is no actual support for division or reminder by immediate
76 # we simulate them, though (but we need to change the burg rules 
77 # to allocate a symbolic reg for src2)
78 div_imm: dest:a src1:i src2:i len:48 clob:d
79 div_un_imm: dest:a src1:i src2:i len:48 clob:d
80 rem_imm: dest:d src1:i src2:i len:48 clob:a
81 rem_un_imm: dest:d src1:i src2:i len:48 clob:a
82 and_imm: dest:i src1:i len:48
83 or_imm: dest:i src1:i len:48
84 xor_imm: dest:i src1:i len:48
85 shl_imm: dest:i src1:i len:48
86 shr_imm: dest:i src1:i len:48
87 shr_un_imm: dest:i src1:i len:48
88 cond_exc_eq: len:48
89 cond_exc_ne_un: len:48
90 cond_exc_lt: len:48
91 cond_exc_lt_un: len:48
92 cond_exc_gt: len:48
93 cond_exc_gt_un: len:48
94 cond_exc_ge: len:48
95 cond_exc_ge_un: len:48
96 cond_exc_le: len:48
97 cond_exc_le_un: len:48
98 cond_exc_ov: len:48
99 cond_exc_no: len:48
100 cond_exc_c: len:48
101 cond_exc_nc: len:48
102 cond_exc_iov: len:48
103 cond_exc_ic: len:48
104 float_beq: len:48
105 float_bne_un: len:48
106 float_blt: len:48
107 float_blt_un: len:48
108 float_bgt: len:48
109 float_bgt_un: len:48
110 float_bge: len:48
111 float_bge_un: len:48
112 float_ble: len:48
113 float_ble_un: len:48
114 float_add: dest:f src1:f src2:f len:48
115 float_sub: dest:f src1:f src2:f len:48
116 float_mul: dest:f src1:f src2:f len:48
117 float_div: dest:f src1:f src2:f len:48
118 float_div_un: dest:f src1:f src2:f len:48
119 float_rem: dest:f src1:f src2:f len:48
120 float_rem_un: dest:f src1:f src2:f len:48
121 float_neg: dest:f src1:f len:48
122 float_not: dest:f src1:f len:48
123 float_conv_to_i1: dest:i src1:f len:112
124 float_conv_to_i2: dest:i src1:f len:112
125 float_conv_to_i4: dest:i src1:f len:112
126 float_conv_to_i8: dest:i src1:f len:112
127 float_conv_to_r4: dest:f src1:f len:112
128 float_conv_to_r8: dest:f src1:f len:112
129 float_conv_to_u4: dest:i src1:f len:112
130 float_conv_to_u8: dest:i src1:f len:112
131 float_conv_to_u2: dest:i src1:f len:112
132 float_conv_to_u1: dest:i src1:f len:112
133 float_conv_to_i: dest:i src1:f len:112
134 float_conv_to_ovf_i: dest:a src1:f len:112
135 float_conv_to_ovd_u: dest:a src1:f len:112
136 float_mul_ovf: 
137 float_ceq: dest:i src1:f src2:f len:48
138 float_cgt: dest:i src1:f src2:f len:48
139 float_cgt_un: dest:i src1:f src2:f len:48
140 float_clt: dest:i src1:f src2:f len:48
141 float_clt_un: dest:i src1:f src2:f len:48
142 float_ceq_membase: dest:i src1:f src2:b len:48
143 float_cgt_membase: dest:i src1:f src2:b len:48
144 float_cgt_un_membase: dest:i src1:f src2:b len:48
145 float_clt_membase: dest:i src1:f src2:b len:48
146 float_clt_un_membase: dest:i src1:f src2:b len:48
147 float_conv_to_u: dest:i src1:f len:48
148 fmove: dest:f src1:f len:48
149 call_handler: len:96 clob:c
150 start_handler: len:96
151 endfilter: len:96
152 endfinally: len:96
153 aot_const: dest:i len:48
154 tls_get: dest:i len:48
155 atomic_add_i4: src1:b src2:i dest:i len:48
156 atomic_add_new_i4: src1:b src2:i dest:i len:48
157 atomic_exchange_i4: src1:b src2:i dest:i len:48
158 atomic_add_i8: src1:b src2:i dest:i len:48
159 atomic_add_new_i8: src1:b src2:i dest:i len:48
160 atomic_add_imm_new_i4: src1:b dest:i len:48
161 atomic_add_imm_new_i8: src1:b dest:i len:48
162 atomic_exchange_i8: src1:b src2:i dest:i len:48
163 memory_barrier: len:48
164 adc: dest:i src1:i src2:i len:48
165 addcc: dest:i src1:i src2:i len:48
166 subcc: dest:i src1:i src2:i len:48
167 adc_imm: dest:i src1:i len:48
168 sbb: dest:i src1:i src2:i len:48
169 sbb_imm: dest:i src1:i len:48
170 br_reg: src1:i len:48
171 sin: dest:f src1:f len:48
172 cos: dest:f src1:f len:48
173 abs: dest:f src1:f len:48
174 tan: dest:f src1:f len:48
175 atan: dest:f src1:f len:48
176 sqrt: dest:f src1:f len:48
177 bigmul: len:48 dest:i src1:a src2:i
178 bigmul_un: len:48 dest:i src1:a src2:i
179 sext_i1: dest:i src1:i len:48
180 sext_i2: dest:i src1:i len:48
181 sext_i4: dest:i src1:i len:48
182 zext_i1: dest:i src1:i len:48
183 zext_i2: dest:i src1:i len:48
184 zext_i4: dest:i src1:i len:48
185
186 # 32 bit opcodes
187 int_add: dest:i src1:i src2:i len:48
188 int_sub: dest:i src1:i src2:i len:48
189 int_mul: dest:i src1:i src2:i len:48
190 int_mul_ovf: dest:i src1:i src2:i len:48
191 int_mul_ovf_un: dest:i src1:i src2:i len:48
192 int_div: dest:a src1:a src2:i clob:d len:48
193 int_div_un: dest:a src1:a src2:i clob:d len:48
194 int_rem: dest:d src1:a src2:i clob:a len:48
195 int_rem_un: dest:d src1:a src2:i clob:a len:48
196 int_and: dest:i src1:i src2:i len:48
197 int_or: dest:i src1:i src2:i len:48
198 int_xor: dest:i src1:i src2:i len:48
199 int_shl: dest:i src1:i src2:s len:48
200 int_shr: dest:i src1:i src2:s len:48
201 int_shr_un: dest:i src1:i src2:s len:48
202 int_adc: dest:i src1:i src2:i len:48
203 int_adc_imm: dest:i src1:i len:48
204 int_sbb: dest:i src1:i src2:i len:48
205 int_sbb_imm: dest:i src1:i len:48
206 int_addcc: dest:i src1:i src2:i len:96
207 int_subcc: dest:i src1:i src2:i len:96
208 int_add_imm: dest:i src1:i len:48
209 int_sub_imm: dest:i src1:i len:48
210 int_mul_imm: dest:i src1:i len:48
211 int_div_imm: dest:a src1:i clob:d len:48
212 int_div_un_imm: dest:a src1:i clob:d len:48
213 int_rem_imm: dest:d src1:i clob:a len:48
214 int_rem_un_imm: dest:d src1:i clob:a len:48
215 int_and_imm: dest:i src1:i len:48
216 int_or_imm: dest:i src1:i len:48
217 int_xor_imm: dest:i src1:i len:48
218 int_shl_imm: dest:i src1:i len:48
219 int_shr_imm: dest:i src1:i len:48
220 int_shr_un_imm: dest:i src1:i len:48
221 int_neg: dest:i src1:i len:48
222 int_not: dest:i src1:i len:48
223 int_ceq: dest:c len:48
224 int_cgt: dest:c len:48
225 int_cgt_un: dest:c len:48
226 int_clt: dest:c len:48
227 int_clt_un: dest:c len:48
228 int_beq: len:48
229 int_bne_un: len:48
230 int_blt: len:48
231 int_blt_un: len:48
232 int_bgt: len:48
233 int_bgt_un: len:48
234 int_bge: len:48
235 int_bge_un: len:48
236 int_ble: len:48
237 int_ble_un: len:48
238 int_conv_to_r4: dest:f src1:i len:112
239 int_conv_to_r8: dest:f src1:i len:112
240
241 # 64 bit opcodes
242 long_add: dest:i src1:i src2:i len:48
243 long_sub: dest:i src1:i src2:i len:48
244 long_mul: dest:i src1:i src2:i len:48
245 long_div: dest:a src1:a src2:i len:48 clob:d
246 long_div_un: dest:a src1:a src2:i len:48 clob:d
247 long_rem: dest:d src1:a src2:i len:48 clob:a
248 long_rem_un: dest:d src1:a src2:i len:48 clob:a
249 long_and: dest:i src1:i src2:i len:48
250 long_or: dest:i src1:i src2:i len:48
251 long_xor: dest:i src1:i src2:i len:48
252 long_shl: dest:i src1:i src2:s len:48
253 long_shr: dest:i src1:i src2:s len:48
254 long_shr_un: dest:i src1:i src2:s len:48
255 long_neg: dest:i src1:i len:48
256 long_not: dest:i src1:i len:48
257 long_conv_to_i1: dest:i src1:i len:48
258 long_conv_to_i2: dest:i src1:i len:48
259 long_conv_to_i4: dest:i src1:i len:48
260 long_conv_to_i8: dest:i src1:i len:48
261 long_conv_to_r4: dest:f src1:i len:112
262 long_conv_to_r8: dest:f src1:i len:112
263 long_conv_to_u4: dest:i src1:i len:112
264 long_conv_to_u8: dest:i src1:i len:112
265 long_conv_to_r_un: dest:f src1:i len:48
266 long_conv_to_ovf_i: dest:i src1:i src2:i len:48
267 long_conv_to_ovf_i4_un: dest:i src1:i len:96
268 long_conv_to_ovf_u4: dest:i src1:i len:48
269 long_conv_to_u2: dest:i src1:i len:48
270 long_conv_to_u1: dest:i src1:i len:48
271 long_conv_to_i: dest:i src1:i len:48
272
273 long_mul_imm: dest:i src1:i src2:i len:48
274 long_mul_ovf: dest:i src1:i src2:i len:48
275 long_mul_ovf_un: dest:i src1:i src2:i len:48
276 long_shr_imm: dest:i src1:i len:48
277 long_shr_un_imm: dest:i src1:i len:48
278 long_shl_imm: dest:i src1:i len:48
279
280 long_beq: len:48
281 long_bge: len:48
282 long_bgt: len:48
283 long_ble: len:48
284 long_blt: len:48
285 long_bne_un: len:48
286 long_bge_un: len:48
287 long_bgt_un: len:48
288 long_ble_un: len:48
289 long_blt_un: len:48
290
291 ia64_cmp4_eq: src1:i src2:i len:48
292 ia64_cmp4_ne: src1:i src2:i len:48
293 ia64_cmp4_le: src1:i src2:i len:48
294 ia64_cmp4_lt: src1:i src2:i len:48
295 ia64_cmp4_ge: src1:i src2:i len:48
296 ia64_cmp4_gt: src1:i src2:i len:48
297 ia64_cmp4_le_un: src1:i src2:i len:48
298 ia64_cmp4_lt_un: src1:i src2:i len:48
299 ia64_cmp4_ge_un: src1:i src2:i len:48
300 ia64_cmp4_gt_un: src1:i src2:i len:48
301 ia64_cmp_eq: src1:i src2:i len:48
302 ia64_cmp_ne: src1:i src2:i len:48
303 ia64_cmp_le: src1:i src2:i len:48
304 ia64_cmp_lt: src1:i src2:i len:48
305 ia64_cmp_ge: src1:i src2:i len:48
306 ia64_cmp_gt: src1:i src2:i len:48
307 ia64_cmp_lt_un: src1:i src2:i len:48
308 ia64_cmp_gt_un: src1:i src2:i len:48
309 ia64_cmp_le_un: src1:i src2:i len:48
310 ia64_cmp_ge_un: src1:i src2:i len:48
311
312 ia64_cmp4_eq_imm: src2:i len:48
313 ia64_cmp4_ne_imm: src2:i len:48
314 ia64_cmp4_le_imm: src2:i len:48
315 ia64_cmp4_lt_imm: src2:i len:48
316 ia64_cmp4_ge_imm: src2:i len:48
317 ia64_cmp4_gt_imm: src2:i len:48
318 ia64_cmp4_le_un_imm: src2:i len:48
319 ia64_cmp4_lt_un_imm: src2:i len:48
320 ia64_cmp4_ge_un_imm: src2:i len:48
321 ia64_cmp4_gt_un_imm: src2:i len:48
322 ia64_cmp_eq_imm: src2:i len:48
323 ia64_cmp_ne_imm: src2:i len:48
324 ia64_cmp_le_imm: src2:i len:48
325 ia64_cmp_lt_imm: src2:i len:48
326 ia64_cmp_ge_imm: src2:i len:48
327 ia64_cmp_gt_imm: src2:i len:48
328 ia64_cmp_lt_un_imm: src2:i len:48
329 ia64_cmp_gt_un_imm: src2:i len:48
330 ia64_cmp_le_un_imm: src2:i len:48
331 ia64_cmp_ge_un_imm: src2:i len:48
332
333 ia64_fcmp_eq: src1:f src2:f len:48
334 ia64_fcmp_ne: src1:f src2:f len:48
335 ia64_fcmp_le: src1:f src2:f len:48
336 ia64_fcmp_lt: src1:f src2:f len:48
337 ia64_fcmp_ge: src1:f src2:f len:48
338 ia64_fcmp_gt: src1:f src2:f len:48
339 ia64_fcmp_lt_un: src1:f src2:f len:96
340 ia64_fcmp_gt_un: src1:f src2:f len:96
341 ia64_fcmp_le_un: src1:f src2:f len:96
342 ia64_fcmp_ge_un: src1:f src2:f len:96
343
344 ia64_br_cond: len:48
345 ia64_cond_exc: len:48
346 ia64_cset: dest:i len:48
347
348 ia64_storei8_membase_inc_reg: dest:b src1:i len:48
349 ia64_storei1_membase_inc_reg: dest:b src1:c len:48
350 ia64_storei2_membase_inc_reg: dest:b src1:i len:48
351 ia64_storei4_membase_inc_reg: dest:b src1:i len:48
352 ia64_storer4_membase_inc_reg: dest:b src1:f len:48
353 ia64_storer8_membase_inc_reg: dest:b src1:f len:48
354 # 'b' tells the register allocator to avoid allocating sreg1 and dreg to the
355 # same physical register
356 ia64_loadi1_membase_inc: dest:b src1:i len:48
357 ia64_loadu1_membase_inc: dest:b src1:i len:48
358 ia64_loadi2_membase_inc: dest:b src1:i len:48
359 ia64_loadu2_membase_inc: dest:b src1:i len:48
360 ia64_loadi4_membase_inc: dest:b src1:i len:48
361 ia64_loadu4_membase_inc: dest:b src1:i len:48
362 ia64_loadi8_membase_inc: dest:b src1:i len:48
363 ia64_loadr4_membase_inc: dest:b src1:i len:48
364 ia64_loadr8_membase_inc: dest:b src1:i len:48
365
366 relaxed_nop: len:0
367
368 # Linear IR opcodes
369 nop: len:0
370 dummy_use: src1:i len:0
371 dummy_store: len:0
372 not_reached: len:0
373 not_null: src1:i len:0
374
375 jump_table: dest:i len:48
376
377 localloc_imm: dest:i len:92
378
379 vcall2: len:80 clob:c
380 vcall2_reg: src1:i len:80 clob:c
381 vcall2_membase: src1:b len:80 clob:c
382
383 int_conv_to_i1: dest:i src1:i len:48
384 int_conv_to_u1: dest:i src1:i len:48
385 int_conv_to_i2: dest:i src1:i len:48
386 int_conv_to_u2: dest:i src1:i len:48
387 int_conv_to_i4: dest:i src1:i len:48
388 int_conv_to_u4: dest:i src1:i len:48
389 int_conv_to_i8: dest:i src1:i len:48
390 int_conv_to_u8: dest:i src1:i len:48
391
392 long_add_imm: dest:i src1:i len:48
393 long_sub_imm: dest:i src1:i len:48
394 long_and_imm: dest:i src1:i len:48
395 long_or_imm: dest:i src1:i len:48
396 long_xor_imm: dest:i src1:i len:48
397