//===-- Nios2AsmBackend.h - Nios2 Asm Backend ----------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the Nios2AsmBackend class. // //===----------------------------------------------------------------------===// // #ifndef LLVM_LIB_TARGET_NIOS2_MCTARGETDESC_NIOS2ASMBACKEND_H #define LLVM_LIB_TARGET_NIOS2_MCTARGETDESC_NIOS2ASMBACKEND_H #include "MCTargetDesc/Nios2FixupKinds.h" #include "llvm/ADT/Triple.h" #include "llvm/MC/MCAsmBackend.h" namespace llvm { class MCAssembler; struct MCFixupKindInfo; class Target; class MCObjectWriter; class Nios2AsmBackend : public MCAsmBackend { Triple::OSType OSType; public: Nios2AsmBackend(const Target &T, Triple::OSType OSType) : MCAsmBackend(support::little), OSType(OSType) {} std::unique_ptr createObjectTargetWriter() const override; bool writeNopData(raw_ostream &OS, uint64_t Count) const override; void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, MutableArrayRef Data, uint64_t Value, bool IsResolved) const override; Optional getFixupKind(StringRef Name) const override; const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override; unsigned getNumFixupKinds() const override { return Nios2::NumTargetFixupKinds; } /// MayNeedRelaxation - Check whether the given instruction may need /// relaxation. /// /// \param Inst - The instruction to test. bool mayNeedRelaxation(const MCInst &Inst) const override { return false; } /// fixupNeedsRelaxation - Target specific predicate for whether a given /// fixup requires the associated instruction to be relaxed. bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const override { // FIXME. llvm_unreachable("RelaxInstruction() unimplemented"); return false; } /// RelaxInstruction - Relax the instruction in the given fragment /// to the next wider instruction. /// /// \param Inst - The instruction to relax, which may be the same /// as the output. /// \param [out] Res On return, the relaxed instruction. void relaxInstruction(const MCInst &Inst, const MCSubtargetInfo &STI, MCInst &Res) const override {} }; // class Nios2AsmBackend } // namespace llvm #endif