120
|
1 //===-- LanaiMCExpr.h - Lanai specific MC expression classes ----*- C++ -*-===//
|
|
2 //
|
147
|
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-exception
|
120
|
6 //
|
|
7 //===----------------------------------------------------------------------===//
|
|
8
|
|
9 #ifndef LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIMCEXPR_H
|
|
10 #define LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIMCEXPR_H
|
|
11
|
|
12 #include "llvm/MC/MCExpr.h"
|
|
13 #include "llvm/MC/MCValue.h"
|
|
14
|
|
15 namespace llvm {
|
|
16
|
|
17 class LanaiMCExpr : public MCTargetExpr {
|
|
18 public:
|
|
19 enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
|
|
20
|
|
21 private:
|
|
22 const VariantKind Kind;
|
|
23 const MCExpr *Expr;
|
|
24
|
|
25 explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr)
|
|
26 : Kind(Kind), Expr(Expr) {}
|
|
27
|
|
28 public:
|
|
29 static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr,
|
|
30 MCContext &Ctx);
|
|
31
|
|
32 // Returns the kind of this expression.
|
|
33 VariantKind getKind() const { return Kind; }
|
|
34
|
|
35 // Returns the child of this expression.
|
|
36 const MCExpr *getSubExpr() const { return Expr; }
|
|
37
|
|
38 void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
|
|
39 bool evaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout,
|
|
40 const MCFixup *Fixup) const override;
|
|
41 void visitUsedExpr(MCStreamer &Streamer) const override;
|
|
42 MCFragment *findAssociatedFragment() const override {
|
|
43 return getSubExpr()->findAssociatedFragment();
|
|
44 }
|
|
45
|
|
46 // There are no TLS LanaiMCExprs at the moment.
|
|
47 void fixELFSymbolsInTLSFixups(MCAssembler & /*Asm*/) const override {}
|
|
48
|
|
49 static bool classof(const MCExpr *E) {
|
|
50 return E->getKind() == MCExpr::Target;
|
|
51 }
|
|
52 };
|
|
53 } // end namespace llvm
|
|
54
|
|
55 #endif
|