OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1778 | 1778 |
1779 // Do the runtime call to allocate the arguments object. | 1779 // Do the runtime call to allocate the arguments object. |
1780 // r0 = address of new object (tagged) | 1780 // r0 = address of new object (tagged) |
1781 // r2 = argument count (tagged) | 1781 // r2 = argument count (tagged) |
1782 __ bind(&runtime); | 1782 __ bind(&runtime); |
1783 __ str(r2, MemOperand(sp, 0 * kPointerSize)); // Patch argument count. | 1783 __ str(r2, MemOperand(sp, 0 * kPointerSize)); // Patch argument count. |
1784 __ TailCallRuntime(Runtime::kNewSloppyArguments, 3, 1); | 1784 __ TailCallRuntime(Runtime::kNewSloppyArguments, 3, 1); |
1785 } | 1785 } |
1786 | 1786 |
1787 | 1787 |
| 1788 void LoadIndexedInterceptorStub::Generate(MacroAssembler* masm) { |
| 1789 // Return address is in lr. |
| 1790 Label slow; |
| 1791 |
| 1792 Register receiver = LoadDescriptor::ReceiverRegister(); |
| 1793 Register key = LoadDescriptor::NameRegister(); |
| 1794 |
| 1795 // Check that the key is an array index, that is Uint32. |
| 1796 __ NonNegativeSmiTst(key); |
| 1797 __ b(ne, &slow); |
| 1798 |
| 1799 // Everything is fine, call runtime. |
| 1800 __ Push(receiver, key); // Receiver, key. |
| 1801 |
| 1802 // Perform tail call to the entry. |
| 1803 __ TailCallExternalReference( |
| 1804 ExternalReference(IC_Utility(IC::kLoadElementWithInterceptor), |
| 1805 masm->isolate()), |
| 1806 2, 1); |
| 1807 |
| 1808 __ bind(&slow); |
| 1809 PropertyAccessCompiler::TailCallBuiltin( |
| 1810 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |
| 1811 } |
| 1812 |
| 1813 |
1788 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { | 1814 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
1789 // sp[0] : number of parameters | 1815 // sp[0] : number of parameters |
1790 // sp[4] : receiver displacement | 1816 // sp[4] : receiver displacement |
1791 // sp[8] : function | 1817 // sp[8] : function |
1792 // Check if the calling frame is an arguments adaptor frame. | 1818 // Check if the calling frame is an arguments adaptor frame. |
1793 Label adaptor_frame, try_allocate, runtime; | 1819 Label adaptor_frame, try_allocate, runtime; |
1794 __ ldr(r2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); | 1820 __ ldr(r2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
1795 __ ldr(r3, MemOperand(r2, StandardFrameConstants::kContextOffset)); | 1821 __ ldr(r3, MemOperand(r2, StandardFrameConstants::kContextOffset)); |
1796 __ cmp(r3, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); | 1822 __ cmp(r3, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
1797 __ b(eq, &adaptor_frame); | 1823 __ b(eq, &adaptor_frame); |
(...skipping 2854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4652 MemOperand(fp, 6 * kPointerSize), | 4678 MemOperand(fp, 6 * kPointerSize), |
4653 NULL); | 4679 NULL); |
4654 } | 4680 } |
4655 | 4681 |
4656 | 4682 |
4657 #undef __ | 4683 #undef __ |
4658 | 4684 |
4659 } } // namespace v8::internal | 4685 } } // namespace v8::internal |
4660 | 4686 |
4661 #endif // V8_TARGET_ARCH_ARM | 4687 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |