brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 8b24e7b Raw
147 lines · c
1//===-- ARMMCAsmInfo.h - ARM asm properties --------------------*- 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-exception6//7//===----------------------------------------------------------------------===//8//9// This file contains the declaration of the ARMMCAsmInfo class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCASMINFO_H14#define LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCASMINFO_H15 16#include "llvm/MC/MCAsmInfoCOFF.h"17#include "llvm/MC/MCAsmInfoDarwin.h"18#include "llvm/MC/MCAsmInfoELF.h"19#include "llvm/MC/MCExpr.h"20 21namespace llvm {22class Triple;23 24namespace ARM {25void printSpecifierExpr(const MCAsmInfo &MAI, raw_ostream &OS,26                        const MCSpecifierExpr &Expr);27}28 29class ARMMCAsmInfoDarwin : public MCAsmInfoDarwin {30  virtual void anchor();31 32public:33  explicit ARMMCAsmInfoDarwin(const Triple &TheTriple);34  void printSpecifierExpr(raw_ostream &OS,35                          const MCSpecifierExpr &Expr) const override {36    ARM::printSpecifierExpr(*this, OS, Expr);37  }38  bool evaluateAsRelocatableImpl(const MCSpecifierExpr &, MCValue &,39                                 const MCAssembler *) const override {40    return false;41  }42};43 44class ARMELFMCAsmInfo : public MCAsmInfoELF {45  void anchor() override;46 47public:48  explicit ARMELFMCAsmInfo(const Triple &TT);49 50  void setUseIntegratedAssembler(bool Value) override;51  void printSpecifierExpr(raw_ostream &OS,52                          const MCSpecifierExpr &Expr) const override {53    ARM::printSpecifierExpr(*this, OS, Expr);54  }55  bool evaluateAsRelocatableImpl(const MCSpecifierExpr &, MCValue &,56                                 const MCAssembler *) const override {57    return false;58  }59};60 61class ARMCOFFMCAsmInfoMicrosoft : public MCAsmInfoMicrosoft {62  void anchor() override;63 64public:65  explicit ARMCOFFMCAsmInfoMicrosoft();66  void printSpecifierExpr(raw_ostream &OS,67                          const MCSpecifierExpr &Expr) const override {68    ARM::printSpecifierExpr(*this, OS, Expr);69  }70  bool evaluateAsRelocatableImpl(const MCSpecifierExpr &, MCValue &,71                                 const MCAssembler *) const override {72    return false;73  }74};75 76class ARMCOFFMCAsmInfoGNU : public MCAsmInfoGNUCOFF {77  void anchor() override;78 79public:80  explicit ARMCOFFMCAsmInfoGNU();81  void printSpecifierExpr(raw_ostream &OS,82                          const MCSpecifierExpr &Expr) const override {83    ARM::printSpecifierExpr(*this, OS, Expr);84  }85  bool evaluateAsRelocatableImpl(const MCSpecifierExpr &, MCValue &,86                                 const MCAssembler *) const override {87    return false;88  }89};90 91namespace ARM {92using Specifier = uint16_t;93enum {94  S_None,95  S_COFF_SECREL,96 97  S_HI16 =98      MCSymbolRefExpr::FirstTargetSpecifier, // The R_ARM_MOVT_ABS relocation99                                             // (:upper16: in the .s file)100  S_LO16, // The R_ARM_MOVW_ABS_NC relocation (:lower16: in the .s file)101 102  S_HI_8_15, // The R_ARM_THM_ALU_ABS_G3    relocation (:upper8_15: in103             // the .s file)104  S_HI_0_7,  // The R_ARM_THM_ALU_ABS_G2_NC relocation (:upper0_8: in the105             // .s file)106  S_LO_8_15, // The R_ARM_THM_ALU_ABS_G1_NC relocation (:lower8_15: in107             // the .s file)108  S_LO_0_7,  // The R_ARM_THM_ALU_ABS_G0_NC relocation (:lower0_7: in the109             // .s file)110 111  S_ARM_NONE,112  S_FUNCDESC,113  S_GOT,114  S_GOTFUNCDESC,115  S_GOTOFF,116  S_GOTOFFFUNCDESC,117  S_GOTTPOFF,118  S_GOTTPOFF_FDPIC,119  S_GOT_PREL,120  S_PLT,121  S_PREL31,122  S_SBREL,123  S_TARGET1,124  S_TARGET2,125  S_TLSCALL,126  S_TLSDESC,127  S_TLSDESCSEQ,128  S_TLSGD,129  S_TLSGD_FDPIC,130  S_TLSLDM,131  S_TLSLDM_FDPIC,132  S_TLSLDO,133  S_TPOFF,134};135 136const MCSpecifierExpr *createUpper16(const MCExpr *Expr, MCContext &Ctx);137const MCSpecifierExpr *createLower16(const MCExpr *Expr, MCContext &Ctx);138const MCSpecifierExpr *createUpper8_15(const MCExpr *Expr, MCContext &Ctx);139const MCSpecifierExpr *createUpper0_7(const MCExpr *Expr, MCContext &Ctx);140const MCSpecifierExpr *createLower8_15(const MCExpr *Expr, MCContext &Ctx);141const MCSpecifierExpr *createLower0_7(const MCExpr *Expr, MCContext &Ctx);142}143 144} // namespace llvm145 146#endif147