diff options
Diffstat (limited to 'lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp')
-rw-r--r-- | lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp | 55 |
1 files changed, 42 insertions, 13 deletions
diff --git a/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp b/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp index fc6262657514..e93906a0a396 100644 --- a/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp +++ b/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp @@ -10,6 +10,7 @@ #include "HexagonMCExpr.h" #include "llvm/MC/MCContext.h" +#include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCValue.h" #include "llvm/Support/raw_ostream.h" @@ -17,33 +18,61 @@ using namespace llvm; #define DEBUG_TYPE "hexagon-mcexpr" -HexagonNoExtendOperand *HexagonNoExtendOperand::Create(MCExpr const *Expr, - MCContext &Ctx) { - return new (Ctx) HexagonNoExtendOperand(Expr); +HexagonMCExpr *HexagonMCExpr::create(MCExpr const *Expr, MCContext &Ctx) { + return new (Ctx) HexagonMCExpr(Expr); } -bool HexagonNoExtendOperand::evaluateAsRelocatableImpl( - MCValue &Res, MCAsmLayout const *Layout, MCFixup const *Fixup) const { +bool HexagonMCExpr::evaluateAsRelocatableImpl(MCValue &Res, + MCAsmLayout const *Layout, + MCFixup const *Fixup) const { return Expr->evaluateAsRelocatable(Res, Layout, Fixup); } -void HexagonNoExtendOperand::visitUsedExpr(MCStreamer &Streamer) const {} +void HexagonMCExpr::visitUsedExpr(MCStreamer &Streamer) const { + Streamer.visitUsedExpr(*Expr); +} -MCFragment *llvm::HexagonNoExtendOperand::findAssociatedFragment() const { +MCFragment *llvm::HexagonMCExpr::findAssociatedFragment() const { return Expr->findAssociatedFragment(); } -void HexagonNoExtendOperand::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {} +void HexagonMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {} + +MCExpr const *HexagonMCExpr::getExpr() const { return Expr; } + +void HexagonMCExpr::setMustExtend(bool Val) { + assert((!Val || !MustNotExtend) && "Extension contradiction"); + MustExtend = Val; +} + +bool HexagonMCExpr::mustExtend() const { return MustExtend; } +void HexagonMCExpr::setMustNotExtend(bool Val) { + assert((!Val || !MustExtend) && "Extension contradiction"); + MustNotExtend = Val; +} +bool HexagonMCExpr::mustNotExtend() const { return MustNotExtend; } -MCExpr const *HexagonNoExtendOperand::getExpr() const { return Expr; } +bool HexagonMCExpr::s23_2_reloc() const { return S23_2_reloc; } +void HexagonMCExpr::setS23_2_reloc(bool Val) { + S23_2_reloc = Val; +} -bool HexagonNoExtendOperand::classof(MCExpr const *E) { +bool HexagonMCExpr::classof(MCExpr const *E) { return E->getKind() == MCExpr::Target; } -HexagonNoExtendOperand::HexagonNoExtendOperand(MCExpr const *Expr) - : Expr(Expr) {} +HexagonMCExpr::HexagonMCExpr(MCExpr const *Expr) + : Expr(Expr), MustNotExtend(false), MustExtend(false), S23_2_reloc(false), + SignMismatch(false) {} -void HexagonNoExtendOperand::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { +void HexagonMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { Expr->print(OS, MAI); } + +void HexagonMCExpr::setSignMismatch(bool Val) { + SignMismatch = Val; +} + +bool HexagonMCExpr::signMismatch() const { + return SignMismatch; +}
\ No newline at end of file |