1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
//===-- PPCMCAsmInfo.h - PPC asm properties --------------------*- C++ -*--===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains the declarations of the PowerPC MCAsmInfo classes.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H
#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H
#include "llvm/MC/MCAsmInfoELF.h"
#include "llvm/MC/MCAsmInfoXCOFF.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCValue.h"
namespace llvm {
class Triple;
class PPCELFMCAsmInfo : public MCAsmInfoELF {
void anchor() override;
public:
explicit PPCELFMCAsmInfo(bool is64Bit, const Triple &);
void printSpecifierExpr(raw_ostream &OS,
const MCSpecifierExpr &Expr) const override;
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
const MCAssembler *Asm) const override;
};
class PPCXCOFFMCAsmInfo : public MCAsmInfoXCOFF {
void anchor() override;
public:
explicit PPCXCOFFMCAsmInfo(bool is64Bit, const Triple &);
void printSpecifierExpr(raw_ostream &OS,
const MCSpecifierExpr &Expr) const override;
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
const MCAssembler *Asm) const override;
};
namespace PPC {
enum Specifier {
S_None,
S_LO,
S_HI,
S_HA,
S_HIGH,
S_HIGHA,
S_HIGHER,
S_HIGHERA,
S_HIGHEST,
S_HIGHESTA,
S_AIX_TLSGD, // symbol@gd
S_AIX_TLSGDM, // symbol@m
S_AIX_TLSIE, // symbol@ie
S_AIX_TLSLD, // symbol@ld
S_AIX_TLSLE, // symbol@le
S_AIX_TLSML, // symbol@ml
S_DTPMOD, // symbol@dtpmod
S_DTPREL, // symbol@dprel
S_DTPREL_HA, // symbol@dtprel@ha
S_DTPREL_HI, // symbol@dtprel@h
S_DTPREL_HIGH, // symbol@dtprel@high
S_DTPREL_HIGHA, // symbol@dtprel@higha
S_DTPREL_HIGHER, // symbol@dtprel@higher
S_DTPREL_HIGHERA, // symbol@dtprel@highera
S_DTPREL_HIGHEST, // symbol@dtprel@highest
S_DTPREL_HIGHESTA, // symbol@dtprel@highesta
S_DTPREL_LO, // symbol@dtprel@l
S_GOT, // symbol@got
S_GOT_DTPREL, // symbol@got@dtprel
S_GOT_DTPREL_HA, // symbol@got@dtprel@ha
S_GOT_DTPREL_HI, // symbol@got@dtprel@h
S_GOT_DTPREL_LO, // symbol@got@dtprel@l
S_GOT_HA, // symbol@got@ha
S_GOT_HI, // symbol@got@h
S_GOT_LO, // symbol@got@l
S_GOT_PCREL, // symbol@got@pcrel
S_GOT_TLSGD, // symbol@got@tlsgd
S_GOT_TLSGD_HA, // symbol@got@tlsgd@ha
S_GOT_TLSGD_HI, // symbol@got@tlsgd@h
S_GOT_TLSGD_LO, // symbol@got@tlsgd@l
S_GOT_TLSGD_PCREL, // symbol@got@tlsgd@pcrel
S_GOT_TLSLD, // symbol@got@tlsld
S_GOT_TLSLD_HA, // symbol@got@tlsld@ha
S_GOT_TLSLD_HI, // symbol@got@tlsld@h
S_GOT_TLSLD_LO, // symbol@got@tlsld@l
S_GOT_TLSLD_PCREL, // symbol@got@tlsld@pcrel
S_GOT_TPREL, // symbol@got@tprel
S_GOT_TPREL_HA, // symbol@got@tprel@ha
S_GOT_TPREL_HI, // symbol@got@tprel@h
S_GOT_TPREL_LO, // symbol@got@tprel@l
S_GOT_TPREL_PCREL, // symbol@got@tprel@pcrel
S_L, // symbol@l
S_LOCAL, // symbol@local
S_NOTOC, // symbol@notoc
S_PCREL,
S_PCREL_OPT, // .reloc expr, R_PPC64_PCREL_OPT, expr
S_PLT, // symbol@plt
S_TLS, // symbol@tls
S_TLSGD, // symbol@tlsgd
S_TLSLD, // symbol@tlsld
S_TLS_PCREL, // symbol@tls@pcrel
S_TOC, // symbol@toc
S_TOCBASE, // symbol@tocbase
S_TOC_HA, // symbol@toc@ha
S_TOC_HI, // symbol@toc@h
S_TOC_LO, // symbol@toc@l
S_TPREL, // symbol@tprel
S_TPREL_HA, // symbol@tprel@ha
S_TPREL_HI, // symbol@tprel@h
S_TPREL_HIGH, // symbol@tprel@high
S_TPREL_HIGHA, // symbol@tprel@higha
S_TPREL_HIGHER, // symbol@tprel@higher
S_TPREL_HIGHERA, // symbol@tprel@highera
S_TPREL_HIGHEST, // symbol@tprel@highest
S_TPREL_HIGHESTA, // symbol@tprel@highesta
S_TPREL_LO, // symbol@tprel@l
S_U, // symbol@u
};
bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);
}
namespace PPCMCExpr {
using Specifier = uint16_t;
}
static inline uint16_t getSpecifier(const MCSymbolRefExpr *SRE) {
return SRE->getKind();
}
} // namespace llvm
#endif
|