mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
sketch out the planned instruction alias mechanism, add some comments about
how the push/pop mnemonic aliases are wrong. llvm-svn: 117857
This commit is contained in:
parent
92f33ea784
commit
8aaac91ca4
@ -567,6 +567,18 @@ class MnemonicAlias<string From, string To> {
|
||||
list<Predicate> Predicates = [];
|
||||
}
|
||||
|
||||
/// InstAlias - This defines an alternate assembly syntax that is allowed to
|
||||
/// match an instruction that has a different (more canonical) assembly
|
||||
/// representation.
|
||||
class InstAlias<dag Outs, dag Ins, string Asm, dag Result> {
|
||||
dag OutOperandList = Outs; // An dag containing the MI def operand list.
|
||||
dag InOperandList = Ins; // An dag containing the MI use operand list.
|
||||
string AsmString = Asm; // The .s format to match the instruction with.
|
||||
dag ResultInst = Result; // The MCInst to generate.
|
||||
|
||||
// Predicates - Predicates that must be true for this to match.
|
||||
list<Predicate> Predicates = [];
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AsmWriter - This class can be implemented by targets that need to customize
|
||||
|
@ -1258,6 +1258,17 @@ include "X86InstrCompiler.td"
|
||||
// Assembler Aliases
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// movsx aliases
|
||||
def : InstAlias<(outs GR32:$dst), (ins GR8 :$src),
|
||||
"movsx $src, $dst",
|
||||
(MOVSX32rr8 GR32:$dst, GR8:$src)>;
|
||||
def : InstAlias<(outs GR32:$dst), (ins GR16:$src),
|
||||
"movsx $src, $dst",
|
||||
(MOVSX32rr16 GR32:$dst, GR16:$src)>;
|
||||
|
||||
|
||||
// TODO: lidtl/lidtq can be opcode aliases, perhaps others.
|
||||
|
||||
def : MnemonicAlias<"iret", "iretl">;
|
||||
def : MnemonicAlias<"sysret", "sysretl">;
|
||||
def : MnemonicAlias<"cbw", "cbtw">;
|
||||
@ -1272,6 +1283,9 @@ def : MnemonicAlias<"popf", "popfl">, Requires<[In32BitMode]>;
|
||||
def : MnemonicAlias<"popf", "popfq">, Requires<[In64BitMode]>;
|
||||
def : MnemonicAlias<"popfd", "popfl">;
|
||||
|
||||
// FIXME: This is wrong for "push reg". "push %bx" should turn into pushw in
|
||||
// all modes. However: "push (addr)" and "push $42" should default to
|
||||
// pushl/pushq depending on the current mode. Similar for "pop %bx"
|
||||
def : MnemonicAlias<"push", "pushl">, Requires<[In32BitMode]>;
|
||||
def : MnemonicAlias<"push", "pushq">, Requires<[In64BitMode]>;
|
||||
def : MnemonicAlias<"pushf", "pushfl">, Requires<[In32BitMode]>;
|
||||
|
Loading…
Reference in New Issue
Block a user