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