brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 6af1bd7 Raw
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