// Test file for the Common Intermediate Language

/*
multi line comment
*/

// examples from Wikipedia
.assembly Hello {}
.assembly extern mscorlib {}
.method static void Main()
{
.entrypoint
.maxstack 1
ldstr "Hello, world!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}

.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init (int32 V_0,
int32 V_1)

ldc.i4.2
stloc.0
br.s IL_001f
ldc.i4.2
stloc.1
br.s IL_0011
ldloc.0
ldloc.1
rem
brfalse.s IL_001b
ldloc.1
ldc.i4.1
add
stloc.1
ldloc.1
ldloc.0
blt.s IL_0008
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ldloc.0
ldc.i4.1
add
stloc.0
ldloc.0
ldc.i4 0x3e8
blt.s IL_0004
ret
}

.method assembly static void modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
test_pointer_operations(int32 param) cil managed
{
.vtentry 1 : 1
// Code size 44 (0x2c)
.maxstack 2
.locals ([0] int32* ptr,
[1] valuetype A* V_1,
[2] valuetype A* a,
[3] int32 k)
// k = 0;
ldc.i4.0
stloc.3
// ptr = &k;
ldloca.s k // load local's address instruction
stloc.0
// *ptr = 1;
ldloc.0
ldc.i4.1
stind.i4 // indirection instruction
// ptr = ¶m
ldarga.s param // load parameter's address instruction
stloc.0
// *ptr = 2
ldloc.0
ldc.i4.2
stind.i4
// a = new A;
ldloca.s a
call valuetype A* modopt([mscorlib]System.Runtime.CompilerServices.CallConvThiscall) 'A.{ctor}'(valuetype A* modopt([mscorlib]System.Runtime.CompilerServices.IsConst) modopt([mscorlib]System.Runtime.CompilerServices.IsConst))
pop
// ptra = &a;
ldloca.s a
stloc.1
// ptra->meth();
ldloc.1
dup
ldind.i4 // reading the VMT for virtual call
ldind.i4
calli unmanaged stdcall void modopt([mscorlib]System.Runtime.CompilerServices.CallConvStdcall)(native int)
ret
} // end of method 'Global Functions'::test_pointer_operations