131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//= MSP430InstPrinter.h - Convert MSP430 MCInst to assembly syntax -*- C++ -*-//
2d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//
3d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//                     The LLVM Compiler Infrastructure
4d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//
5d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky// This file is distributed under the University of Illinois Open Source
6d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky// License. See LICENSE.TXT for details.
7d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//
8d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//===----------------------------------------------------------------------===//
9d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//
10d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky// This class prints a MSP430 MCInst to a .s file.
11d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//
12d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky//===----------------------------------------------------------------------===//
13d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
14d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky#ifndef MSP430INSTPRINTER_H
15d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky#define MSP430INSTPRINTER_H
16d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
17d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky#include "llvm/MC/MCInstPrinter.h"
18d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
19d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewyckynamespace llvm {
20d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky  class MCOperand;
21d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
22d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky  class MSP430InstPrinter : public MCInstPrinter {
23d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky  public:
2417463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper    MSP430InstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
2517463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper                      const MCRegisterInfo &MRI)
2617463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper      : MCInstPrinter(MAI, MII, MRI) {}
27d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override;
29d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
30d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    // Autogenerated by tblgen.
31d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    void printInstruction(const MCInst *MI, raw_ostream &O);
32d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    static const char *getRegisterName(unsigned RegNo);
33d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
34d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O,
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                      const char *Modifier = nullptr);
36d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    void printPCRelImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
37d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    void printSrcMemOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O,
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            const char *Modifier = nullptr);
39d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky    void printCCOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
40d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
41d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky  };
42d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky}
43d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky
44d0669493b8d42544a94bddcd94d635e0701f6415Nick Lewycky#endif
45