LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PPCMCExpr.h
Go to the documentation of this file.
1 //===-- PPCMCExpr.h - PPC specific MC expression classes --------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef PPCMCEXPR_H
11 #define PPCMCEXPR_H
12 
13 #include "llvm/MC/MCExpr.h"
14 #include "llvm/MC/MCValue.h"
15 #include "llvm/MC/MCAsmLayout.h"
16 
17 namespace llvm {
18 
19 class PPCMCExpr : public MCTargetExpr {
20 public:
21  enum VariantKind {
30  };
31 
32 private:
33  const VariantKind Kind;
34  const MCExpr *Expr;
35  bool IsDarwin;
36 
37  explicit PPCMCExpr(VariantKind _Kind, const MCExpr *_Expr,
38  bool _IsDarwin)
39  : Kind(_Kind), Expr(_Expr), IsDarwin(_IsDarwin) {}
40 
41 public:
42  /// @name Construction
43  /// @{
44 
45  static const PPCMCExpr *Create(VariantKind Kind, const MCExpr *Expr,
46  bool isDarwin, MCContext &Ctx);
47 
48  static const PPCMCExpr *CreateLo(const MCExpr *Expr,
49  bool isDarwin, MCContext &Ctx) {
50  return Create(VK_PPC_LO, Expr, isDarwin, Ctx);
51  }
52 
53  static const PPCMCExpr *CreateHi(const MCExpr *Expr,
54  bool isDarwin, MCContext &Ctx) {
55  return Create(VK_PPC_HI, Expr, isDarwin, Ctx);
56  }
57 
58  static const PPCMCExpr *CreateHa(const MCExpr *Expr,
59  bool isDarwin, MCContext &Ctx) {
60  return Create(VK_PPC_HA, Expr, isDarwin, Ctx);
61  }
62 
63  /// @}
64  /// @name Accessors
65  /// @{
66 
67  /// getOpcode - Get the kind of this expression.
68  VariantKind getKind() const { return Kind; }
69 
70  /// getSubExpr - Get the child of this expression.
71  const MCExpr *getSubExpr() const { return Expr; }
72 
73  /// isDarwinSyntax - True if expression is to be printed using Darwin syntax.
74  bool isDarwinSyntax() const { return IsDarwin; }
75 
76 
77  /// @}
78 
79  void PrintImpl(raw_ostream &OS) const;
81  const MCAsmLayout *Layout) const;
82  void AddValueSymbols(MCAssembler *) const;
85  }
86 
87  // There are no TLS PPCMCExprs at the moment.
89 
90  static bool classof(const MCExpr *E) {
91  return E->getKind() == MCExpr::Target;
92  }
93 };
94 } // end namespace llvm
95 
96 #endif
static const PPCMCExpr * CreateHa(const MCExpr *Expr, bool isDarwin, MCContext &Ctx)
Definition: PPCMCExpr.h:58
static bool classof(const MCExpr *E)
Definition: PPCMCExpr.h:90
VariantKind getKind() const
getOpcode - Get the kind of this expression.
Definition: PPCMCExpr.h:68
ExprKind getKind() const
Definition: MCExpr.h:61
const MCExpr * getSubExpr() const
getSubExpr - Get the child of this expression.
Definition: PPCMCExpr.h:71
bool isDarwinSyntax() const
isDarwinSyntax - True if expression is to be printed using Darwin syntax.
Definition: PPCMCExpr.h:74
static const PPCMCExpr * CreateLo(const MCExpr *Expr, bool isDarwin, MCContext &Ctx)
Definition: PPCMCExpr.h:48
static const PPCMCExpr * Create(VariantKind Kind, const MCExpr *Expr, bool isDarwin, MCContext &Ctx)
Definition: PPCMCExpr.cpp:19
void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const
Definition: PPCMCExpr.h:88
void PrintImpl(raw_ostream &OS) const
Definition: PPCMCExpr.cpp:24
const MCSection * FindAssociatedSection() const
Definition: MCExpr.cpp:743
bool EvaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout) const
Definition: PPCMCExpr.cpp:53
static const PPCMCExpr * CreateHi(const MCExpr *Expr, bool isDarwin, MCContext &Ctx)
Definition: PPCMCExpr.h:53
void AddValueSymbols(MCAssembler *) const
Definition: PPCMCExpr.cpp:153
const MCSection * FindAssociatedSection() const
Definition: PPCMCExpr.h:83
Target specific expression.
Definition: MCExpr.h:38