Merge pull request #2274 from esdrubal/udpclientreceive
[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_i8: src1:b src2:i dest:i len:48
157 atomic_exchange_i4: src1:b src2:i dest:i len:48
158 atomic_exchange_i8: src1:b src2:i dest:i len:48
159 memory_barrier: len:48
160 atomic_add_imm_i4: src1:b dest:i len:48
161 atomic_add_imm_i8: src1:b dest:i len:48
162 adc: dest:i src1:i src2:i len:48
163 addcc: dest:i src1:i src2:i len:48
164 subcc: dest:i src1:i src2:i len:48
165 adc_imm: dest:i src1:i len:48
166 sbb: dest:i src1:i src2:i len:48
167 sbb_imm: dest:i src1:i len:48
168 br_reg: src1:i len:48
169 sin: dest:f src1:f len:48
170 cos: dest:f src1:f len:48
171 abs: dest:f src1:f len:48
172 tan: dest:f src1:f len:48
173 atan: dest:f src1:f len:48
174 sqrt: dest:f src1:f len:48
175 bigmul: len:48 dest:i src1:a src2:i
176 bigmul_un: len:48 dest:i src1:a src2:i
177 sext_i1: dest:i src1:i len:48
178 sext_i2: dest:i src1:i len:48
179 sext_i4: dest:i src1:i len:48
180 zext_i1: dest:i src1:i len:48
181 zext_i2: dest:i src1:i len:48
182 zext_i4: dest:i src1:i len:48
183
184 # 32 bit opcodes
185 int_add: dest:i src1:i src2:i len:48
186 int_sub: dest:i src1:i src2:i len:48
187 int_mul: dest:i src1:i src2:i len:48
188 int_mul_ovf: dest:i src1:i src2:i len:48
189 int_mul_ovf_un: dest:i src1:i src2:i len:48
190 int_div: dest:a src1:a src2:i clob:d len:48
191 int_div_un: dest:a src1:a src2:i clob:d len:48
192 int_rem: dest:d src1:a src2:i clob:a len:48
193 int_rem_un: dest:d src1:a src2:i clob:a len:48
194 int_and: dest:i src1:i src2:i len:48
195 int_or: dest:i src1:i src2:i len:48
196 int_xor: dest:i src1:i src2:i len:48
197 int_shl: dest:i src1:i src2:s len:48
198 int_shr: dest:i src1:i src2:s len:48
199 int_shr_un: dest:i src1:i src2:s len:48
200 int_adc: dest:i src1:i src2:i len:48
201 int_adc_imm: dest:i src1:i len:48
202 int_sbb: dest:i src1:i src2:i len:48
203 int_sbb_imm: dest:i src1:i len:48
204 int_addcc: dest:i src1:i src2:i len:96
205 int_subcc: dest:i src1:i src2:i len:96
206 int_add_imm: dest:i src1:i len:48
207 int_sub_imm: dest:i src1:i len:48
208 int_mul_imm: dest:i src1:i len:48
209 int_div_imm: dest:a src1:i clob:d len:48
210 int_div_un_imm: dest:a src1:i clob:d len:48
211 int_rem_imm: dest:d src1:i clob:a len:48
212 int_rem_un_imm: dest:d src1:i clob:a len:48
213 int_and_imm: dest:i src1:i len:48
214 int_or_imm: dest:i src1:i len:48
215 int_xor_imm: dest:i src1:i len:48
216 int_shl_imm: dest:i src1:i len:48
217 int_shr_imm: dest:i src1:i len:48
218 int_shr_un_imm: dest:i src1:i len:48
219 int_neg: dest:i src1:i len:48
220 int_not: dest:i src1:i len:48
221 int_ceq: dest:c len:48
222 int_cgt: dest:c len:48
223 int_cgt_un: dest:c len:48
224 int_clt: dest:c len:48
225 int_clt_un: dest:c len:48
226 int_beq: len:48
227 int_bne_un: len:48
228 int_blt: len:48
229 int_blt_un: len:48
230 int_bgt: len:48
231 int_bgt_un: len:48
232 int_bge: len:48
233 int_bge_un: len:48
234 int_ble: len:48
235 int_ble_un: len:48
236 int_conv_to_r4: dest:f src1:i len:112
237 int_conv_to_r8: dest:f src1:i len:112
238
239 # 64 bit opcodes
240 long_add: dest:i src1:i src2:i len:48
241 long_sub: dest:i src1:i src2:i len:48
242 long_mul: dest:i src1:i src2:i len:48
243 long_div: dest:a src1:a src2:i len:48 clob:d
244 long_div_un: dest:a src1:a src2:i len:48 clob:d
245 long_rem: dest:d src1:a src2:i len:48 clob:a
246 long_rem_un: dest:d src1:a src2:i len:48 clob:a
247 long_and: dest:i src1:i src2:i len:48
248 long_or: dest:i src1:i src2:i len:48
249 long_xor: dest:i src1:i src2:i len:48
250 long_shl: dest:i src1:i src2:s len:48
251 long_shr: dest:i src1:i src2:s len:48
252 long_shr_un: dest:i src1:i src2:s len:48
253 long_neg: dest:i src1:i len:48
254 long_not: dest:i src1:i len:48
255 long_conv_to_i1: dest:i src1:i len:48
256 long_conv_to_i2: dest:i src1:i len:48
257 long_conv_to_i4: dest:i src1:i len:48
258 long_conv_to_i8: dest:i src1:i len:48
259 long_conv_to_r4: dest:f src1:i len:112
260 long_conv_to_r8: dest:f src1:i len:112
261 long_conv_to_u4: dest:i src1:i len:112
262 long_conv_to_u8: dest:i src1:i len:112
263 long_conv_to_r_un: dest:f src1:i len:48
264 long_conv_to_ovf_i: dest:i src1:i src2:i len:48
265 long_conv_to_ovf_i4_un: dest:i src1:i len:96
266 long_conv_to_ovf_u4: dest:i src1:i len:48
267 long_conv_to_u2: dest:i src1:i len:48
268 long_conv_to_u1: dest:i src1:i len:48
269 long_conv_to_i: dest:i src1:i len:48
270
271 long_mul_imm: dest:i src1:i src2:i len:48
272 long_mul_ovf: dest:i src1:i src2:i len:48
273 long_mul_ovf_un: dest:i src1:i src2:i len:48
274 long_shr_imm: dest:i src1:i len:48
275 long_shr_un_imm: dest:i src1:i len:48
276 long_shl_imm: dest:i src1:i len:48
277
278 long_beq: len:48
279 long_bge: len:48
280 long_bgt: len:48
281 long_ble: len:48
282 long_blt: len:48
283 long_bne_un: len:48
284 long_bge_un: len:48
285 long_bgt_un: len:48
286 long_ble_un: len:48
287 long_blt_un: len:48
288
289 ia64_cmp4_eq: src1:i src2:i len:48
290 ia64_cmp4_ne: src1:i src2:i len:48
291 ia64_cmp4_le: src1:i src2:i len:48
292 ia64_cmp4_lt: src1:i src2:i len:48
293 ia64_cmp4_ge: src1:i src2:i len:48
294 ia64_cmp4_gt: src1:i src2:i len:48
295 ia64_cmp4_le_un: src1:i src2:i len:48
296 ia64_cmp4_lt_un: src1:i src2:i len:48
297 ia64_cmp4_ge_un: src1:i src2:i len:48
298 ia64_cmp4_gt_un: src1:i src2:i len:48
299 ia64_cmp_eq: src1:i src2:i len:48
300 ia64_cmp_ne: src1:i src2:i len:48
301 ia64_cmp_le: src1:i src2:i len:48
302 ia64_cmp_lt: src1:i src2:i len:48
303 ia64_cmp_ge: src1:i src2:i len:48
304 ia64_cmp_gt: src1:i src2:i len:48
305 ia64_cmp_lt_un: src1:i src2:i len:48
306 ia64_cmp_gt_un: src1:i src2:i len:48
307 ia64_cmp_le_un: src1:i src2:i len:48
308 ia64_cmp_ge_un: src1:i src2:i len:48
309
310 ia64_cmp4_eq_imm: src2:i len:48
311 ia64_cmp4_ne_imm: src2:i len:48
312 ia64_cmp4_le_imm: src2:i len:48
313 ia64_cmp4_lt_imm: src2:i len:48
314 ia64_cmp4_ge_imm: src2:i len:48
315 ia64_cmp4_gt_imm: src2:i len:48
316 ia64_cmp4_le_un_imm: src2:i len:48
317 ia64_cmp4_lt_un_imm: src2:i len:48
318 ia64_cmp4_ge_un_imm: src2:i len:48
319 ia64_cmp4_gt_un_imm: src2:i len:48
320 ia64_cmp_eq_imm: src2:i len:48
321 ia64_cmp_ne_imm: src2:i len:48
322 ia64_cmp_le_imm: src2:i len:48
323 ia64_cmp_lt_imm: src2:i len:48
324 ia64_cmp_ge_imm: src2:i len:48
325 ia64_cmp_gt_imm: src2:i len:48
326 ia64_cmp_lt_un_imm: src2:i len:48
327 ia64_cmp_gt_un_imm: src2:i len:48
328 ia64_cmp_le_un_imm: src2:i len:48
329 ia64_cmp_ge_un_imm: src2:i len:48
330
331 ia64_fcmp_eq: src1:f src2:f len:48
332 ia64_fcmp_ne: src1:f src2:f len:48
333 ia64_fcmp_le: src1:f src2:f len:48
334 ia64_fcmp_lt: src1:f src2:f len:48
335 ia64_fcmp_ge: src1:f src2:f len:48
336 ia64_fcmp_gt: src1:f src2:f len:48
337 ia64_fcmp_lt_un: src1:f src2:f len:96
338 ia64_fcmp_gt_un: src1:f src2:f len:96
339 ia64_fcmp_le_un: src1:f src2:f len:96
340 ia64_fcmp_ge_un: src1:f src2:f len:96
341
342 ia64_br_cond: len:48
343 ia64_cond_exc: len:48
344 ia64_cset: dest:i len:48
345
346 ia64_storei8_membase_inc_reg: dest:b src1:i len:48
347 ia64_storei1_membase_inc_reg: dest:b src1:c len:48
348 ia64_storei2_membase_inc_reg: dest:b src1:i len:48
349 ia64_storei4_membase_inc_reg: dest:b src1:i len:48
350 ia64_storer4_membase_inc_reg: dest:b src1:f len:48
351 ia64_storer8_membase_inc_reg: dest:b src1:f len:48
352 # 'b' tells the register allocator to avoid allocating sreg1 and dreg to the
353 # same physical register
354 ia64_loadi1_membase_inc: dest:b src1:i len:48
355 ia64_loadu1_membase_inc: dest:b src1:i len:48
356 ia64_loadi2_membase_inc: dest:b src1:i len:48
357 ia64_loadu2_membase_inc: dest:b src1:i len:48
358 ia64_loadi4_membase_inc: dest:b src1:i len:48
359 ia64_loadu4_membase_inc: dest:b src1:i len:48
360 ia64_loadi8_membase_inc: dest:b src1:i len:48
361 ia64_loadr4_membase_inc: dest:b src1:i len:48
362 ia64_loadr8_membase_inc: dest:b src1:i len:48
363
364 relaxed_nop: len:0
365
366 # Linear IR opcodes
367 nop: len:0
368 dummy_use: src1:i len:0
369 dummy_store: len:0
370 not_reached: len:0
371 not_null: src1:i len:0
372
373 jump_table: dest:i len:48
374
375 localloc_imm: dest:i len:92
376
377 vcall2: len:80 clob:c
378 vcall2_reg: src1:i len:80 clob:c
379 vcall2_membase: src1:b len:80 clob:c
380
381 int_conv_to_i1: dest:i src1:i len:48
382 int_conv_to_u1: dest:i src1:i len:48
383 int_conv_to_i2: dest:i src1:i len:48
384 int_conv_to_u2: dest:i src1:i len:48
385 int_conv_to_i4: dest:i src1:i len:48
386 int_conv_to_u4: dest:i src1:i len:48
387 int_conv_to_i8: dest:i src1:i len:48
388 int_conv_to_u8: dest:i src1:i len:48
389
390 long_add_imm: dest:i src1:i len:48
391 long_sub_imm: dest:i src1:i len:48
392 long_and_imm: dest:i src1:i len:48
393 long_or_imm: dest:i src1:i len:48
394 long_xor_imm: dest:i src1:i len:48
395
396 gc_safe_point: len:0