Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: src/IceInstX8632.cpp

Issue 1428443002: Enhance address mode recovery (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Streamline absolute addressing support (rip-relative on x64) Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/IceInstX8632.cpp
diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp
index 3a8c57c0203c4a78cab150ffd5b46269e9cd47d6..8ce5b813ec477f05e522bb53b64f3ac79b48ee28 100644
--- a/src/IceInstX8632.cpp
+++ b/src/IceInstX8632.cpp
@@ -120,9 +120,10 @@ void MachineTraits<TargetX8632>::X86OperandMem::emit(const Cfg *Func) const {
llvm_unreachable("Invalid offset type for x86 mem operand");
}
- if (Base) {
+ if (Base || Index) {
Str << "(";
- Base->emit(Func);
+ if (Base)
+ Base->emit(Func);
if (Index) {
Str << ",";
Index->emit(Func);
@@ -151,8 +152,8 @@ void MachineTraits<TargetX8632>::X86OperandMem::dump(const Cfg *Func,
Dumped = true;
}
if (Index) {
- assert(Base);
- Str << "+";
+ if (Base)
+ Str << "+";
if (Shift > 0)
Str << (1u << Shift) << "*";
if (Func)
@@ -216,18 +217,16 @@ MachineTraits<TargetX8632>::X86OperandMem::toAsmAddress(
return X8632::Traits::Address(
RegX8632::getEncodedGPR(getBase()->getRegNum()),
RegX8632::getEncodedGPR(getIndex()->getRegNum()),
- X8632::Traits::ScaleFactor(getShift()), Disp);
+ X8632::Traits::ScaleFactor(getShift()), Disp, Fixup);
} else if (getBase()) {
return X8632::Traits::Address(
- RegX8632::getEncodedGPR(getBase()->getRegNum()), Disp);
+ RegX8632::getEncodedGPR(getBase()->getRegNum()), Disp, Fixup);
} else if (getIndex()) {
return X8632::Traits::Address(
RegX8632::getEncodedGPR(getIndex()->getRegNum()),
- X8632::Traits::ScaleFactor(getShift()), Disp);
- } else if (Fixup) {
- return X8632::Traits::Address::Absolute(Disp, Fixup);
+ X8632::Traits::ScaleFactor(getShift()), Disp, Fixup);
} else {
- return X8632::Traits::Address::Absolute(Disp);
+ return X8632::Traits::Address(Disp, Fixup);
}
}
@@ -237,8 +236,9 @@ MachineTraits<TargetX8632>::VariableSplit::toAsmAddress(const Cfg *Func) const {
const ::Ice::TargetLowering *Target = Func->getTarget();
int32_t Offset =
Var->getStackOffset() + Target->getStackAdjustment() + getOffset();
+ static constexpr AssemblerFixup *Fixup = nullptr;
return X8632::Traits::Address(
- RegX8632::getEncodedGPR(Target->getFrameOrStackReg()), Offset);
+ RegX8632::getEncodedGPR(Target->getFrameOrStackReg()), Offset, Fixup);
}
void MachineTraits<TargetX8632>::VariableSplit::emit(const Cfg *Func) const {
« no previous file with comments | « src/IceFixups.h ('k') | src/IceInstX8664.cpp » ('j') | src/IceTargetLoweringX86BaseImpl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698