In MASM, if a QWORD symbol is passed to a jmp or call instruction in
64-bit mode or a DWORD or WORD symbol is passed in 32-bit mode, then
MSVC's assembler recognizes that as an indirect call. Additionally, if
the operand is qualified as a ptr, then that should also be an indirect
call.
Furthermore, in 64-bit mode, such operands are implicitly rip-relative
(in fact, MSVC's assembler ml64.exe does not allow explicitly specifying
rip as a base register.)
To keep this patch managable, this patch does not include:
- error messages for wrong operand types (e.g. passing a QWORD in 32-bit mode)
- resolving indirect calls if the symbol is declared after it's first use (llvm-ml currently only runs a single pass).
- imlementing the extern keyword (required to resolve https://crbug.com/762167.)
This patch is likely missing a bunch of edge cases, so please do point
them out in the review.
Fix the function naming to use lowerCase while updating the signature.