brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · e1ec3fa Raw
68 lines · c
1//=--- X86MCExpr.h - X86 specific MC expression classes ---*- 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 describes X86-specific MCExprs, i.e, registers used for10// extended variable assignments.11//12//===----------------------------------------------------------------------===//13 14#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCEXPR_H15#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86MCEXPR_H16 17#include "X86ATTInstPrinter.h"18#include "llvm/MC/MCAsmInfo.h"19#include "llvm/MC/MCContext.h"20#include "llvm/MC/MCExpr.h"21#include "llvm/Support/Casting.h"22#include "llvm/Support/ErrorHandling.h"23 24namespace llvm {25 26class X86MCExpr : public MCTargetExpr {27 28private:29  const MCRegister Reg; // All30 31  explicit X86MCExpr(MCRegister R) : Reg(R) {}32 33public:34  static const X86MCExpr *create(MCRegister Reg, MCContext &Ctx) {35    return new (Ctx) X86MCExpr(Reg);36  }37 38  /// getSubExpr - Get the child of this expression.39  MCRegister getReg() const { return Reg; }40 41  void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override {42    if (!MAI || MAI->getAssemblerDialect() == 0)43      OS << '%';44    OS << X86ATTInstPrinter::getRegisterName(Reg);45  }46 47  bool evaluateAsRelocatableImpl(MCValue &Res,48                                 const MCAssembler *Asm) const override {49    return false;50  }51  // Register values should be inlined as they are not valid .set expressions.52  bool inlineAssignedExpr() const override { return true; }53  bool isEqualTo(const MCExpr *X) const override {54    if (auto *E = dyn_cast<X86MCExpr>(X))55      return getReg() == E->getReg();56    return false;57  }58  void visitUsedExpr(MCStreamer &Streamer) const override {}59  MCFragment *findAssociatedFragment() const override { return nullptr; }60 61  static bool classof(const MCExpr *E) {62    return E->getKind() == MCExpr::Target;63  }64};65} // end namespace llvm66 67#endif68