OLD | NEW |
---|---|
1 //=== X86NaClRewritePAss.cpp - Rewrite instructions for NaCl SFI --*- C++ -*-=// | 1 //=== X86NaClRewritePAss.cpp - Rewrite instructions for NaCl SFI --*- C++ -*-=// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file contains a pass that ensures stores and loads and stack/frame | 10 // This file contains a pass that ensures stores and loads and stack/frame |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
529 | 529 |
530 if (AbsoluteBase && AbsoluteIndex) { | 530 if (AbsoluteBase && AbsoluteIndex) { |
531 llvm_unreachable("Unexpected absolute register pair"); | 531 llvm_unreachable("Unexpected absolute register pair"); |
532 } else if (AbsoluteBase) { | 532 } else if (AbsoluteBase) { |
533 AddrReg = IndexReg.getReg(); | 533 AddrReg = IndexReg.getReg(); |
534 } else if (AbsoluteIndex) { | 534 } else if (AbsoluteIndex) { |
535 assert(!BaseReg.getReg() && "Unexpected base register"); | 535 assert(!BaseReg.getReg() && "Unexpected base register"); |
536 assert(Scale.getImm() == 1); | 536 assert(Scale.getImm() == 1); |
537 AddrReg = 0; | 537 AddrReg = 0; |
538 } else { | 538 } else { |
539 assert(!BaseReg.getReg() && "Unexpected relative register pair"); | 539 // @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.
| |
540 BaseReg.setReg(UseZeroBasedSandbox ? 0 : X86::R15); | 540 if (!BaseReg.getReg()) { |
541 AddrReg = IndexReg.getReg(); | 541 // No base, fill in relative. |
542 BaseReg.setReg(UseZeroBasedSandbox ? 0 : X86::R15); | |
543 AddrReg = IndexReg.getReg(); | |
544 } else if (!UseZeroBasedSandbox) { | |
545 // Switch base and index registers if index register is undefined. | |
546 // That is do conversions like "mov d(%r,0,0) -> mov d(%r15, %r, 1)". | |
547 assert (!IndexReg.getReg() | |
548 && "Unexpected index and base register"); | |
549 IndexReg.setReg(BaseReg.getReg()); | |
550 Scale.setImm(1); | |
551 BaseReg.setReg(X86::R15); | |
552 AddrReg = IndexReg.getReg(); | |
553 } | |
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.
| |
554 // @LOCALMOD-END | |
542 } | 555 } |
543 | 556 |
544 if (AddrReg) { | 557 if (AddrReg) { |
545 assert(!SegmentReg.getReg() && "Unexpected segment register"); | 558 assert(!SegmentReg.getReg() && "Unexpected segment register"); |
546 SegmentReg.setReg(X86::PSEUDO_NACL_SEG); | 559 SegmentReg.setReg(X86::PSEUDO_NACL_SEG); |
547 return true; | 560 return true; |
548 } | 561 } |
549 | 562 |
550 return false; | 563 return false; |
551 } | 564 } |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
871 } | 884 } |
872 dbgs() << "\n"; | 885 dbgs() << "\n"; |
873 } | 886 } |
874 | 887 |
875 /// createX86NaClRewritePassPass - returns an instance of the pass. | 888 /// createX86NaClRewritePassPass - returns an instance of the pass. |
876 namespace llvm { | 889 namespace llvm { |
877 FunctionPass* createX86NaClRewritePass() { | 890 FunctionPass* createX86NaClRewritePass() { |
878 return new X86NaClRewritePass(); | 891 return new X86NaClRewritePass(); |
879 } | 892 } |
880 } | 893 } |
OLD | NEW |