1*9880d681SAndroid Build Coastguard Worker //===-- HexagonAsmPrinter.h - Print machine code to an Hexagon .s file ----===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // Hexagon Assembly printer class. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H 15*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker #include "Hexagon.h" 18*9880d681SAndroid Build Coastguard Worker #include "HexagonTargetMachine.h" 19*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/AsmPrinter.h" 20*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Compiler.h" 21*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/raw_ostream.h" 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker namespace llvm { 24*9880d681SAndroid Build Coastguard Worker class HexagonAsmPrinter : public AsmPrinter { 25*9880d681SAndroid Build Coastguard Worker const HexagonSubtarget *Subtarget; 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker public: 28*9880d681SAndroid Build Coastguard Worker explicit HexagonAsmPrinter(TargetMachine &TM, 29*9880d681SAndroid Build Coastguard Worker std::unique_ptr<MCStreamer> Streamer); 30*9880d681SAndroid Build Coastguard Worker runOnMachineFunction(MachineFunction & Fn)31*9880d681SAndroid Build Coastguard Worker bool runOnMachineFunction(MachineFunction &Fn) override { 32*9880d681SAndroid Build Coastguard Worker Subtarget = &Fn.getSubtarget<HexagonSubtarget>(); 33*9880d681SAndroid Build Coastguard Worker return AsmPrinter::runOnMachineFunction(Fn); 34*9880d681SAndroid Build Coastguard Worker } 35*9880d681SAndroid Build Coastguard Worker getPassName()36*9880d681SAndroid Build Coastguard Worker const char *getPassName() const override { 37*9880d681SAndroid Build Coastguard Worker return "Hexagon Assembly Printer"; 38*9880d681SAndroid Build Coastguard Worker } 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker bool isBlockOnlyReachableByFallthrough( 41*9880d681SAndroid Build Coastguard Worker const MachineBasicBlock *MBB) const override; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker void EmitInstruction(const MachineInstr *MI) override; 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker void HexagonProcessInstruction(MCInst &Inst, 46*9880d681SAndroid Build Coastguard Worker const MachineInstr &MBB); 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O); 50*9880d681SAndroid Build Coastguard Worker bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 51*9880d681SAndroid Build Coastguard Worker unsigned AsmVariant, const char *ExtraCode, 52*9880d681SAndroid Build Coastguard Worker raw_ostream &OS) override; 53*9880d681SAndroid Build Coastguard Worker bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 54*9880d681SAndroid Build Coastguard Worker unsigned AsmVariant, const char *ExtraCode, 55*9880d681SAndroid Build Coastguard Worker raw_ostream &OS) override; 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker static const char *getRegisterName(unsigned RegNo); 58*9880d681SAndroid Build Coastguard Worker }; 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker } // end of llvm namespace 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker #endif 63