Chromium Code Reviews| 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) { |