When we encode an instruction, we need to know the number of bytes being
emitted to determine the fixups in X86MCCodeEmitter::emitImmediate.
There are only two callers for emitImmediate: emitMemModRMByte and
encodeInstruction.
Before this patch, we kept track of the current byte being emitted
by passing a reference parameter CurByte across all the emit*
funtions, which is ugly and unnecessary. For example, we don't have any
fixups when emitting prefixes, so we don't need to track this value.
In this patch, we use StartByte to record the initial status of the
streamer, and use OS.tell() to get the current status of the streamer
when we need to know the number of bytes being emitted. On one hand,
this eliminates the parameter CurByte for most emit* functions, on
the other hand, this make things clear: Only pass the parameter when we
really need it.
tell() returns a uint64_t and since you can't know how the encoder is being called, I think you have to assume you might have more than 2^32 bytes in the stream already.