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