| 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 {
|
|
|