1 //===-- LoongArchAsmBackend.h - LoongArch Assembler Backend ---*- C++ -*---===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines the LoongArchAsmBackend class. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHASMBACKEND_H 14 #define LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHASMBACKEND_H 15 16 #include "MCTargetDesc/LoongArchBaseInfo.h" 17 #include "MCTargetDesc/LoongArchMCTargetDesc.h" 18 #include "llvm/MC/MCAsmBackend.h" 19 #include "llvm/MC/MCFixupKindInfo.h" 20 #include "llvm/MC/MCSubtargetInfo.h" 21 22 namespace llvm { 23 24 class LoongArchAsmBackend : public MCAsmBackend { 25 uint8_t OSABI; 26 bool Is64Bit; 27 28 public: 29 LoongArchAsmBackend(const MCSubtargetInfo &STI, uint8_t OSABI, bool Is64Bit) 30 : MCAsmBackend(support::little), OSABI(OSABI), Is64Bit(Is64Bit) {} 31 ~LoongArchAsmBackend() override {} 32 33 void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, 34 const MCValue &Target, MutableArrayRef<char> Data, 35 uint64_t Value, bool IsResolved, 36 const MCSubtargetInfo *STI) const override; 37 38 bool shouldForceRelocation(const MCAssembler &Asm, const MCFixup &Fixup, 39 const MCValue &Target) override; 40 41 bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value, 42 const MCRelaxableFragment *DF, 43 const MCAsmLayout &Layout) const override { 44 return false; 45 } 46 47 unsigned getNumFixupKinds() const override { 48 // FIXME: Implement this when we define fixup kind 49 return 0; 50 } 51 52 void relaxInstruction(MCInst &Inst, 53 const MCSubtargetInfo &STI) const override {} 54 55 bool writeNopData(raw_ostream &OS, uint64_t Count, 56 const MCSubtargetInfo *STI) const override; 57 58 std::unique_ptr<MCObjectTargetWriter> 59 createObjectTargetWriter() const override; 60 }; 61 } // end namespace llvm 62 63 #endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHASMBACKEND_H 64