private void WriteImmediate(Operand op)
{
Debug.Assert(!op.IsCPURegister);
if (op.IsStackLocal)
{
codeStream.Write((int)op.Offset, Endianness.Little);
return;
}
Debug.Assert(op.IsResolvedConstant);
if (op.IsI1)
codeStream.WriteByte((byte)op.ConstantSignedInteger);
else if (op.IsU1 || op.IsBoolean)
codeStream.WriteByte(Convert.ToByte(op.ConstantUnsignedInteger));
else if (op.IsU2 || op.IsChar)
codeStream.Write(Convert.ToUInt16(op.ConstantUnsignedInteger), Endianness.Little);
else if (op.IsI2)
codeStream.Write(Convert.ToInt16(op.ConstantSignedInteger), Endianness.Little);
else if (op.IsI4 || op.IsI)
codeStream.Write(Convert.ToInt32(op.ConstantSignedInteger), Endianness.Little);
else if (op.IsU4 || op.IsPointer || op.IsU || !op.IsValueType)
codeStream.Write(Convert.ToUInt32(op.ConstantUnsignedInteger), Endianness.Little);
else
throw new InvalidCompilerException();
}