CIL - What is the difference between ldc.i4 33 and ldc.i4.33?
Question
I'm trying to figure out some CIL code. But it seems these two statements do the same thing (according to everything I have read).
ldc.i4 33
and
ldc.i4.33
Both supposedly "load an int32 onto the stack of value 33".
Is this correct? Why? I would have thought that ldc.i4.33
would be "load an integer from local variable index 33 onto the stack".
Where am I going wrong here?
Solution
The opcode ldc.i4.33
doesn't exist.
There's a few special (called macro) opcodes, from:
ldc.i4.m1 // has the same effect as: ldc.i4 -1
to
ldc.i4.8 // has the same effect as: ldc.i4 8
But they are just a short form of the ldc.i4
opcode, for common cases, to optimize the CIL size.
Similarly, ldloc.0
is a short form (i.e. has a more compact CIL encoding, but is doing exactly the same as) ldloc 0
, etc.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow