Apply changes from https://github.com/dotnet/runtime/commit/eb1756e97d23df13bc6fe798e...
[mono-project.git] / mono / tests / tailcall-interface-justrun.il
blob6f2247c131a523308d6314128f09e73b27113f5f
1 /*
2 Author:
3     Jay Krell (jaykrell@microsoft.com)
5 Copyright 2018 Microsoft
6 Licensed under the MIT license. See LICENSE file in the project root for full license information.
8 Derived from tailcall-interface.cs.
9 */
11 .assembly extern mscorlib {  }
13 .assembly 'tailcall-interface-justrun' { }
15 .class public sequential sealed Point
16 extends [mscorlib]System.ValueType
18 .field public int32 x
19 .field public int32 y
22 .class interface private abstract I1
24 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
25 .method public newslot abstract virtual instance void F1(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
26 .method public newslot abstract virtual instance void GF1<TF>(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
29 .class interface private abstract GI1`1<TC>
31 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
32 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
33 .method public newslot abstract virtual instance void F1(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
34 .method public newslot abstract virtual instance void GF1<TF>(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
35 .method public newslot abstract virtual instance void HF1<TF>(class GI2`1<!!TF> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
38 .class interface private abstract I2
40 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
41 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
42 .method public newslot abstract virtual instance void perturb_interface_offset3() { }
43 .method public newslot abstract virtual instance void F2(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
44 .method public newslot abstract virtual instance void GF2<TF>(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
47 .class interface private abstract GI2`1<TC>
49 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
50 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
51 .method public newslot abstract virtual instance void perturb_interface_offset3() { }
52 .method public newslot abstract virtual instance void perturb_interface_offset4() { }
53 .method public newslot abstract virtual instance void F2(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
54 .method public newslot abstract virtual instance void GF2<TF>(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
55 .method public newslot abstract virtual instance void HF2<TF>(class GI1`1<!!TF> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
58 .class public C1 implements I1
60 .method private newslot virtual final instance void I1.perturb_interface_offset1()
62 .override I1::perturb_interface_offset1
63 ret
66 .method private newslot virtual final instance void I1.F1(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
68 .override I1::F1
69 .locals init (int32 V_0)
70 ldarg.2
71 ldc.i4.0
72 ble.s IL_0014
73 ldarg.1
74 ldarg.0
75 ldarg.2
76 ldc.i4.1
77 sub
78 ldarg.3
79 ldloca.s V_0
80 conv.u
81 conv.u8
82 tail.
83 callvirt instance void I2::F2(class I1, int32, int64, int64)
84 IL_0014:
85 ret
88 .method private newslot virtual final instance void I1.GF1<TF>(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
90 .override I1::GF1
91 .locals init (int32 V_0)
92 ldarg.2
93 ldc.i4.0
94 ble.s IL_0014
96 ldarg.1
97 ldarg.0
98 ldarg.2
99 ldc.i4.1
101 ldarg.3
102 ldloca.s V_0
103 conv.u
104 conv.u8
105 tail.
106 callvirt instance void I2::GF2<!!0>(class I1, int32, int64, int64)
107 IL_0014:
111 .method public instance void .ctor()
113 ldarg.0
114 tail.
115 call instance void [mscorlib]System.Object::.ctor()
120 .class public GC1`1<TC> implements class GI1`1<!TC>
123 .method private newslot virtual final instance void 'GI1<TC>.perturb_interface_offset1'()
125 .override method instance void class GI1`1<!TC>::perturb_interface_offset1()
129 .method private newslot virtual final instance void 'GI1<TC>.perturb_interface_offset2'()
131 .override method instance void class GI1`1<!TC>::perturb_interface_offset2()
135 .method private newslot virtual final instance void 'GI1<TC>.F1'(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
137 .override method instance void class GI1`1<!TC>::F1(class GI2`1<!0>, int32, int64, int64)
138 .locals init (int32 V_0)
140 ldarg.2
141 ldc.i4.0
142 ble.s IL_0014
144 ldarg.1
145 ldarg.0
146 ldarg.2
147 ldc.i4.1
149 ldarg.3
150 ldloca.s V_0
151 conv.u
152 conv.u8
153 tail.
154 callvirt instance void class GI2`1<!TC>::F2(class GI1`1<!0>, int32, int64, int64)
155 IL_0014:
159 .method private newslot virtual final instance void 'GI1<TC>.GF1'<TF>(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
161 .override method instance void class GI1`1<!TC>::GF1<[1]>(class GI2`1<!0>, int32, int64, int64)
162 .locals init (int32 V_0)
164 ldarg.2
165 ldc.i4.0
166 ble.s IL_0014
168 ldarg.1
169 ldarg.0
170 ldarg.2
171 ldc.i4.1
173 ldarg.3
174 ldloca.s V_0
175 conv.u
176 conv.u8
177 tail.
178 callvirt instance void class GI2`1<!TC>::GF2<!!0>(class GI1`1<!0>, int32, int64, int64)
180 IL_0014:
184 .method private newslot virtual final instance void 'GI1<TC>.HF1'<TF>(class GI2`1<!!TF> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
186 .override method instance void class GI1`1<!TC>::HF1<[1]>(class GI2`1<!!TF>, int32, int64, int64)
187 .locals init (int32 V_0)
189 ldarg.2
190 ldc.i4.0
191 ble.s IL_0014
193 ldarg.1
194 ldarg.0
195 ldarg.2
196 ldc.i4.1
198 ldarg.3
199 ldloca.s V_0
200 conv.u
201 conv.u8
202 tail.
203 callvirt instance void class GI2`1<!!0>::HF2<!0>(class GI1`1<!!0>, int32, int64, int64)
204 IL_0014:
208 .method public instance void .ctor()
210 ldarg.0
211 tail.
212 call instance void [mscorlib]System.Object::.ctor()
218 .class public C2 implements I2
221 .method private newslot virtual final instance void I2.perturb_interface_offset1()
223 .override I2::perturb_interface_offset1
227 .method private newslot virtual final instance void I2.perturb_interface_offset2()
229 .override I2::perturb_interface_offset2
233 .method private newslot virtual final instance void I2.perturb_interface_offset3()
235 .override I2::perturb_interface_offset3
239 .method private newslot virtual final instance void I2.F2(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
241 .override I2::F2
242 .locals init (int32 V_0)
243 ldarg.2
244 ldc.i4.0
245 ble.s IL_0014
247 ldarg.1
248 ldarg.0
249 ldarg.2
250 ldc.i4.1
252 ldarg.3
253 ldloca.s V_0
254 conv.u
255 conv.u8
256 tail.
257 callvirt instance void I1::F1(class I2, int32, int64, int64)
258 IL_0014:
262 .method private newslot virtual final instance void I2.GF2<TF>(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
264 .override I2::GF2
265 .locals init (int32 V_0)
267 ldarg.2
268 ldc.i4.0
269 ble.s IL_0014
271 ldarg.1
272 ldarg.0
273 ldarg.2
274 ldc.i4.1
276 ldarg.3
277 ldloca.s V_0
278 conv.u
279 conv.u8
280 tail.
281 callvirt instance void I1::GF1<!!0>(class I2, int32, int64, int64)
282 IL_0014:
286 .method public instance void .ctor()
288 ldarg.0
289 tail.
290 call instance void [mscorlib]System.Object::.ctor()
295 .class public GC2`1<TC> implements class GI2`1<!TC>
298 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset1'()
300 .override method instance void class GI2`1<!TC>::perturb_interface_offset1()
304 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset2'()
306 .override method instance void class GI2`1<!TC>::perturb_interface_offset2()
310 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset3'()
312 .override method instance void class GI2`1<!TC>::perturb_interface_offset3()
316 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset4'()
318 .override method instance void class GI2`1<!TC>::perturb_interface_offset4()
322 .method private newslot virtual final instance void 'GI2<TC>.F2'(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
324 .override method instance void class GI2`1<!TC>::F2(class GI1`1<!0>, int32, int64, int64)
325 .locals init (int32 V_0)
327 ldarg.2
328 ldc.i4.0
329 ble.s IL_0014
331 ldarg.1
332 ldarg.0
333 ldarg.2
334 ldc.i4.1
336 ldarg.3
337 ldloca.s V_0
338 conv.u
339 conv.u8
340 tail.
341 callvirt instance void class GI1`1<!TC>::F1(class GI2`1<!0>, int32, int64, int64)
342 IL_0014:
346 .method private newslot virtual final instance void 'GI2<TC>.GF2'<TF>(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
348 .override method instance void class GI2`1<!TC>::GF2<[1]>(class GI1`1<!0>, int32, int64, int64)
349 .locals init (int32 V_0)
351 ldarg.2
352 ldc.i4.0
353 ble.s IL_0014
355 ldarg.1
356 ldarg.0
357 ldarg.2
358 ldc.i4.1
360 ldarg.3
361 ldloca.s V_0
362 conv.u
363 conv.u8
364 tail.
365 callvirt instance void class GI1`1<!TC>::GF1<!!0>(class GI2`1<!0>, int32, int64, int64)
366 IL_0014:
370 .method private newslot virtual final instance void 'GI2<TC>.HF2'<TF>(class GI1`1<!!TF> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
372 .override method instance void class GI2`1<!TC>::HF2<[1]>(class GI1`1<!!TF>, int32, int64, int64)
373 .locals init (int32 V_0)
375 ldarg.2
376 ldc.i4.0
377 ble.s IL_0014
379 ldarg.1
380 ldarg.0
381 ldarg.2
382 ldc.i4.1
384 ldarg.3
385 ldloca.s V_0
386 conv.u
387 conv.u8
388 tail.
389 callvirt instance void class GI1`1<!!0>::HF1<!0>(class GI2`1<!!0>, int32, int64, int64)
390 IL_0014:
394 .method public instance void .ctor()
396 ldarg.0
397 tail.
398 call instance void [mscorlib]System.Object::.ctor()
404 .class public A
407 .method public instance void .ctor()
409 ldarg.0
410 tail.
411 call instance void [mscorlib]System.Object::.ctor()
417 .class public B
420 .method public instance void .ctor()
422 ldarg.0
423 tail.
424 call instance void [mscorlib]System.Object::.ctor()
430 .class interface private abstract IC
432 .method public newslot abstract virtual instance !!T cast1<T>(object o, int32 counter, int64 stack) noinlining { }
433 .method public newslot abstract virtual instance class B cast2(object o, int32 counter, int64 stack) noinlining { }
434 .method public newslot abstract virtual instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining { }
435 .method public newslot abstract virtual instance class B[] cast4(object o, int32 counter, int64 stack) noinlining { }
436 .method public newslot abstract virtual instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining { }
439 .class public C
442 .method public instance !!T cast1<T>(object o, int32 counter, int64 stack) noinlining
444 .locals init (int32 V_0)
445 ldarg.2
446 ldc.i4.0
447 ble.s IL_0013
449 ldarg.0
450 ldarg.1
451 ldarg.2
452 ldc.i4.1
454 ldloca.s V_0
455 conv.u
456 conv.u8
457 tail.
458 call instance !!0 C::cast1<!!0>(object, int32, int64)
461 IL_0013:
462 ldarg.1
463 unbox.any !!T
466 .method public instance class B cast2(object o, int32 counter, int64 stack) noinlining
468 .locals init (int32 V_0)
469 ldarg.2
470 ldc.i4.0
471 ble.s IL_0013
473 ldarg.0
474 ldarg.1
475 ldarg.2
476 ldc.i4.1
478 ldloca.s V_0
479 conv.u
480 conv.u8
481 tail.
482 call instance class B C::cast2(object, int32, int64)
485 IL_0013:
486 ldarg.0
487 ldarg.1
488 ldc.i4.s 100
489 ldc.i4.0
490 conv.i8
491 tail.
492 call instance !!0 C::cast1<class B>(object, int32, int64)
495 .method public instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining
497 .locals init (int32 V_0)
498 ldarg.2
499 ldc.i4.0
500 ble.s IL_0013
502 ldarg.0
503 ldarg.1
504 ldarg.2
505 ldc.i4.1
507 ldloca.s V_0
508 conv.u
509 conv.u8
510 tail.
511 call instance !!0 C::cast3<!!0>(object, int32, int64)
514 IL_0013:
515 ldarg.0
516 ldarg.1
517 ldc.i4.s 100
518 ldc.i4.0
519 conv.i8
520 tail.
521 call instance !!0 C::cast1<!!0>(object, int32, int64)
525 .method public instance class B[] cast4(object o, int32 counter, int64 stack) noinlining
527 .locals init (int32 V_0)
528 ldarg.2
529 ldc.i4.0
530 ble.s IL_0013
531 ldarg.0
532 ldarg.1
533 ldarg.2
534 ldc.i4.1
536 ldloca.s V_0
537 conv.u
538 conv.u8
539 tail.
540 call instance class B[] C::cast4(object, int32, int64)
543 IL_0013:
544 ldarg.0
545 ldarg.1
546 ldc.i4.s 100
547 ldc.i4.0
548 conv.i8
549 tail.
550 call instance !!0 C::cast1<class B[]>(object, int32, int64)
553 .method public instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining
555 .locals init (int32 V_0)
556 ldarg.2
557 ldc.i4.0
558 ble.s IL_0013
559 ldarg.0
560 ldarg.1
561 ldarg.2
562 ldc.i4.1
564 ldloca.s V_0
565 conv.u
566 conv.u8
567 tail.
568 call instance !!0[] C::cast5<!!0>(object, int32, int64)
570 IL_0013:
571 ldarg.0
572 ldarg.1
573 ldc.i4.s 100
574 ldc.i4.0
575 conv.i8
576 tail.
577 call instance !!0 C::cast1<!!0[]>(object, int32, int64)
580 .method public instance void .ctor()
582 ldarg.0
583 tail.
584 call instance void [mscorlib]System.Object::.ctor()
588 .class public D`1<T1>
590 .method public static !!T cast1<T>(object o, int32 counter, int64 stack) noinlining
592 .locals init (int32 V_0)
593 ldarg.1
594 ldc.i4.0
595 ble.s IL_0012
597 ldarg.0
598 ldarg.1
599 ldc.i4.1
601 ldloca.s V_0
602 conv.u
603 conv.u8
604 tail.
605 call !!0 class D`1<!T1>::cast1<!!0>(object, int32, int64)
608 IL_0012:
609 ldarg.0
610 unbox.any !!T
613 .method public instance class B cast2(object o, int32 counter, int64 stack) noinlining
615 .locals init (int32 V_0)
616 ldarg.2
617 ldc.i4.0
618 ble.s IL_0013
620 ldarg.0
621 ldarg.1
622 ldarg.2
623 ldc.i4.1
625 ldloca.s V_0
626 conv.u
627 conv.u8
628 tail.
629 call instance class B class D`1<!T1>::cast2(object, int32, int64)
632 IL_0013:
633 ldarg.1
634 ldc.i4.s 100
635 ldc.i4.0
636 conv.i8
637 tail.
638 call !!0 class D`1<!T1>::cast1<class B>(object, int32, int64)
641 .method public instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining
643 .locals init (int32 V_0)
644 ldarg.2
645 ldc.i4.0
646 ble.s IL_0013
647 ldarg.0
648 ldarg.1
649 ldarg.2
650 ldc.i4.1
652 ldloca.s V_0
653 conv.u
654 conv.u8
655 tail.
656 call instance !!0 class D`1<!T1>::cast3<!!0>(object, int32, int64)
658 IL_0013:
659 ldarg.1
660 ldc.i4.s 100
661 ldc.i4.0
662 conv.i8
663 tail.
664 call !!0 class D`1<!T1>::cast1<!!0>(object, int32, int64)
667 .method public instance class B[] cast4(object o, int32 counter, int64 stack) noinlining
669 .locals init (int32 V_0)
670 ldarg.2
671 ldc.i4.0
672 ble.s IL_0013
673 ldarg.0
674 ldarg.1
675 ldarg.2
676 ldc.i4.1
678 ldloca.s V_0
679 conv.u
680 conv.u8
681 tail.
682 call instance class B[] class D`1<!T1>::cast4(object, int32, int64)
684 IL_0013:
685 ldarg.1
686 ldc.i4.s 100
687 ldc.i4.0
688 conv.i8
689 tail.
690 call !!0 class D`1<!T1>::cast1<class B[]>(object, int32, int64)
693 .method public instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining
695 .locals init (int32 V_0)
696 ldarg.2
697 ldc.i4.0
698 ble.s IL_0013
699 ldarg.0
700 ldarg.1
701 ldarg.2
702 ldc.i4.1
704 ldloca.s V_0
705 conv.u
706 conv.u8
707 tail.
708 call instance !!0[] class D`1<!T1>::cast5<!!0>(object, int32, int64)
710 IL_0013:
711 ldarg.1
712 ldc.i4.s 100
713 ldc.i4.0
714 conv.i8
715 tail.
716 call !!0 class D`1<!T1>::cast1<!!0[]>(object, int32, int64)
719 .method public instance !T1 cast6(object o, int32 counter, int64 stack) noinlining
721 .locals init (int32 V_0)
722 ldarg.2
723 ldc.i4.0
724 ble.s IL_0013
725 ldarg.0
726 ldarg.1
727 ldarg.2
728 ldc.i4.1
730 ldloca.s V_0
731 conv.u
732 conv.u8
733 tail.
734 call instance !0 class D`1<!T1>::cast6(object, int32, int64)
736 IL_0013:
737 ldarg.1
738 ldc.i4.s 100
739 ldc.i4.0
740 conv.i8
741 tail.
742 call !!0 class D`1<!T1>::cast1<!0>(object, int32, int64)
745 .method public instance !T1 cast7<T>(object o, int32 counter, int64 stack) noinlining
747 .locals init (int32 V_0)
748 ldarg.2
749 ldc.i4.0
750 ble.s IL_0013
751 ldarg.0
752 ldarg.1
753 ldarg.2
754 ldc.i4.1
756 ldloca.s V_0
757 conv.u
758 conv.u8
759 tail.
760 call instance !0 class D`1<!T1>::cast7<!!0>(object, int32, int64)
762 IL_0013:
763 ldarg.1
764 ldc.i4.s 100
765 ldc.i4.0
766 conv.i8
767 tail.
768 call !!0 class D`1<!T1>::cast1<!0>(object, int32, int64)
771 .method public instance !T1[] cast8(object o, int32 counter, int64 stack) noinlining
773 .locals init (int32 V_0)
774 ldarg.2
775 ldc.i4.0
776 ble.s IL_0013
777 ldarg.0
778 ldarg.1
779 ldarg.2
780 ldc.i4.1
782 ldloca.s V_0
783 conv.u
784 conv.u8
785 tail.
786 call instance !0[] class D`1<!T1>::cast8(object, int32, int64)
788 IL_0013:
789 ldarg.0
790 ldarg.1
791 ldc.i4.s 100
792 ldc.i4.0
793 conv.i8
794 tail.
795 call instance !!0 class D`1<!T1>::cast3<!0[]>(object, int32, int64)
798 .method public instance !T1[] cast9<T>(object o, int32 counter, int64 stack) noinlining
800 .locals init (int32 V_0)
801 ldarg.2
802 ldc.i4.0
803 ble.s IL_0013
804 ldarg.0
805 ldarg.1
806 ldarg.2
807 ldc.i4.1
809 ldloca.s V_0
810 conv.u
811 conv.u8
812 tail.
813 call instance !0[] class D`1<!T1>::cast9<!!0>(object, int32, int64)
815 IL_0013:
816 ldarg.0
817 ldarg.1
818 ldc.i4.s 100
819 ldc.i4.0
820 conv.i8
821 tail.
822 call instance !!0 class D`1<!T1>::cast3<!0[]>(object, int32, int64)
825 .method public instance void .ctor()
827 ldarg.0
828 tail.
829 call instance void [mscorlib]System.Object::.ctor()
833 .class private C3
835 .field private int32 i
836 .method private instance void print(object o) noinlining
838 ldarg.0
839 ldarg.0
840 ldfld int32 C3::i
841 ldc.i4.1
843 stfld int32 C3::i
846 .method public instance void Main() noinlining
848 .locals init (class D`1<class A> V_0, class D`1<class B> V_1, class D`1<class B[]> V_2, class C V_3, class B V_4, class B[] V_5, int32 V_6, class I1 V_7, class I2 V_8, class GI1`1<object> V_10, class GI1`1<object[]> V_11, class GI1`1<int32> V_12, class GI1`1<int32[]> V_13, class GI1`1<valuetype Point> V_14, class GI1`1<valuetype Point[]> V_15, class GI2`1<object> V_16, class GI2`1<object[]> V_17, class GI2`1<int32> V_18, class GI2`1<int32[]> V_19, class GI2`1<valuetype Point> V_20, class GI2`1<valuetype Point[]> V_21)
850 newobj instance void class D`1<class A>::.ctor()
851 stloc.0
852 newobj instance void class D`1<class B>::.ctor()
853 stloc.1
854 newobj instance void class D`1<class B[]>::.ctor()
855 stloc.2
856 newobj instance void C::.ctor()
857 stloc.3
858 newobj instance void B::.ctor()
859 stloc.s V_4
860 ldc.i4.1
861 newarr B
862 stloc.s V_5
864 newobj instance void class GC1`1<object>::.ctor()
865 stloc.s V_10
866 newobj instance void class GC1`1<object[]>::.ctor()
867 stloc.s V_11
868 newobj instance void class GC1`1<int32>::.ctor()
869 stloc.s V_12
870 newobj instance void class GC1`1<int32[]>::.ctor()
871 stloc.s V_13
872 newobj instance void class GC1`1<valuetype Point>::.ctor()
873 stloc.s V_14
874 newobj instance void class GC1`1<valuetype Point[]>::.ctor()
875 stloc.s V_15
876 newobj instance void class GC2`1<object>::.ctor()
877 stloc.s V_16
878 newobj instance void class GC2`1<object[]>::.ctor()
879 stloc.s V_17
880 newobj instance void class GC2`1<int32>::.ctor()
881 stloc.s V_18
882 newobj instance void class GC2`1<int32[]>::.ctor()
883 stloc.s V_19
884 newobj instance void class GC2`1<valuetype Point>::.ctor()
885 stloc.s V_20
886 newobj instance void class GC2`1<valuetype Point[]>::.ctor()
887 stloc.s V_21
889 newobj instance void C1::.ctor()
890 stloc.s V_7
891 newobj instance void C2::.ctor()
892 stloc.s V_8
894 ldarg.0
895 ldloc.0
896 ldloc.s V_4
897 ldc.i4.s 100
898 ldc.i4.0
899 conv.i8
900 callvirt instance class B class D`1<class A>::cast2(object, int32, int64)
901 call instance void C3::print(object)
903 ldarg.0
904 ldloc.0
905 ldloc.s V_4
906 ldc.i4.s 100
907 ldc.i4.0
908 conv.i8
909 callvirt instance !!0 class D`1<class A>::cast3<class B>(object, int32, int64)
910 call instance void C3::print(object)
912 ldarg.0
913 ldloc.0
914 ldloc.s V_5
915 ldc.i4.s 100
916 ldc.i4.0
917 conv.i8
918 callvirt instance !!0 class D`1<class A>::cast3<class B[]>(object, int32, int64)
919 call instance void C3::print(object)
921 ldarg.0
922 ldloc.0
923 ldloc.s V_5
924 ldc.i4.s 100
925 ldc.i4.0
926 conv.i8
927 callvirt instance class B[] class D`1<class A>::cast4(object, int32, int64)
928 call instance void C3::print(object)
930 ldarg.0
931 ldloc.0
932 ldloc.s V_5
933 ldc.i4.s 100
934 ldc.i4.0
935 conv.i8
936 callvirt instance !!0[] class D`1<class A>::cast5<class B>(object, int32, int64)
937 call instance void C3::print(object)
939 ldarg.0
940 ldloc.1
941 ldloc.s V_4
942 ldc.i4.s 100
943 ldc.i4.0
944 conv.i8
945 callvirt instance !0 class D`1<class B>::cast6(object, int32, int64)
946 call instance void C3::print(object)
948 ldarg.0
949 ldloc.1
950 ldloc.s V_4
951 ldc.i4.s 100
952 ldc.i4.0
953 conv.i8
954 callvirt instance !0 class D`1<class B>::cast7<class A>(object, int32, int64)
955 call instance void C3::print(object)
957 ldarg.0
958 ldloc.2
959 ldloc.s V_5
960 ldc.i4.s 100
961 ldc.i4.0
962 conv.i8
963 callvirt instance !0 class D`1<class B[]>::cast7<class A[]>(object, int32, int64)
964 call instance void C3::print(object)
966 ldarg.0
967 ldloc.1
968 ldloc.s V_5
969 ldc.i4.s 100
970 ldc.i4.0
971 conv.i8
972 callvirt instance !0[] class D`1<class B>::cast8(object, int32, int64)
973 call instance void C3::print(object)
975 ldarg.0
976 ldloc.1
977 ldloc.s V_5
978 ldc.i4.s 100
979 ldc.i4.0
980 conv.i8
981 callvirt instance !0[] class D`1<class B>::cast9<class A>(object, int32, int64)
982 call instance void C3::print(object)
984 ldarg.0
985 ldloc.3
986 ldloc.s V_4
987 ldc.i4.s 100
988 ldc.i4.0
989 conv.i8
990 callvirt instance class B C::cast2(object, int32, int64)
991 call instance void C3::print(object)
993 ldarg.0
994 ldloc.3
995 ldloc.s V_4
996 ldc.i4.s 100
997 ldc.i4.0
998 conv.i8
999 callvirt instance !!0 C::cast3<class B>(object, int32, int64)
1000 call instance void C3::print(object)
1002 ldarg.0
1003 ldloc.3
1004 ldloc.s V_5
1005 ldc.i4.s 100
1006 ldc.i4.0
1007 conv.i8
1008 callvirt instance !!0 C::cast3<class B[]>(object, int32, int64)
1009 call instance void C3::print(object)
1011 ldarg.0
1012 ldloc.3
1013 ldloc.s V_5
1014 ldc.i4.s 100
1015 ldc.i4.0
1016 conv.i8
1017 callvirt instance class B[] C::cast4(object, int32, int64)
1018 call instance void C3::print(object)
1020 ldarg.0
1021 ldloc.3
1022 ldloc.s V_5
1023 ldc.i4.s 100
1024 ldc.i4.0
1025 conv.i8
1026 callvirt instance !!0[] C::cast5<class B>(object, int32, int64)
1027 call instance void C3::print(object)
1029 ldloc.s V_7
1030 ldloc.s V_8
1031 ldc.i4.s 100
1032 ldloca.s V_6
1033 conv.u
1034 conv.u8
1035 ldc.i4.0
1036 conv.i8
1037 callvirt instance void I1::F1(class I2, int32, int64, int64)
1039 ldloc.s V_7
1040 ldloc.s V_8
1041 ldc.i4.s 100
1042 ldloca.s V_6
1043 conv.u
1044 conv.u8
1045 ldc.i4.0
1046 conv.i8
1047 callvirt instance void I1::GF1<object>(class I2, int32, int64, int64)
1049 ldloc.s V_7
1050 ldloc.s V_8
1051 ldc.i4.s 100
1052 ldloca.s V_6
1053 conv.u
1054 conv.u8
1055 ldc.i4.0
1056 conv.i8
1057 callvirt instance void I1::GF1<class A>(class I2, int32, int64, int64)
1059 ldloc.s V_7
1060 ldloc.s V_8
1061 ldc.i4.s 100
1062 ldloca.s V_6
1063 conv.u
1064 conv.u8
1065 ldc.i4.0
1066 conv.i8
1067 callvirt instance void I1::GF1<class A[]>(class I2, int32, int64, int64)
1069 ldloc.s V_7
1070 ldloc.s V_8
1071 ldc.i4.s 100
1072 ldloca.s V_6
1073 conv.u
1074 conv.u8
1075 ldc.i4.0
1076 conv.i8
1077 callvirt instance void I1::GF1<int32>(class I2, int32, int64, int64)
1079 ldloc.s V_7
1080 ldloc.s V_8
1081 ldc.i4.s 100
1082 ldloca.s V_6
1083 conv.u
1084 conv.u8
1085 ldc.i4.0
1086 conv.i8
1087 callvirt instance void I1::GF1<int32[]>(class I2, int32, int64, int64)
1089 ldloc.s V_10
1090 ldloc.s V_16
1091 ldc.i4.s 100
1092 ldloca.s V_6
1093 conv.u
1094 conv.u8
1095 ldc.i4.0
1096 conv.i8
1097 callvirt instance void class GI1`1<object>::F1(class GI2`1<!0>, int32, int64, int64)
1099 ldloc.s V_10
1100 ldloc.s V_16
1101 ldc.i4.s 100
1102 ldloca.s V_6
1103 conv.u
1104 conv.u8
1105 ldc.i4.0
1106 conv.i8
1107 callvirt instance void class GI1`1<object>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1109 ldloc.s V_10
1110 ldloc.s V_16
1111 ldc.i4.s 100
1112 ldloca.s V_6
1113 conv.u
1114 conv.u8
1115 ldc.i4.0
1116 conv.i8
1117 callvirt instance void class GI1`1<object>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1119 ldloc.s V_10
1120 ldloc.s V_16
1121 ldc.i4.s 100
1122 ldloca.s V_6
1123 conv.u
1124 conv.u8
1125 ldc.i4.0
1126 conv.i8
1127 callvirt instance void class GI1`1<object>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1129 ldloc.s V_10
1130 ldloc.s V_16
1131 ldc.i4.s 100
1132 ldloca.s V_6
1133 conv.u
1134 conv.u8
1135 ldc.i4.0
1136 conv.i8
1137 callvirt instance void class GI1`1<object>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1139 ldloc.s V_10
1140 ldloc.s V_16
1141 ldc.i4.s 100
1142 ldloca.s V_6
1143 conv.u
1144 conv.u8
1145 ldc.i4.0
1146 conv.i8
1147 callvirt instance void class GI1`1<object>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1149 ldloc.s V_11
1150 ldloc.s V_17
1151 ldc.i4.s 100
1152 ldloca.s V_6
1153 conv.u
1154 conv.u8
1155 ldc.i4.0
1156 conv.i8
1157 callvirt instance void class GI1`1<object[]>::GF1<object[]>(class GI2`1<!0>, int32, int64, int64)
1159 ldloc.s V_11
1160 ldloc.s V_17
1161 ldc.i4.s 100
1162 ldloca.s V_6
1163 conv.u
1164 conv.u8
1165 ldc.i4.0
1166 conv.i8
1167 callvirt instance void class GI1`1<object[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1169 ldloc.s V_11
1170 ldloc.s V_17
1171 ldc.i4.s 100
1172 ldloca.s V_6
1173 conv.u
1174 conv.u8
1175 ldc.i4.0
1176 conv.i8
1177 callvirt instance void class GI1`1<object[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1179 ldloc.s V_11
1180 ldloc.s V_17
1181 ldc.i4.s 100
1182 ldloca.s V_6
1183 conv.u
1184 conv.u8
1185 ldc.i4.0
1186 conv.i8
1187 callvirt instance void class GI1`1<object[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1189 ldloc.s V_11
1190 ldloc.s V_17
1191 ldc.i4.s 100
1192 ldloca.s V_6
1193 conv.u
1194 conv.u8
1195 ldc.i4.0
1196 conv.i8
1197 callvirt instance void class GI1`1<object[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1199 ldloc.s V_12
1200 ldloc.s V_18
1201 ldc.i4.s 100
1202 ldloca.s V_6
1203 conv.u
1204 conv.u8
1205 ldc.i4.0
1206 conv.i8
1207 callvirt instance void class GI1`1<int32>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1209 ldloc.s V_12
1210 ldloc.s V_18
1211 ldc.i4.s 100
1212 ldloca.s V_6
1213 conv.u
1214 conv.u8
1215 ldc.i4.0
1216 conv.i8
1217 callvirt instance void class GI1`1<int32>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1219 ldloc.s V_12
1220 ldloc.s V_18
1221 ldc.i4.s 100
1222 ldloca.s V_6
1223 conv.u
1224 conv.u8
1225 ldc.i4.0
1226 conv.i8
1227 callvirt instance void class GI1`1<int32>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1229 ldloc.s V_12
1230 ldloc.s V_18
1231 ldc.i4.s 100
1232 ldloca.s V_6
1233 conv.u
1234 conv.u8
1235 ldc.i4.0
1236 conv.i8
1237 callvirt instance void class GI1`1<int32>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1239 ldloc.s V_12
1240 ldloc.s V_18
1241 ldc.i4.s 100
1242 ldloca.s V_6
1243 conv.u
1244 conv.u8
1245 ldc.i4.0
1246 conv.i8
1247 callvirt instance void class GI1`1<int32>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1249 ldloc.s V_13
1250 ldloc.s V_19
1251 ldc.i4.s 100
1252 ldloca.s V_6
1253 conv.u
1254 conv.u8
1255 ldc.i4.0
1256 conv.i8
1257 callvirt instance void class GI1`1<int32[]>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1259 ldloc.s V_13
1260 ldloc.s V_19
1261 ldc.i4.s 100
1262 ldloca.s V_6
1263 conv.u
1264 conv.u8
1265 ldc.i4.0
1266 conv.i8
1267 callvirt instance void class GI1`1<int32[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1269 ldloc.s V_13
1270 ldloc.s V_19
1271 ldc.i4.s 100
1272 ldloca.s V_6
1273 conv.u
1274 conv.u8
1275 ldc.i4.0
1276 conv.i8
1277 callvirt instance void class GI1`1<int32[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1279 ldloc.s V_13
1280 ldloc.s V_19
1281 ldc.i4.s 100
1282 ldloca.s V_6
1283 conv.u
1284 conv.u8
1285 ldc.i4.0
1286 conv.i8
1287 callvirt instance void class GI1`1<int32[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1289 ldloc.s V_13
1290 ldloc.s V_19
1291 ldc.i4.s 100
1292 ldloca.s V_6
1293 conv.u
1294 conv.u8
1295 ldc.i4.0
1296 conv.i8
1297 callvirt instance void class GI1`1<int32[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1299 ldloc.s V_14
1300 ldloc.s V_20
1301 ldc.i4.s 100
1302 ldloca.s V_6
1303 conv.u
1304 conv.u8
1305 ldc.i4.0
1306 conv.i8
1307 callvirt instance void class GI1`1<valuetype Point>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1309 ldloc.s V_14
1310 ldloc.s V_20
1311 ldc.i4.s 100
1312 ldloca.s V_6
1313 conv.u
1314 conv.u8
1315 ldc.i4.0
1316 conv.i8
1317 callvirt instance void class GI1`1<valuetype Point>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1319 ldloc.s V_14
1320 ldloc.s V_20
1321 ldc.i4.s 100
1322 ldloca.s V_6
1323 conv.u
1324 conv.u8
1325 ldc.i4.0
1326 conv.i8
1327 callvirt instance void class GI1`1<valuetype Point>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1329 ldloc.s V_14
1330 ldloc.s V_20
1331 ldc.i4.s 100
1332 ldloca.s V_6
1333 conv.u
1334 conv.u8
1335 ldc.i4.0
1336 conv.i8
1337 callvirt instance void class GI1`1<valuetype Point>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1339 ldloc.s V_14
1340 ldloc.s V_20
1341 ldc.i4.s 100
1342 ldloca.s V_6
1343 conv.u
1344 conv.u8
1345 ldc.i4.0
1346 conv.i8
1347 callvirt instance void class GI1`1<valuetype Point>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1349 ldloc.s V_15
1350 ldloc.s V_21
1351 ldc.i4.s 100
1352 ldloca.s V_6
1353 conv.u
1354 conv.u8
1355 ldc.i4.0
1356 conv.i8
1357 callvirt instance void class GI1`1<valuetype Point[]>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1359 ldloc.s V_15
1360 ldloc.s V_21
1361 ldc.i4.s 100
1362 ldloca.s V_6
1363 conv.u
1364 conv.u8
1365 ldc.i4.0
1366 conv.i8
1367 callvirt instance void class GI1`1<valuetype Point[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1369 ldloc.s V_15
1370 ldloc.s V_21
1371 ldc.i4.s 100
1372 ldloca.s V_6
1373 conv.u
1374 conv.u8
1375 ldc.i4.0
1376 conv.i8
1377 callvirt instance void class GI1`1<valuetype Point[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1379 ldloc.s V_15
1380 ldloc.s V_21
1381 ldc.i4.s 100
1382 ldloca.s V_6
1383 conv.u
1384 conv.u8
1385 ldc.i4.0
1386 conv.i8
1387 callvirt instance void class GI1`1<valuetype Point[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1389 ldloc.s V_15
1390 ldloc.s V_21
1391 ldc.i4.s 100
1392 ldloca.s V_6
1393 conv.u
1394 conv.u8
1395 ldc.i4.0
1396 conv.i8
1397 tail.
1398 callvirt instance void class GI1`1<valuetype Point[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1403 .method public static void Main(string[] args) noinlining
1405 .entrypoint
1406 newobj instance void C3::.ctor()
1407 tail.
1408 call instance void C3::Main()
1412 .method public instance void .ctor()
1414 ldarg.0
1415 tail.
1416 call instance void [mscorlib]System.Object::.ctor()