[llvm-dev] [ms] RFC: MASM support

Eric Astor via llvm-dev llvm-dev at lists.llvm.org
Thu Nov 21 05:35:57 PST 2019


Hi all,

I'm proposing to add MASM support to LLVM's assembler capabilities, which
should nearly complete LLVM's support for cross-platform Windows
compilation.

Goal: Match the functionality of Microsoft's ml.exe and ml64.exe.

I'm currently trying to implement this as a set of extensions to the
assembler; it will correctly handle assembly files containing both GNU and
MASM syntax.

The features would be added to AsmParser and controlled via MCAsmInfo, and
would be available through both llvm-mc and clang. Both tools would remain
able to parse GNU-syntax assembler, but when passed the appropriate flags,
would also handle MASM. My first thought is to trigger MASM support
whenever we're targeting Windows, but we could also make it a discrete
function controlled by a different command-line flag.

We will also define a new driver (llvm-ml) that matches the command-line
interface of ml.exe and/or ml64.exe. This will likely be similar to
clang-cl and llvm-lib in building on top of a previous driver: either
llvm-mc or clang.

Known obstacles:
1. Support for "ifdef <register>": already completed, with a new
tryParseRegister method added to all TargetAsmParsers.
2. Syntax variations: MASM uses infix notation for many directives, and
does not use "."-prefixes on its directives.
3. Macro functions: MASM includes macro functions, which can emit
parameters and not just full instructions. (Probably tricky.)
4. Richer macro language in general: some MASM files rely heavily on
text-substitution for named symbols, as well as resolution of fields in
STRUCTs.

3 & 4 might be best handled by adding a preprocessor stage, but the syntax
is not similar to the C preprocessor... I'm going to try to augmenting
existing macro support first.

Any obstacles I've missed, or critiques of the approaches, would be very
welcome!

Thanks,
- Eric Astor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191121/32a1c54c/attachment.html>


More information about the llvm-dev mailing list