OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 #include "src/compilation-info.h" | 6 #include "src/compilation-info.h" |
7 #include "src/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
10 #include "src/compiler/osr.h" | 10 #include "src/compiler/osr.h" |
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 __ sw(value, MemOperand(at)); | 768 __ sw(value, MemOperand(at)); |
769 __ CheckPageFlag(object, scratch0, | 769 __ CheckPageFlag(object, scratch0, |
770 MemoryChunk::kPointersFromHereAreInterestingMask, ne, | 770 MemoryChunk::kPointersFromHereAreInterestingMask, ne, |
771 ool->entry()); | 771 ool->entry()); |
772 __ bind(ool->exit()); | 772 __ bind(ool->exit()); |
773 break; | 773 break; |
774 } | 774 } |
775 case kArchStackSlot: { | 775 case kArchStackSlot: { |
776 FrameOffset offset = | 776 FrameOffset offset = |
777 frame_access_state()->GetFrameOffset(i.InputInt32(0)); | 777 frame_access_state()->GetFrameOffset(i.InputInt32(0)); |
778 __ Addu(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp, | 778 Register base_reg = offset.from_stack_pointer() ? sp : fp; |
779 Operand(offset.offset())); | 779 __ Addu(i.OutputRegister(), base_reg, Operand(offset.offset())); |
| 780 int alignment = i.InputInt32(1); |
| 781 DCHECK(alignment == 0 || alignment == 4 || alignment == 8 || |
| 782 alignment == 16); |
| 783 if (FLAG_debug_code && alignment > 0) { |
| 784 // Verify that the output_register is properly aligned |
| 785 __ And(kScratchReg, i.OutputRegister(), Operand(kPointerSize - 1)); |
| 786 __ Assert(eq, kAllocationIsNotDoubleAligned, kScratchReg, |
| 787 Operand(zero_reg)); |
| 788 } |
| 789 |
| 790 if (alignment == 2 * kPointerSize) { |
| 791 Label done; |
| 792 __ Addu(kScratchReg, base_reg, Operand(offset.offset())); |
| 793 __ And(kScratchReg, kScratchReg, Operand(alignment - 1)); |
| 794 __ BranchShort(&done, eq, kScratchReg, Operand(zero_reg)); |
| 795 __ Addu(i.OutputRegister(), i.OutputRegister(), kPointerSize); |
| 796 __ bind(&done); |
| 797 } else if (alignment > 2 * kPointerSize) { |
| 798 Label done; |
| 799 __ Addu(kScratchReg, base_reg, Operand(offset.offset())); |
| 800 __ And(kScratchReg, kScratchReg, Operand(alignment - 1)); |
| 801 __ BranchShort(&done, eq, kScratchReg, Operand(zero_reg)); |
| 802 __ li(kScratchReg2, alignment); |
| 803 __ Subu(kScratchReg2, kScratchReg2, Operand(kScratchReg)); |
| 804 __ Addu(i.OutputRegister(), i.OutputRegister(), kScratchReg2); |
| 805 __ bind(&done); |
| 806 } |
780 break; | 807 break; |
781 } | 808 } |
782 case kIeee754Float64Acos: | 809 case kIeee754Float64Acos: |
783 ASSEMBLE_IEEE754_UNOP(acos); | 810 ASSEMBLE_IEEE754_UNOP(acos); |
784 break; | 811 break; |
785 case kIeee754Float64Acosh: | 812 case kIeee754Float64Acosh: |
786 ASSEMBLE_IEEE754_UNOP(acosh); | 813 ASSEMBLE_IEEE754_UNOP(acosh); |
787 break; | 814 break; |
788 case kIeee754Float64Asin: | 815 case kIeee754Float64Asin: |
789 ASSEMBLE_IEEE754_UNOP(asin); | 816 ASSEMBLE_IEEE754_UNOP(asin); |
(...skipping 1949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2739 padding_size -= v8::internal::Assembler::kInstrSize; | 2766 padding_size -= v8::internal::Assembler::kInstrSize; |
2740 } | 2767 } |
2741 } | 2768 } |
2742 } | 2769 } |
2743 | 2770 |
2744 #undef __ | 2771 #undef __ |
2745 | 2772 |
2746 } // namespace compiler | 2773 } // namespace compiler |
2747 } // namespace internal | 2774 } // namespace internal |
2748 } // namespace v8 | 2775 } // namespace v8 |
OLD | NEW |