1 //===-- Nios2InstPrinter.cpp - Convert Nios2 MCInst to assembly syntax-----===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This class prints an Nios2 MCInst to a .s file. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "Nios2InstPrinter.h" 15 16 #include "Nios2InstrInfo.h" 17 #include "llvm/MC/MCExpr.h" 18 #include "llvm/MC/MCInst.h" 19 #include "llvm/MC/MCInstrInfo.h" 20 #include "llvm/Support/raw_ostream.h" 21 using namespace llvm; 22 23 #define DEBUG_TYPE "asm-printer" 24 25 #define PRINT_ALIAS_INSTR 26 #include "Nios2GenAsmWriter.inc" 27 28 void Nios2InstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const { 29 OS << getRegisterName(RegNo); 30 } 31 32 void Nios2InstPrinter::printInst(const MCInst *MI, raw_ostream &O, 33 StringRef Annot, const MCSubtargetInfo &STI) { 34 // Try to print any aliases first. 35 if (!printAliasInstr(MI, STI, O)) 36 printInstruction(MI, STI, O); 37 printAnnotation(O, Annot); 38 } 39 40 void Nios2InstPrinter::printOperand(const MCInst *MI, int OpNo, 41 const MCSubtargetInfo &STI, 42 raw_ostream &O) { 43 const MCOperand &Op = MI->getOperand(OpNo); 44 if (Op.isReg()) { 45 printRegName(O, Op.getReg()); 46 return; 47 } 48 49 if (Op.isImm()) { 50 O << Op.getImm(); 51 return; 52 } 53 54 assert(Op.isExpr() && "unknown operand kind in printOperand"); 55 Op.getExpr()->print(O, &MAI, true); 56 } 57 58 void Nios2InstPrinter::printMemOperand(const MCInst *MI, int opNum, 59 const MCSubtargetInfo &STI, 60 raw_ostream &O, const char *Modifier) { 61 // Load/Store memory operands -- imm($reg) 62 printOperand(MI, opNum + 1, STI, O); 63 O << "("; 64 printOperand(MI, opNum, STI, O); 65 O << ")"; 66 } 67