Reduce TLS accesses. (#11487)
[mono-project.git] / mono / tests / dim-genericmethods.il
blobd588bfbbf5808b0678cf0729a552342d6ae26d74
2 //  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
3 //  Copyright (c) Microsoft Corporation.  All rights reserved.
7 // Metadata version: v4.0.30319
8 .assembly extern mscorlib
10   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
11   .ver 4:0:0:0
13 .assembly genericmethods
15   .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
16   .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
17                                                                                                              63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
19   // --- The following custom attribute is added automatically, do not uncomment -------
20   //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) 
22   .hash algorithm 0x00008004
23   .ver 0:0:0:0
25 .module genericmethods.exe
26 // MVID: {62CAFB9A-4CDB-4A62-8A4F-DC7648609070}
27 .imagebase 0x00400000
28 .file alignment 0x00000200
29 .stackreserve 0x00100000
30 .subsystem 0x0003       // WINDOWS_CUI
31 .corflags 0x00000001    //  ILONLY
32 // Image base: 0x01790000
35 // =============== CLASS MEMBERS DECLARATION ===================
37 .class interface private abstract auto ansi IFoo
39   .method public hidebysig newslot virtual 
40           instance class [mscorlib]System.Type 
41           Foo<T>() cil managed
42   {
43     // Code size       37 (0x25)
44     .maxstack  2
45     .locals init (class [mscorlib]System.Type V_0)
46     IL_0000:  nop
47     IL_0001:  ldstr      "At IFoo<T>::Foo<T>: TypeOf(T) = {0}"
48     IL_0006:  ldtoken    !!T
49     IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
50     IL_0010:  call       void [mscorlib]System.Console::WriteLine(string,
51                                                                   object)
52     IL_0015:  nop
53     IL_0016:  ldtoken    !!T
54     IL_001b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
55     IL_0020:  stloc.0
56     IL_0021:  br.s       IL_0023
58     IL_0023:  ldloc.0
59     IL_0024:  ret
60   } // end of method IFoo::Foo
62 } // end of class IFoo
64 .class interface private abstract auto ansi IBar`1<T>
66   .method public hidebysig newslot virtual 
67           instance class [mscorlib]System.Type 
68           Bar1<P>() cil managed
69   {
70     // Code size       37 (0x25)
71     .maxstack  2
72     .locals init (class [mscorlib]System.Type V_0)
73     IL_0000:  nop
74     IL_0001:  ldstr      "At IBar<T>::Foo<P>: TypeOf(P) = {0}"
75     IL_0006:  ldtoken    !!P
76     IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
77     IL_0010:  call       void [mscorlib]System.Console::WriteLine(string,
78                                                                   object)
79     IL_0015:  nop
80     IL_0016:  ldtoken    !!P
81     IL_001b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
82     IL_0020:  stloc.0
83     IL_0021:  br.s       IL_0023
85     IL_0023:  ldloc.0
86     IL_0024:  ret    
87   } // end of method IBar`1::Bar1
89   .method public hidebysig newslot virtual 
90           instance class [mscorlib]System.Type 
91           Bar2<K>() cil managed
92   {
93     // Code size       37 (0x25)
94     .maxstack  2
95     .locals init (class [mscorlib]System.Type V_0)
96     IL_0000:  nop
97     IL_0001:  ldstr      "At IBar<T>::Bar2<K>: TypeOf(K) = {0}"
98     IL_0006:  ldtoken    !!K
99     IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
100     IL_0010:  call       void [mscorlib]System.Console::WriteLine(string,
101                                                                   object)
102     IL_0015:  nop
103     IL_0016:  ldtoken    !!K
104     IL_001b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
105     IL_0020:  stloc.0
106     IL_0021:  br.s       IL_0023
108     IL_0023:  ldloc.0
109     IL_0024:  ret  
110   } // end of method IBar`1::Bar2
112   .method public hidebysig newslot virtual 
113           instance void  Bar3<P,K>([out] class [mscorlib]System.Type& t,
114                                    [out] class [mscorlib]System.Type& u) cil managed
115   {
116     // Code size       57 (0x39)
117     .maxstack  8
118     IL_0000:  nop
119     IL_0001:  ldstr      "At IBar<T>::Bar3<P, K>: TypeOf(P) = {0}, TypeOf(K)"
120     + " = {1}"
121     IL_0006:  ldtoken    !!P
122     IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
123     IL_0010:  ldtoken    !!K
124     IL_0015:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
125     IL_001a:  call       void [mscorlib]System.Console::WriteLine(string,
126                                                                   object,
127                                                                   object)
128     IL_001f:  nop
129     IL_0020:  ldarg.1
130     IL_0021:  ldtoken    !!P
131     IL_0026:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
132     IL_002b:  stind.ref
133     IL_002c:  ldarg.2
134     IL_002d:  ldtoken    !!K
135     IL_0032:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
136     IL_0037:  stind.ref
137     IL_0038:  ret    
138   } // end of method IBar`1::Bar3
140 } // end of class IBar`1
142 .class private auto ansi beforefieldinit FooBar`1<V>
143        extends [mscorlib]System.Object
144        implements IFoo,
145                   class IBar`1<!V>
147   .method public hidebysig specialname rtspecialname 
148           instance void  .ctor() cil managed
149   {
150     // Code size       8 (0x8)
151     .maxstack  8
152     IL_0000:  ldarg.0
153     IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
154     IL_0006:  nop
155     IL_0007:  ret
156   } // end of method FooBar`1::.ctor
158 } // end of class FooBar`1
160 .class private auto ansi beforefieldinit Program
161        extends [mscorlib]System.Object
163   .method private hidebysig static int32 
164           Main(string[] args) cil managed
165   {
166     .entrypoint
167     // Code size       223 (0xdf)
168     .maxstack  3
169     .locals init (class FooBar`1<object> V_0,
170              class IFoo V_1,
171              class IBar`1<object> V_2,
172              class [mscorlib]System.Type V_3,
173              class [mscorlib]System.Type V_4,
174              int32 V_5)
175     IL_0000:  nop
176     IL_0001:  newobj     instance void class FooBar`1<object>::.ctor()
177     IL_0006:  stloc.0
178     IL_0007:  ldloc.0
179     IL_0008:  stloc.1
180     IL_0009:  ldloc.0
181     IL_000a:  stloc.2
182     IL_000b:  ldstr      "Calling IFoo.Foo<String> on FooBar<Object> - expec"
183     + "ting IFoo::Foo<string>() returning typeof(string)"
184     IL_0010:  call       void [mscorlib]System.Console::WriteLine(string)
185     IL_0015:  nop
186     IL_0016:  ldloc.1
187     IL_0017:  callvirt   instance class [mscorlib]System.Type IFoo::Foo<string>()
188     IL_001c:  ldtoken    [mscorlib]System.String
189     IL_0021:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
190     IL_0026:  call       bool [mscorlib]System.Type::op_Equality(class [mscorlib]System.Type,
191                                                                  class [mscorlib]System.Type)
192     IL_002b:  ldstr      "Calling IFoo.Foo<String> on FooBar<Object>"
193     IL_0030:  call       void Test::Assert(bool,
194                                            string)
195     IL_0035:  nop
196     IL_0036:  ldstr      "Calling IBar.Bar1<String> on FooBar<object> - expe"
197     + "cting bar.Bar1<string>() returning typeof(string)"
198     IL_003b:  call       void [mscorlib]System.Console::WriteLine(string)
199     IL_0040:  nop
200     IL_0041:  ldloc.2
201     IL_0042:  callvirt   instance class [mscorlib]System.Type class IBar`1<object>::Bar1<string>()
202     IL_0047:  ldtoken    [mscorlib]System.String
203     IL_004c:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
204     IL_0051:  call       bool [mscorlib]System.Type::op_Equality(class [mscorlib]System.Type,
205                                                                  class [mscorlib]System.Type)
206     IL_0056:  ldstr      "Calling IBar.Bar1<String> on FooBar<object>"
207     IL_005b:  call       void Test::Assert(bool,
208                                            string)
209     IL_0060:  nop
210     IL_0061:  ldstr      "Calling IBar.Bar2<String[]> on FooBar<object> - ex"
211     + "pecting bar.Bar2<string[]>() returning typeof(string[])"
212     IL_0066:  call       void [mscorlib]System.Console::WriteLine(string)
213     IL_006b:  nop
214     IL_006c:  ldloc.2
215     IL_006d:  callvirt   instance class [mscorlib]System.Type class IBar`1<object>::Bar2<string[]>()
216     IL_0072:  ldtoken    string[]
217     IL_0077:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
218     IL_007c:  call       bool [mscorlib]System.Type::op_Equality(class [mscorlib]System.Type,
219                                                                  class [mscorlib]System.Type)
220     IL_0081:  ldstr      "Calling IBar.Bar2<String[]> on FooBar<object>"
221     IL_0086:  call       void Test::Assert(bool,
222                                            string)
223     IL_008b:  nop
224     IL_008c:  ldstr      "Calling IBar.Bar3<String, String[]> - expecting ba"
225     + "r.Bar3<string>() returning typeof(string), typeof(string[])"
226     IL_0091:  call       void [mscorlib]System.Console::WriteLine(string)
227     IL_0096:  nop
228     IL_0097:  ldloc.2
229     IL_0098:  ldloca.s   V_3
230     IL_009a:  ldloca.s   V_4
231     IL_009c:  callvirt   instance void class IBar`1<object>::Bar3<string,string[]>(class [mscorlib]System.Type&,
232                                                                                    class [mscorlib]System.Type&)
233     IL_00a1:  nop
234     IL_00a2:  ldloc.3
235     IL_00a3:  ldtoken    [mscorlib]System.String
236     IL_00a8:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
237     IL_00ad:  call       bool [mscorlib]System.Type::op_Equality(class [mscorlib]System.Type,
238                                                                  class [mscorlib]System.Type)
239     IL_00b2:  brfalse.s  IL_00c7
241     IL_00b4:  ldloc.s    V_4
242     IL_00b6:  ldtoken    string[]
243     IL_00bb:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
244     IL_00c0:  call       bool [mscorlib]System.Type::op_Equality(class [mscorlib]System.Type,
245                                                                  class [mscorlib]System.Type)
246     IL_00c5:  br.s       IL_00c8
248     IL_00c7:  ldc.i4.0
249     IL_00c8:  ldstr      "Calling IBar.Bar3<String, String[]>"
250     IL_00cd:  call       void Test::Assert(bool,
251                                            string)
252     IL_00d2:  nop
253     IL_00d3:  call       int32 Test::Ret()
254     IL_00d8:  stloc.s    V_5
255     IL_00da:  br.s       IL_00dc
257     IL_00dc:  ldloc.s    V_5
258     IL_00de:  ret
259   } // end of method Program::Main
261   .method public hidebysig specialname rtspecialname 
262           instance void  .ctor() cil managed
263   {
264     // Code size       8 (0x8)
265     .maxstack  8
266     IL_0000:  ldarg.0
267     IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
268     IL_0006:  nop
269     IL_0007:  ret
270   } // end of method Program::.ctor
272 } // end of class Program
274 .class private auto ansi beforefieldinit Test
275        extends [mscorlib]System.Object
277   .field private static bool Pass
278   .method public hidebysig static int32  Ret() cil managed
279   {
280     // Code size       19 (0x13)
281     .maxstack  1
282     .locals init (int32 V_0)
283     IL_0000:  nop
284     IL_0001:  ldsfld     bool Test::Pass
285     IL_0006:  brtrue.s   IL_000c
287     IL_0008:  ldc.i4.s   101
288     IL_000a:  br.s       IL_000e
290     IL_000c:  ldc.i4.s   0
291     IL_000e:  stloc.0
292     IL_000f:  br.s       IL_0011
294     IL_0011:  ldloc.0
295     IL_0012:  ret
296   } // end of method Test::Ret
298   .method public hidebysig static void  Assert(bool cond,
299                                                string msg) cil managed
300   {
301     // Code size       47 (0x2f)
302     .maxstack  2
303     .locals init (bool V_0)
304     IL_0000:  nop
305     IL_0001:  ldarg.0
306     IL_0002:  stloc.0
307     IL_0003:  ldloc.0
308     IL_0004:  brfalse.s  IL_0015
310     IL_0006:  nop
311     IL_0007:  ldstr      "PASS"
312     IL_000c:  call       void [mscorlib]System.Console::WriteLine(string)
313     IL_0011:  nop
314     IL_0012:  nop
315     IL_0013:  br.s       IL_002e
317     IL_0015:  nop
318     IL_0016:  ldstr      "FAIL: "
319     IL_001b:  ldarg.1
320     IL_001c:  call       string [mscorlib]System.String::Concat(string,
321                                                                 string)
322     IL_0021:  call       void [mscorlib]System.Console::WriteLine(string)
323     IL_0026:  nop
324     IL_0027:  ldc.i4.0
325     IL_0028:  stsfld     bool Test::Pass
326     IL_002d:  nop
327     IL_002e:  ret
328   } // end of method Test::Assert
330   .method public hidebysig specialname rtspecialname 
331           instance void  .ctor() cil managed
332   {
333     // Code size       8 (0x8)
334     .maxstack  8
335     IL_0000:  ldarg.0
336     IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
337     IL_0006:  nop
338     IL_0007:  ret
339   } // end of method Test::.ctor
341   .method private hidebysig specialname rtspecialname static 
342           void  .cctor() cil managed
343   {
344     // Code size       7 (0x7)
345     .maxstack  8
346     IL_0000:  ldc.i4.1
347     IL_0001:  stsfld     bool Test::Pass
348     IL_0006:  ret
349   } // end of method Test::.cctor
351 } // end of class Test
354 // =============================================================
356 // *********** DISASSEMBLY COMPLETE ***********************
357 // WARNING: Created Win32 resource file genericmethods.res