Index: llvm/lib/Target/X86/X86NaClRewritePass.cpp |
=================================================================== |
--- a/llvm/lib/Target/X86/X86NaClRewritePass.cpp |
+++ b/llvm/lib/Target/X86/X86NaClRewritePass.cpp |
@@ -536,9 +536,22 @@ |
assert(Scale.getImm() == 1); |
AddrReg = 0; |
} else { |
- assert(!BaseReg.getReg() && "Unexpected relative register pair"); |
- BaseReg.setReg(UseZeroBasedSandbox ? 0 : X86::R15); |
- AddrReg = IndexReg.getReg(); |
+ // @LOCALMOD-START |
Derek Schuff
2012/07/24 21:07:47
no need for LOCALMODs here, this entire file is a
Karl
2012/07/24 22:05:30
Done.
|
+ if (!BaseReg.getReg()) { |
+ // No base, fill in relative. |
+ BaseReg.setReg(UseZeroBasedSandbox ? 0 : X86::R15); |
+ AddrReg = IndexReg.getReg(); |
+ } else if (!UseZeroBasedSandbox) { |
+ // Switch base and index registers if index register is undefined. |
+ // That is do conversions like "mov d(%r,0,0) -> mov d(%r15, %r, 1)". |
+ assert (!IndexReg.getReg() |
+ && "Unexpected index and base register"); |
+ IndexReg.setReg(BaseReg.getReg()); |
+ Scale.setImm(1); |
+ BaseReg.setReg(X86::R15); |
+ AddrReg = IndexReg.getReg(); |
+ } |
jvoung - send to chromium...
2012/07/24 21:08:35
} else {
// Original behavior the zero-based san
Karl
2012/07/24 22:05:30
Done.
|
+ // @LOCALMOD-END |
} |
if (AddrReg) { |