140 lines · c
1//===-- PPCMCAsmInfo.h - PPC 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 declarations of the PowerPC MCAsmInfo classes.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H14#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H15 16#include "llvm/MC/MCAsmInfoELF.h"17#include "llvm/MC/MCAsmInfoXCOFF.h"18#include "llvm/MC/MCExpr.h"19#include "llvm/MC/MCValue.h"20 21namespace llvm {22class Triple;23 24class PPCELFMCAsmInfo : public MCAsmInfoELF {25 void anchor() override;26 27public:28 explicit PPCELFMCAsmInfo(bool is64Bit, const Triple &);29 void printSpecifierExpr(raw_ostream &OS,30 const MCSpecifierExpr &Expr) const override;31 bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,32 const MCAssembler *Asm) const override;33};34 35class PPCXCOFFMCAsmInfo : public MCAsmInfoXCOFF {36public:37 explicit PPCXCOFFMCAsmInfo(bool is64Bit, const Triple &);38 void printSpecifierExpr(raw_ostream &OS,39 const MCSpecifierExpr &Expr) const override;40 bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,41 const MCAssembler *Asm) const override;42};43 44namespace PPC {45enum Specifier {46 S_None,47 48 S_LO,49 S_HI,50 S_HA,51 S_HIGH,52 S_HIGHA,53 S_HIGHER,54 S_HIGHERA,55 S_HIGHEST,56 S_HIGHESTA,57 58 S_AIX_TLSGD, // symbol@gd59 S_AIX_TLSGDM, // symbol@m60 S_AIX_TLSIE, // symbol@ie61 S_AIX_TLSLD, // symbol@ld62 S_AIX_TLSLE, // symbol@le63 S_AIX_TLSML, // symbol@ml64 S_DTPMOD, // symbol@dtpmod65 S_DTPREL, // symbol@dprel66 S_DTPREL_HA, // symbol@dtprel@ha67 S_DTPREL_HI, // symbol@dtprel@h68 S_DTPREL_HIGH, // symbol@dtprel@high69 S_DTPREL_HIGHA, // symbol@dtprel@higha70 S_DTPREL_HIGHER, // symbol@dtprel@higher71 S_DTPREL_HIGHERA, // symbol@dtprel@highera72 S_DTPREL_HIGHEST, // symbol@dtprel@highest73 S_DTPREL_HIGHESTA, // symbol@dtprel@highesta74 S_DTPREL_LO, // symbol@dtprel@l75 S_GOT, // symbol@got76 S_GOT_DTPREL, // symbol@got@dtprel77 S_GOT_DTPREL_HA, // symbol@got@dtprel@ha78 S_GOT_DTPREL_HI, // symbol@got@dtprel@h79 S_GOT_DTPREL_LO, // symbol@got@dtprel@l80 S_GOT_HA, // symbol@got@ha81 S_GOT_HI, // symbol@got@h82 S_GOT_LO, // symbol@got@l83 S_GOT_PCREL, // symbol@got@pcrel84 S_GOT_TLSGD, // symbol@got@tlsgd85 S_GOT_TLSGD_HA, // symbol@got@tlsgd@ha86 S_GOT_TLSGD_HI, // symbol@got@tlsgd@h87 S_GOT_TLSGD_LO, // symbol@got@tlsgd@l88 S_GOT_TLSGD_PCREL, // symbol@got@tlsgd@pcrel89 S_GOT_TLSLD, // symbol@got@tlsld90 S_GOT_TLSLD_HA, // symbol@got@tlsld@ha91 S_GOT_TLSLD_HI, // symbol@got@tlsld@h92 S_GOT_TLSLD_LO, // symbol@got@tlsld@l93 S_GOT_TLSLD_PCREL, // symbol@got@tlsld@pcrel94 S_GOT_TPREL, // symbol@got@tprel95 S_GOT_TPREL_HA, // symbol@got@tprel@ha96 S_GOT_TPREL_HI, // symbol@got@tprel@h97 S_GOT_TPREL_LO, // symbol@got@tprel@l98 S_GOT_TPREL_PCREL, // symbol@got@tprel@pcrel99 S_L, // symbol@l100 S_LOCAL, // symbol@local101 S_NOTOC, // symbol@notoc102 S_PCREL,103 S_PCREL_OPT, // .reloc expr, R_PPC64_PCREL_OPT, expr104 S_PLT, // symbol@plt105 S_TLS, // symbol@tls106 S_TLSGD, // symbol@tlsgd107 S_TLSLD, // symbol@tlsld108 S_TLS_PCREL, // symbol@tls@pcrel109 S_TOC, // symbol@toc110 S_TOCBASE, // symbol@tocbase111 S_TOC_HA, // symbol@toc@ha112 S_TOC_HI, // symbol@toc@h113 S_TOC_LO, // symbol@toc@l114 S_TPREL, // symbol@tprel115 S_TPREL_HA, // symbol@tprel@ha116 S_TPREL_HI, // symbol@tprel@h117 S_TPREL_HIGH, // symbol@tprel@high118 S_TPREL_HIGHA, // symbol@tprel@higha119 S_TPREL_HIGHER, // symbol@tprel@higher120 S_TPREL_HIGHERA, // symbol@tprel@highera121 S_TPREL_HIGHEST, // symbol@tprel@highest122 S_TPREL_HIGHESTA, // symbol@tprel@highesta123 S_TPREL_LO, // symbol@tprel@l124 S_U, // symbol@u125};126 127bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);128}129 130namespace PPCMCExpr {131using Specifier = uint16_t;132}133 134static inline uint16_t getSpecifier(const MCSymbolRefExpr *SRE) {135 return SRE->getKind();136}137} // namespace llvm138 139#endif140