11d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//==- SystemZInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-==// 21d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 31d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// The LLVM Compiler Infrastructure 41d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 51d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file is distributed under the University of Illinois Open Source 61d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// License. See LICENSE.TXT for details. 71d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 81d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 91d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This class prints a SystemZ MCInst to a .s file. 111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#ifndef LLVM_SYSTEMZINSTPRINTER_H 151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define LLVM_SYSTEMZINSTPRINTER_H 161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/MC/MCInstPrinter.h" 181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/Support/Compiler.h" 191d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 201d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandnamespace llvm { 211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandclass MCOperand; 221d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 231d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandclass SystemZInstPrinter : public MCInstPrinter { 241d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandpublic: 251d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand SystemZInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 261d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand const MCRegisterInfo &MRI) 271d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand : MCInstPrinter(MAI, MII, MRI) {} 281d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 291d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Automatically generated by tblgen. 301d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printInstruction(const MCInst *MI, raw_ostream &O); 311d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand static const char *getRegisterName(unsigned RegNo); 321d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 331d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Print an address with the given base, displacement and index. 341d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand static void printAddress(unsigned Base, int64_t Disp, unsigned Index, 351d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand raw_ostream &O); 361d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 371d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Print the given operand. 381d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand static void printOperand(const MCOperand &MO, raw_ostream &O); 391d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 401d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Override MCInstPrinter. 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printRegName(raw_ostream &O, unsigned RegNo) const override; 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override; 431d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 441d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandprivate: 451d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Print various types of operand. 461d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printOperand(const MCInst *MI, int OpNum, raw_ostream &O); 471d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printBDAddrOperand(const MCInst *MI, int OpNum, raw_ostream &O); 481d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printBDXAddrOperand(const MCInst *MI, int OpNum, raw_ostream &O); 499188443a2d35352c4e8a2cffd1b4d31d47843b26Richard Sandiford void printBDLAddrOperand(const MCInst *MI, int OpNum, raw_ostream &O); 501d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printU4ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 511d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printU6ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 521d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printS8ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 531d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printU8ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 541d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printS16ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 551d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printU16ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 561d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printS32ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 571d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printU32ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 58c3b20c260ee17a66c6306f81293c75681d8ea0aaRichard Sandiford void printPCRelOperand(const MCInst *MI, int OpNum, raw_ostream &O); 591d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printAccessRegOperand(const MCInst *MI, int OpNum, raw_ostream &O); 601d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 611d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Print the mnemonic for a condition-code mask ("ne", "lh", etc.) 621d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // This forms part of the instruction name rather than the operand list. 631d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand void printCond4Operand(const MCInst *MI, int OpNum, raw_ostream &O); 641d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}; 651d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand} // end namespace llvm 661d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 671d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#endif 68