1e8d8bef9SDimitry Andric //===-- CSKYAsmBackend.h - CSKY Assembler Backend -------------------------===// 2e8d8bef9SDimitry Andric // 3e8d8bef9SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e8d8bef9SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e8d8bef9SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e8d8bef9SDimitry Andric // 7e8d8bef9SDimitry Andric //===----------------------------------------------------------------------===// 8e8d8bef9SDimitry Andric 9e8d8bef9SDimitry Andric #ifndef LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYASMBACKEND_H 10e8d8bef9SDimitry Andric #define LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYASMBACKEND_H 11e8d8bef9SDimitry Andric 12fe6060f1SDimitry Andric #include "MCTargetDesc/CSKYFixupKinds.h" 13e8d8bef9SDimitry Andric #include "llvm/MC/MCAsmBackend.h" 1481ad6265SDimitry Andric #include "llvm/MC/MCSubtargetInfo.h" 15e8d8bef9SDimitry Andric #include "llvm/MC/MCTargetOptions.h" 16e8d8bef9SDimitry Andric 17e8d8bef9SDimitry Andric namespace llvm { 18e8d8bef9SDimitry Andric 19e8d8bef9SDimitry Andric class CSKYAsmBackend : public MCAsmBackend { 20e8d8bef9SDimitry Andric 21e8d8bef9SDimitry Andric public: 22e8d8bef9SDimitry Andric CSKYAsmBackend(const MCSubtargetInfo &STI, const MCTargetOptions &OP) 235f757f3fSDimitry Andric : MCAsmBackend(llvm::endianness::little) {} 24e8d8bef9SDimitry Andric 25fe6060f1SDimitry Andric unsigned int getNumFixupKinds() const override { 26fe6060f1SDimitry Andric return CSKY::NumTargetFixupKinds; 27fe6060f1SDimitry Andric } 28fe6060f1SDimitry Andric 29e8d8bef9SDimitry Andric void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, 30e8d8bef9SDimitry Andric const MCValue &Target, MutableArrayRef<char> Data, 31e8d8bef9SDimitry Andric uint64_t Value, bool IsResolved, 32e8d8bef9SDimitry Andric const MCSubtargetInfo *STI) const override; 33fe6060f1SDimitry Andric 34fe6060f1SDimitry Andric const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override; 35fe6060f1SDimitry Andric 36*0fca6ea1SDimitry Andric bool fixupNeedsRelaxation(const MCFixup &Fixup, 37*0fca6ea1SDimitry Andric uint64_t Value) const override; 38fe6060f1SDimitry Andric 39e8d8bef9SDimitry Andric void relaxInstruction(MCInst &Inst, 40e8d8bef9SDimitry Andric const MCSubtargetInfo &STI) const override; 41fe6060f1SDimitry Andric 4281ad6265SDimitry Andric bool mayNeedRelaxation(const MCInst &Inst, 4381ad6265SDimitry Andric const MCSubtargetInfo &STI) const override; 4481ad6265SDimitry Andric 45*0fca6ea1SDimitry Andric bool fixupNeedsRelaxationAdvanced(const MCAssembler &Asm, 46*0fca6ea1SDimitry Andric const MCFixup &Fixup, bool Resolved, 4781ad6265SDimitry Andric uint64_t Value, 4881ad6265SDimitry Andric const MCRelaxableFragment *DF, 4981ad6265SDimitry Andric const bool WasForced) const override; 5081ad6265SDimitry Andric 51349cc55cSDimitry Andric bool writeNopData(raw_ostream &OS, uint64_t Count, 52349cc55cSDimitry Andric const MCSubtargetInfo *STI) const override; 53fe6060f1SDimitry Andric 5481ad6265SDimitry Andric bool shouldForceRelocation(const MCAssembler &Asm, const MCFixup &Fixup, 555f757f3fSDimitry Andric const MCValue &Target, 565f757f3fSDimitry Andric const MCSubtargetInfo *STI) override; 5781ad6265SDimitry Andric 58e8d8bef9SDimitry Andric std::unique_ptr<MCObjectTargetWriter> 59e8d8bef9SDimitry Andric createObjectTargetWriter() const override; 60e8d8bef9SDimitry Andric }; 61e8d8bef9SDimitry Andric } // namespace llvm 62e8d8bef9SDimitry Andric 63e8d8bef9SDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYASMBACKEND_H 64