xref: /freebsd/contrib/llvm-project/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h (revision 36b606ae6aa4b24061096ba18582e0a08ccd5dba)
10b57cec5SDimitry Andric //===-- ARMAsmBackendDarwin.h   ARM Asm Backend Darwin ----------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_ARM_ARMASMBACKENDDARWIN_H
100b57cec5SDimitry Andric #define LLVM_LIB_TARGET_ARM_ARMASMBACKENDDARWIN_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "ARMAsmBackend.h"
130b57cec5SDimitry Andric #include "llvm/BinaryFormat/MachO.h"
1406c3fb27SDimitry Andric #include "llvm/MC/MCContext.h"
150b57cec5SDimitry Andric #include "llvm/MC/MCObjectWriter.h"
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric namespace llvm {
180b57cec5SDimitry Andric class ARMAsmBackendDarwin : public ARMAsmBackend {
190b57cec5SDimitry Andric   const MCRegisterInfo &MRI;
205ffd83dbSDimitry Andric   Triple TT;
210b57cec5SDimitry Andric public:
220b57cec5SDimitry Andric   const MachO::CPUSubTypeARM Subtype;
ARMAsmBackendDarwin(const Target & T,const MCSubtargetInfo & STI,const MCRegisterInfo & MRI)230b57cec5SDimitry Andric   ARMAsmBackendDarwin(const Target &T, const MCSubtargetInfo &STI,
245ffd83dbSDimitry Andric                       const MCRegisterInfo &MRI)
255f757f3fSDimitry Andric       : ARMAsmBackend(T, STI.getTargetTriple().isThumb(),
265f757f3fSDimitry Andric                       llvm::endianness::little),
27349cc55cSDimitry Andric         MRI(MRI), TT(STI.getTargetTriple()),
285ffd83dbSDimitry Andric         Subtype((MachO::CPUSubTypeARM)cantFail(
295ffd83dbSDimitry Andric             MachO::getCPUSubType(STI.getTargetTriple()))) {}
300b57cec5SDimitry Andric 
310b57cec5SDimitry Andric   std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter()320b57cec5SDimitry Andric   createObjectTargetWriter() const override {
335ffd83dbSDimitry Andric     return createARMMachObjectWriter(
345ffd83dbSDimitry Andric         /*Is64Bit=*/false, cantFail(MachO::getCPUType(TT)), Subtype);
350b57cec5SDimitry Andric   }
360b57cec5SDimitry Andric 
37*36b606aeSDimitry Andric   uint64_t generateCompactUnwindEncoding(const MCDwarfFrameInfo *FI,
3806c3fb27SDimitry Andric                                          const MCContext *Ctxt) const override;
390b57cec5SDimitry Andric };
400b57cec5SDimitry Andric } // end namespace llvm
410b57cec5SDimitry Andric 
420b57cec5SDimitry Andric #endif
43