mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Decode and pretty print inline asm operand descriptors.
The INLINEASM MachineInstrs have an immediate operand describing each original inline asm operand. Decode the bits in MachineInstr::print() so it is easier to read: INLINEASM <es:rorq $1,$0>, $0:[regdef], %vreg0<def>, %vreg1<def>, $1:[imm], 1, $2:[reguse] [tiedto:$0], %vreg2, %vreg3, $3:[regdef-ec], %EFLAGS<earlyclobber,imp-def> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133901 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ca08dcc483
commit
7a2ecd3f99
@ -1367,6 +1367,8 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
// Print the rest of the operands.
|
||||
bool OmittedAnyCallClobbers = false;
|
||||
bool FirstOp = true;
|
||||
unsigned AsmDescOp = ~0u;
|
||||
unsigned AsmOpCount = 0;
|
||||
|
||||
if (isInlineAsm()) {
|
||||
// Print asm string.
|
||||
@ -1380,7 +1382,7 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
|
||||
OS << " [alignstack]";
|
||||
|
||||
StartOp = InlineAsm::MIOp_FirstOperand;
|
||||
StartOp = AsmDescOp = InlineAsm::MIOp_FirstOperand;
|
||||
FirstOp = false;
|
||||
}
|
||||
|
||||
@ -1434,6 +1436,25 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
MO.print(OS, TM);
|
||||
} else if (TM && (isInsertSubreg() || isRegSequence()) && MO.isImm()) {
|
||||
OS << TM->getRegisterInfo()->getSubRegIndexName(MO.getImm());
|
||||
} else if (i == AsmDescOp && MO.isImm()) {
|
||||
// Pretty print the inline asm operand descriptor.
|
||||
OS << '$' << AsmOpCount++;
|
||||
unsigned Flag = MO.getImm();
|
||||
switch (InlineAsm::getKind(Flag)) {
|
||||
case InlineAsm::Kind_RegUse: OS << ":[reguse]"; break;
|
||||
case InlineAsm::Kind_RegDef: OS << ":[regdef]"; break;
|
||||
case InlineAsm::Kind_Imm: OS << ":[imm]"; break;
|
||||
case InlineAsm::Kind_Mem: OS << ":[mem]"; break;
|
||||
case InlineAsm::Kind_RegDefEarlyClobber: OS << ":[regdef-ec]"; break;
|
||||
default: OS << ":[??" << InlineAsm::getKind(Flag) << ']'; break;
|
||||
}
|
||||
|
||||
unsigned TiedTo = 0;
|
||||
if (InlineAsm::isUseOperandTiedToDef(Flag, TiedTo))
|
||||
OS << " [tiedto:$" << TiedTo << ']';
|
||||
|
||||
// Compute the index of the next operand descriptor.
|
||||
AsmDescOp += 1 + InlineAsm::getNumOperandRegisters(Flag);
|
||||
} else
|
||||
MO.print(OS, TM);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user