mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-26 07:34:14 +00:00
Add an option to not print the alias of an instruction. It defaults to "print
the alias". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129485 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7adf862eb2
commit
eef965f04b
@ -591,9 +591,10 @@ class MnemonicAlias<string From, string To> {
|
||||
/// InstAlias - This defines an alternate assembly syntax that is allowed to
|
||||
/// match an instruction that has a different (more canonical) assembly
|
||||
/// representation.
|
||||
class InstAlias<string Asm, dag Result> {
|
||||
class InstAlias<string Asm, dag Result, bit Emit = 0b1> {
|
||||
string AsmString = Asm; // The .s format to match the instruction with.
|
||||
dag ResultInst = Result; // The MCInst to generate.
|
||||
bit EmitAlias = Emit; // Emit the alias instead of what's aliased.
|
||||
|
||||
// Predicates - Predicates that must be true for this to match.
|
||||
list<Predicate> Predicates = [];
|
||||
|
@ -1534,8 +1534,10 @@ def : InstAlias<"mov $seg, $mem", (MOV32ms i32mem:$mem, SEGMENT_REG:$seg)>;
|
||||
def : InstAlias<"movq $imm, $reg", (MOV64ri GR64:$reg, i64imm:$imm)>;
|
||||
|
||||
// Match 'movq GR64, MMX' as an alias for movd.
|
||||
def : InstAlias<"movq $src, $dst", (MMX_MOVD64to64rr VR64:$dst, GR64:$src)>;
|
||||
def : InstAlias<"movq $src, $dst", (MMX_MOVD64from64rr GR64:$dst, VR64:$src)>;
|
||||
def : InstAlias<"movq $src, $dst",
|
||||
(MMX_MOVD64to64rr VR64:$dst, GR64:$src), 0b0>;
|
||||
def : InstAlias<"movq $src, $dst",
|
||||
(MMX_MOVD64from64rr GR64:$dst, VR64:$src), 0b0>;
|
||||
|
||||
// movsd with no operands (as opposed to the SSE scalar move of a double) is an
|
||||
// alias for movsl. (as in rep; movsd)
|
||||
|
@ -840,6 +840,8 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
|
||||
I = AllInstAliases.begin(), E = AllInstAliases.end(); I != E; ++I) {
|
||||
CodeGenInstAlias *Alias = new CodeGenInstAlias(*I, Target);
|
||||
const Record *R = *I;
|
||||
if (!R->getValueAsBit("EmitAlias"))
|
||||
continue; // We were told not to emit the alias, but to emit the aliasee.
|
||||
const DagInit *DI = R->getValueAsDag("ResultInst");
|
||||
const DefInit *Op = dynamic_cast<const DefInit*>(DI->getOperator());
|
||||
AliasMap[getQualifiedName(Op->getDef())].push_back(Alias);
|
||||
|
Loading…
x
Reference in New Issue
Block a user