]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/Nios2/InstPrinter/Nios2InstPrinter.cpp
MFC r345703:
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / Nios2 / InstPrinter / Nios2InstPrinter.cpp
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 }