From 674c1dcca21f5edf9f7380902971fc5471c0bd4a Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 30 Oct 2010 17:36:36 +0000 Subject: implement (and document!) the first kind of MC assembler alias, which just remaps one mnemonic to another. Convert a few of the X86 aliases from .cpp to .td code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117815 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/CodeGenerator.html | 55 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'docs/CodeGenerator.html') diff --git a/docs/CodeGenerator.html b/docs/CodeGenerator.html index 3e0ac1b..de6a5c1 100644 --- a/docs/CodeGenerator.html +++ b/docs/CodeGenerator.html @@ -1878,15 +1878,64 @@ We've tried hard to automate the generation of the assembler from the .td files part of the manual and repetitive data entry can be factored and shared with the compiler.

+ + +
Instruction Parsing
- +

To Be Written

-
- Prolog/Epilog Code Insertion +
+ Instruction Alias Processing
+ +
+

Once the instruction is parsed, it enters the MatchInstructionImpl function. +The MatchInstructionImpl function performs alias processing and then does +actual matching.

+ +

Alias processing if the phase that canonicalizes different lexical forms of +the same instructions down to one representation. There are several different +kinds of alias that are possible to implement and they are listed below in the +order that they are processed (which is in order from simplest/weakest to most +complex/powerful). Generally you want to use the first alias mechanism that +meets the needs of your instruction, because it will allow a more concise +description.

+ + +
Mnemonic Aliases
+ +
+ +

The first phase of alias processing is simple instruction mneomonic +remapping for classes of instructions which are allowed with two different +mneomonics. This phase is a simple and unconditionally remapping from one input +mnemonic to one output mnemonic. It isn't possible for this form of alias to +look at the operands at all, so the remapping must apply for all forms of a +given mnemonic. Mnemonic aliases are defined simply, for example X86 has: +

+ +
+
+def : MnemonicAlias<"cbw",     "cbtw">;
+def : MnemonicAlias<"smovq",   "movsq">;
+def : MnemonicAlias<"fldcww",  "fldcw">;
+def : MnemonicAlias<"fucompi", "fucomip">;
+def : MnemonicAlias<"ud2a",    "ud2">;
+
+
+ +

... and many others. With a MnemonicAlias definition, the mnemonic is +remapped simply and directly.

+ +
+ + + +
Instruction Matching
+

To Be Written

-- cgit v1.1