Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
Show All 38 Lines | void RISCVMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { | ||||
Expr->print(OS, MAI); | Expr->print(OS, MAI); | ||||
if (HasVariant) | if (HasVariant) | ||||
OS << ')'; | OS << ')'; | ||||
} | } | ||||
bool RISCVMCExpr::evaluateAsRelocatableImpl(MCValue &Res, | bool RISCVMCExpr::evaluateAsRelocatableImpl(MCValue &Res, | ||||
const MCAsmLayout *Layout, | const MCAsmLayout *Layout, | ||||
const MCFixup *Fixup) const { | const MCFixup *Fixup) const { | ||||
return getSubExpr()->evaluateAsRelocatable(Res, Layout, Fixup); | if (!getSubExpr()->evaluateAsRelocatable(Res, Layout, Fixup)) | ||||
return false; | |||||
// Some custom fixup types are not valid with symbol difference expressions | |||||
if (Res.getSymA() && Res.getSymB()) { | |||||
switch (getKind()) { | |||||
default: | |||||
return true; | |||||
case VK_RISCV_LO: | |||||
case VK_RISCV_HI: | |||||
case VK_RISCV_PCREL_LO: | |||||
case VK_RISCV_PCREL_HI: | |||||
return false; | |||||
} | |||||
} | |||||
return true; | |||||
} | } | ||||
void RISCVMCExpr::visitUsedExpr(MCStreamer &Streamer) const { | void RISCVMCExpr::visitUsedExpr(MCStreamer &Streamer) const { | ||||
Streamer.visitUsedExpr(*getSubExpr()); | Streamer.visitUsedExpr(*getSubExpr()); | ||||
} | } | ||||
RISCVMCExpr::VariantKind RISCVMCExpr::getVariantKindForName(StringRef name) { | RISCVMCExpr::VariantKind RISCVMCExpr::getVariantKindForName(StringRef name) { | ||||
return StringSwitch<RISCVMCExpr::VariantKind>(name) | return StringSwitch<RISCVMCExpr::VariantKind>(name) | ||||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |