| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 5534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5545 | 5545 |
| 5546 // Also pop pc to get Ret(0). | 5546 // Also pop pc to get Ret(0). |
| 5547 __ ldm(ia_w, sp, kSavedRegs | pc.bit()); | 5547 __ ldm(ia_w, sp, kSavedRegs | pc.bit()); |
| 5548 } | 5548 } |
| 5549 | 5549 |
| 5550 | 5550 |
| 5551 template<class T> | 5551 template<class T> |
| 5552 static void CreateArrayDispatch(MacroAssembler* masm, | 5552 static void CreateArrayDispatch(MacroAssembler* masm, |
| 5553 AllocationSiteOverrideMode mode) { | 5553 AllocationSiteOverrideMode mode) { |
| 5554 if (mode == DISABLE_ALLOCATION_SITES) { | 5554 if (mode == DISABLE_ALLOCATION_SITES) { |
| 5555 T stub(GetInitialFastElementsKind(), | 5555 T stub(GetInitialFastElementsKind(), mode); |
| 5556 CONTEXT_CHECK_REQUIRED, | |
| 5557 mode); | |
| 5558 __ TailCallStub(&stub); | 5556 __ TailCallStub(&stub); |
| 5559 } else if (mode == DONT_OVERRIDE) { | 5557 } else if (mode == DONT_OVERRIDE) { |
| 5560 int last_index = GetSequenceIndexFromFastElementsKind( | 5558 int last_index = GetSequenceIndexFromFastElementsKind( |
| 5561 TERMINAL_FAST_ELEMENTS_KIND); | 5559 TERMINAL_FAST_ELEMENTS_KIND); |
| 5562 for (int i = 0; i <= last_index; ++i) { | 5560 for (int i = 0; i <= last_index; ++i) { |
| 5563 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); | 5561 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); |
| 5564 __ cmp(r3, Operand(kind)); | 5562 __ cmp(r3, Operand(kind)); |
| 5565 T stub(kind); | 5563 T stub(kind); |
| 5566 __ TailCallStub(&stub, eq); | 5564 __ TailCallStub(&stub, eq); |
| 5567 } | 5565 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 5598 // look at the first argument | 5596 // look at the first argument |
| 5599 __ ldr(r5, MemOperand(sp, 0)); | 5597 __ ldr(r5, MemOperand(sp, 0)); |
| 5600 __ cmp(r5, Operand::Zero()); | 5598 __ cmp(r5, Operand::Zero()); |
| 5601 __ b(eq, &normal_sequence); | 5599 __ b(eq, &normal_sequence); |
| 5602 | 5600 |
| 5603 if (mode == DISABLE_ALLOCATION_SITES) { | 5601 if (mode == DISABLE_ALLOCATION_SITES) { |
| 5604 ElementsKind initial = GetInitialFastElementsKind(); | 5602 ElementsKind initial = GetInitialFastElementsKind(); |
| 5605 ElementsKind holey_initial = GetHoleyElementsKind(initial); | 5603 ElementsKind holey_initial = GetHoleyElementsKind(initial); |
| 5606 | 5604 |
| 5607 ArraySingleArgumentConstructorStub stub_holey(holey_initial, | 5605 ArraySingleArgumentConstructorStub stub_holey(holey_initial, |
| 5608 CONTEXT_CHECK_REQUIRED, | |
| 5609 DISABLE_ALLOCATION_SITES); | 5606 DISABLE_ALLOCATION_SITES); |
| 5610 __ TailCallStub(&stub_holey); | 5607 __ TailCallStub(&stub_holey); |
| 5611 | 5608 |
| 5612 __ bind(&normal_sequence); | 5609 __ bind(&normal_sequence); |
| 5613 ArraySingleArgumentConstructorStub stub(initial, | 5610 ArraySingleArgumentConstructorStub stub(initial, |
| 5614 CONTEXT_CHECK_REQUIRED, | |
| 5615 DISABLE_ALLOCATION_SITES); | 5611 DISABLE_ALLOCATION_SITES); |
| 5616 __ TailCallStub(&stub); | 5612 __ TailCallStub(&stub); |
| 5617 } else if (mode == DONT_OVERRIDE) { | 5613 } else if (mode == DONT_OVERRIDE) { |
| 5618 // We are going to create a holey array, but our kind is non-holey. | 5614 // We are going to create a holey array, but our kind is non-holey. |
| 5619 // Fix kind and retry (only if we have an allocation site in the cell). | 5615 // Fix kind and retry (only if we have an allocation site in the cell). |
| 5620 __ add(r3, r3, Operand(1)); | 5616 __ add(r3, r3, Operand(1)); |
| 5621 __ ldr(r5, FieldMemOperand(r2, Cell::kValueOffset)); | 5617 __ ldr(r5, FieldMemOperand(r2, Cell::kValueOffset)); |
| 5622 | 5618 |
| 5623 if (FLAG_debug_code) { | 5619 if (FLAG_debug_code) { |
| 5624 __ ldr(r5, FieldMemOperand(r5, 0)); | 5620 __ ldr(r5, FieldMemOperand(r5, 0)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 5655 | 5651 |
| 5656 template<class T> | 5652 template<class T> |
| 5657 static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) { | 5653 static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) { |
| 5658 int to_index = GetSequenceIndexFromFastElementsKind( | 5654 int to_index = GetSequenceIndexFromFastElementsKind( |
| 5659 TERMINAL_FAST_ELEMENTS_KIND); | 5655 TERMINAL_FAST_ELEMENTS_KIND); |
| 5660 for (int i = 0; i <= to_index; ++i) { | 5656 for (int i = 0; i <= to_index; ++i) { |
| 5661 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); | 5657 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); |
| 5662 T stub(kind); | 5658 T stub(kind); |
| 5663 stub.GetCode(isolate); | 5659 stub.GetCode(isolate); |
| 5664 if (AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) { | 5660 if (AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) { |
| 5665 T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES); | 5661 T stub1(kind, DISABLE_ALLOCATION_SITES); |
| 5666 stub1.GetCode(isolate); | 5662 stub1.GetCode(isolate); |
| 5667 } | 5663 } |
| 5668 } | 5664 } |
| 5669 } | 5665 } |
| 5670 | 5666 |
| 5671 | 5667 |
| 5672 void ArrayConstructorStubBase::GenerateStubsAheadOfTime(Isolate* isolate) { | 5668 void ArrayConstructorStubBase::GenerateStubsAheadOfTime(Isolate* isolate) { |
| 5673 ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>( | 5669 ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>( |
| 5674 isolate); | 5670 isolate); |
| 5675 ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>( | 5671 ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>( |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5849 __ bind(&fast_elements_case); | 5845 __ bind(&fast_elements_case); |
| 5850 GenerateCase(masm, FAST_ELEMENTS); | 5846 GenerateCase(masm, FAST_ELEMENTS); |
| 5851 } | 5847 } |
| 5852 | 5848 |
| 5853 | 5849 |
| 5854 #undef __ | 5850 #undef __ |
| 5855 | 5851 |
| 5856 } } // namespace v8::internal | 5852 } } // namespace v8::internal |
| 5857 | 5853 |
| 5858 #endif // V8_TARGET_ARCH_ARM | 5854 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |