[Mono-devel-list] ilasm questions
Bart Van Rompaey
bart at perfectpc.be
Thu Jan 15 16:52:02 EST 2004
I hope this is the right newsgroup.
While looking into ilasm generated by Mono and ms.NET, I noticed two
major differences:
1) Mono doesn't make use of the short branch instructions (ex. bge.s). I
presume using this could mean some runtime performance improvement?
2) ms.net generates some weird code in case of branches. Let me give an
example:
public static int fib (int n) {
if (n < 2)
return 1;
return fib(n-2)+fib(n-1);
}
The if structures translates to:
ms.net:
IL_0000: ldarg.0
IL_0001: ldc.i4.2
IL_0002: bge.s IL_0008
IL_0004: ldc.i4.1
IL_0005: stloc.0
IL_0006: br.s IL_001c
IL_0008: ldarg.0
...
IL_001c: ldloc.0
IL_001d: ret
mono:
IL_0000: ldarg.0
IL_0001: ldc.i4.2
IL_0002: bge IL_0009
IL_0007: ldc.i4.1
IL_0008: ret
IL_0009: ldarg.0
... (rest of method)
Why would ms.net compile into that sequence of instructions? It has an
extra store/load and and an extra branch instruction? Does anyone see
some advantages of that?
Bart
More information about the Mono-devel-list
mailing list