diff options
Diffstat (limited to 'gnu/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp')
| -rw-r--r-- | gnu/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gnu/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp b/gnu/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp new file mode 100644 index 00000000000..de0a5f9e84e --- /dev/null +++ b/gnu/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp @@ -0,0 +1,66 @@ +//===-- Nios2InstPrinter.cpp - Convert Nios2 MCInst to assembly syntax-----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This class prints an Nios2 MCInst to a .s file. +// +//===----------------------------------------------------------------------===// + +#include "Nios2InstPrinter.h" + +#include "Nios2InstrInfo.h" +#include "llvm/MC/MCExpr.h" +#include "llvm/MC/MCInst.h" +#include "llvm/MC/MCInstrInfo.h" +#include "llvm/Support/raw_ostream.h" +using namespace llvm; + +#define DEBUG_TYPE "asm-printer" + +#define PRINT_ALIAS_INSTR +#include "Nios2GenAsmWriter.inc" + +void Nios2InstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const { + OS << getRegisterName(RegNo); +} + +void Nios2InstPrinter::printInst(const MCInst *MI, raw_ostream &O, + StringRef Annot, const MCSubtargetInfo &STI) { + // Try to print any aliases first. + if (!printAliasInstr(MI, STI, O)) + printInstruction(MI, STI, O); + printAnnotation(O, Annot); +} + +void Nios2InstPrinter::printOperand(const MCInst *MI, int OpNo, + const MCSubtargetInfo &STI, + raw_ostream &O) { + const MCOperand &Op = MI->getOperand(OpNo); + if (Op.isReg()) { + printRegName(O, Op.getReg()); + return; + } + + if (Op.isImm()) { + O << Op.getImm(); + return; + } + + assert(Op.isExpr() && "unknown operand kind in printOperand"); + Op.getExpr()->print(O, &MAI, true); +} + +void Nios2InstPrinter::printMemOperand(const MCInst *MI, int opNum, + const MCSubtargetInfo &STI, + raw_ostream &O, const char *Modifier) { + // Load/Store memory operands -- imm($reg) + printOperand(MI, opNum + 1, STI, O); + O << "("; + printOperand(MI, opNum, STI, O); + O << ")"; +} |
