Chromium Code Reviews| Index: src/IceTargetLoweringX8632Traits.h |
| diff --git a/src/IceTargetLoweringX8632Traits.h b/src/IceTargetLoweringX8632Traits.h |
| index 918a5852b9d514585cd248930b78628026c6ff8e..ba339bcf991da717e5f515324d9517ee3e4f8aec 100644 |
| --- a/src/IceTargetLoweringX8632Traits.h |
| +++ b/src/IceTargetLoweringX8632Traits.h |
| @@ -182,7 +182,7 @@ template <> struct MachineTraits<TargetX8632> { |
| return *this; |
| } |
| - Address(GPRRegister base, int32_t disp) { |
| + Address(GPRRegister base, int32_t disp, AssemblerFixup *fixup = nullptr) { |
|
Jim Stichnoth
2015/10/27 05:52:34
Maybe we can make fixup a required parameter, rath
sehr
2015/10/27 21:48:00
Done.
|
| if (disp == 0 && base != RegX8632::Encoded_Reg_ebp) { |
| SetModRM(0, base); |
| if (base == RegX8632::Encoded_Reg_esp) |
| @@ -192,23 +192,29 @@ template <> struct MachineTraits<TargetX8632> { |
| if (base == RegX8632::Encoded_Reg_esp) |
| SetSIB(TIMES_1, RegX8632::Encoded_Reg_esp, base); |
| SetDisp8(disp); |
| + // TODO(sehr): determine if there are 8-bit relocations. |
|
Jim Stichnoth
2015/10/27 13:57:10
Here and in the TODO below, if there is a fixup, I
Jim Stichnoth
2015/10/27 13:57:10
One separate note on these fixups. It seems that
sehr
2015/10/27 21:48:00
Agreed, and that fixed my other bug. Thanks!
sehr
2015/10/27 21:48:00
Added flag/assertions in IceFixups.h
|
| } else { |
| SetModRM(2, base); |
| if (base == RegX8632::Encoded_Reg_esp) |
| SetSIB(TIMES_1, RegX8632::Encoded_Reg_esp, base); |
| SetDisp32(disp); |
| + if (fixup) |
| + SetFixup(fixup); |
| } |
| } |
| - Address(GPRRegister index, ScaleFactor scale, int32_t disp) { |
| + Address(GPRRegister index, ScaleFactor scale, int32_t disp, |
| + AssemblerFixup *fixup = nullptr) { |
| assert(index != RegX8632::Encoded_Reg_esp); // Illegal addressing mode. |
| SetModRM(0, RegX8632::Encoded_Reg_esp); |
| SetSIB(scale, index, RegX8632::Encoded_Reg_ebp); |
| SetDisp32(disp); |
| + if (fixup) |
| + SetFixup(fixup); |
| } |
| Address(GPRRegister base, GPRRegister index, ScaleFactor scale, |
| - int32_t disp) { |
| + int32_t disp, AssemblerFixup *fixup = nullptr) { |
| assert(index != RegX8632::Encoded_Reg_esp); // Illegal addressing mode. |
| if (disp == 0 && base != RegX8632::Encoded_Reg_ebp) { |
| SetModRM(0, RegX8632::Encoded_Reg_esp); |
| @@ -217,10 +223,13 @@ template <> struct MachineTraits<TargetX8632> { |
| SetModRM(1, RegX8632::Encoded_Reg_esp); |
| SetSIB(scale, index, base); |
| SetDisp8(disp); |
| + // TODO(sehr): determine if there are 8-bit relocations. |
| } else { |
| SetModRM(2, RegX8632::Encoded_Reg_esp); |
| SetSIB(scale, index, base); |
| SetDisp32(disp); |
| + if (fixup) |
| + SetFixup(fixup); |
| } |
| } |