File: PPCMCAsmInfo.h

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,245,064 kB
  • sloc: cpp: 7,619,731; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,676; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (141 lines) | stat: -rw-r--r-- 4,688 bytes parent folder | download | duplicates (2)
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