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 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 __ Sd(value, MemOperand(at)); | 806 __ Sd(value, MemOperand(at)); |
807 __ CheckPageFlag(object, scratch0, | 807 __ CheckPageFlag(object, scratch0, |
808 MemoryChunk::kPointersFromHereAreInterestingMask, ne, | 808 MemoryChunk::kPointersFromHereAreInterestingMask, ne, |
809 ool->entry()); | 809 ool->entry()); |
810 __ bind(ool->exit()); | 810 __ bind(ool->exit()); |
811 break; | 811 break; |
812 } | 812 } |
813 case kArchStackSlot: { | 813 case kArchStackSlot: { |
814 FrameOffset offset = | 814 FrameOffset offset = |
815 frame_access_state()->GetFrameOffset(i.InputInt32(0)); | 815 frame_access_state()->GetFrameOffset(i.InputInt32(0)); |
816 __ Daddu(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp, | 816 Register base_reg = offset.from_stack_pointer() ? sp : fp; |
817 Operand(offset.offset())); | 817 __ Daddu(i.OutputRegister(), base_reg, Operand(offset.offset())); |
| 818 int alignment = i.InputInt32(1); |
| 819 DCHECK(alignment == 0 || alignment == 4 || alignment == 8 || |
| 820 alignment == 16); |
| 821 if (FLAG_debug_code && alignment > 0) { |
| 822 // Verify that the output_register is properly aligned |
| 823 __ And(kScratchReg, i.OutputRegister(), Operand(kPointerSize - 1)); |
| 824 __ Assert(eq, kAllocationIsNotDoubleAligned, kScratchReg, |
| 825 Operand(zero_reg)); |
| 826 } |
| 827 if (alignment == 2 * kPointerSize) { |
| 828 Label done; |
| 829 __ Daddu(kScratchReg, base_reg, Operand(offset.offset())); |
| 830 __ And(kScratchReg, kScratchReg, Operand(alignment - 1)); |
| 831 __ BranchShort(&done, eq, kScratchReg, Operand(zero_reg)); |
| 832 __ Daddu(i.OutputRegister(), i.OutputRegister(), kPointerSize); |
| 833 __ bind(&done); |
| 834 } else if (alignment > 2 * kPointerSize) { |
| 835 Label done; |
| 836 __ Daddu(kScratchReg, base_reg, Operand(offset.offset())); |
| 837 __ And(kScratchReg, kScratchReg, Operand(alignment - 1)); |
| 838 __ BranchShort(&done, eq, kScratchReg, Operand(zero_reg)); |
| 839 __ li(kScratchReg2, alignment); |
| 840 __ Dsubu(kScratchReg2, kScratchReg2, Operand(kScratchReg)); |
| 841 __ Daddu(i.OutputRegister(), i.OutputRegister(), kScratchReg2); |
| 842 __ bind(&done); |
| 843 } |
| 844 |
818 break; | 845 break; |
819 } | 846 } |
820 case kIeee754Float64Acos: | 847 case kIeee754Float64Acos: |
821 ASSEMBLE_IEEE754_UNOP(acos); | 848 ASSEMBLE_IEEE754_UNOP(acos); |
822 break; | 849 break; |
823 case kIeee754Float64Acosh: | 850 case kIeee754Float64Acosh: |
824 ASSEMBLE_IEEE754_UNOP(acosh); | 851 ASSEMBLE_IEEE754_UNOP(acosh); |
825 break; | 852 break; |
826 case kIeee754Float64Asin: | 853 case kIeee754Float64Asin: |
827 ASSEMBLE_IEEE754_UNOP(asin); | 854 ASSEMBLE_IEEE754_UNOP(asin); |
(...skipping 2213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3041 padding_size -= v8::internal::Assembler::kInstrSize; | 3068 padding_size -= v8::internal::Assembler::kInstrSize; |
3042 } | 3069 } |
3043 } | 3070 } |
3044 } | 3071 } |
3045 | 3072 |
3046 #undef __ | 3073 #undef __ |
3047 | 3074 |
3048 } // namespace compiler | 3075 } // namespace compiler |
3049 } // namespace internal | 3076 } // namespace internal |
3050 } // namespace v8 | 3077 } // namespace v8 |
OLD | NEW |