This is a potential fix for disassembling unusual instruction sequences in 64-bit mode w.r.t the CALL instruction. It might be desirable to move the check somewhere else, etc., but it essentially mimics the special case handling with JCXZ in 16-bit mode.
The current behavior accepts the opcode size prefix and causes the call's immediate to stop disassembling after 2 bytes. When debugging sequences of instructions with this pattern, the disassembler output becomes extremely unreliable and essentially useless (if you jump midway into what lldb thinks is a unified instruction, you'll lose %rip). Thus the choice of ignoring the prefix and consuming all 4 bytes when disassembling a 64-bit mode binary.
Note: in Vol. 2A 3-99 the Intel spec states that CALL rel16 is N.S. N.S. is defined as:
Indicates an instruction syntax that requires an address override prefix in 64-bit mode
and is not supported. Using an address override prefix in 64-bit mode
may result in model-specific execution behavior. (Vol. 2A 3-7)
Since 0x66 is an operand override prefix we should be OK (although we may want to warn about 0x67 prefixes to 0xe8). On the CPUs I have tested with, they all ignore the 0x66 prefix in 64-bit mode.
Why no opcodeType check here? Can't this alias?