1//===-- MipsAsmBackend.h - Mips Asm Backend ------------------------------===//
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 MipsAsmBackend class.
10//
11//===----------------------------------------------------------------------===//
12//
13
14#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSASMBACKEND_H
15#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSASMBACKEND_H
16
17#include "MCTargetDesc/MipsFixupKinds.h"
18#include "llvm/MC/MCAsmBackend.h"
19#include "llvm/TargetParser/Triple.h"
20
21namespace llvm {
22
23class MCAssembler;
24struct MCFixupKindInfo;
25class MCRegisterInfo;
26class Target;
27
28class MipsAsmBackend : public MCAsmBackend {
29 Triple TheTriple;
30 bool IsN32;
31
32public:
33 MipsAsmBackend(const Target &T, const MCRegisterInfo &MRI, const Triple &TT,
34 StringRef CPU, bool N32)
35 : MCAsmBackend(TT.isLittleEndian() ? llvm::endianness::little
36 : llvm::endianness::big),
37 TheTriple(TT), IsN32(N32) {}
38
39 std::unique_ptr<MCObjectTargetWriter>
40 createObjectTargetWriter() const override;
41
42 void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
43 const MCValue &Target, MutableArrayRef<char> Data,
44 uint64_t Value, bool IsResolved,
45 const MCSubtargetInfo *STI) const override;
46
47 std::optional<MCFixupKind> getFixupKind(StringRef Name) const override;
48 const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override;
49
50 unsigned getNumFixupKinds() const override {
51 return Mips::NumTargetFixupKinds;
52 }
53
54 bool writeNopData(raw_ostream &OS, uint64_t Count,
55 const MCSubtargetInfo *STI) const override;
56
57 bool shouldForceRelocation(const MCAssembler &Asm, const MCFixup &Fixup,
58 const MCValue &Target,
59 const MCSubtargetInfo *STI) override;
60
61 bool isMicroMips(const MCSymbol *Sym) const override;
62}; // class MipsAsmBackend
63
64} // namespace
65
66#endif
67