[Mono-devel-list] CEE_x_I4 instructions in the BURG file

Ben Maurer bmaurer at users.sourceforge.net
Thu Apr 1 19:52:16 EST 2004


Hello,

As I was hacking on the jit, I noticed that on a 32 bit platform, there
are multiple ways to do an operation such as CEE_LDIND_I4:

CEE_LDIND_I
CEE_LDIND_U
CEE_LDIND_I4
CEE_LDIND_U4
CEE_LDIND_REF

With the multiple ways of encoding the same instruction, we seem to be
missing alot of optimizations. For example, there are many rules such
as:

cflags: OP_COMPARE (CEE_LDIND_I4 (OP_REGVAR), reg)

However, if you actually have
OP_COMPARE (CEE_LDIND_REF (OP_REGVAR), reg)

This optimization is not applied.

So, I was thinking that a possible solution would be to change all
aliases for integer operations into one instruction during the
decomposition phase. For example, all of the following instructions
would be changed into CEE_LDIND_I, if the jit is on a 32 bit platform:

CEE_LDIND_U
CEE_LDIND_I4
CEE_LDIND_U4
CEE_LDIND_REF

This way, we only need to special case CEE_LDIND_I, rather than all 5
versions. Obviously, to keep 64 bit support, we would need to have rules
that handle I4, but they would not need to be as extensive.

Before I start work on this, however, I would like to hear some input
from the other jit hackers.

-- Ben




More information about the Mono-devel-list mailing list