| 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 #if V8_TARGET_ARCH_S390 | 5 #if V8_TARGET_ARCH_S390 |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 1864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1875 | 1875 |
| 1876 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { | 1876 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { |
| 1877 // r3 - function | 1877 // r3 - function |
| 1878 // r5 - slot id | 1878 // r5 - slot id |
| 1879 // r4 - vector | 1879 // r4 - vector |
| 1880 // r6 - allocation site (loaded from vector[slot]) | 1880 // r6 - allocation site (loaded from vector[slot]) |
| 1881 __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, r7); | 1881 __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, r7); |
| 1882 __ CmpP(r3, r7); | 1882 __ CmpP(r3, r7); |
| 1883 __ bne(miss); | 1883 __ bne(miss); |
| 1884 | 1884 |
| 1885 __ mov(r2, Operand(arg_count())); | |
| 1886 | |
| 1887 // Increment the call count for monomorphic function calls. | 1885 // Increment the call count for monomorphic function calls. |
| 1888 IncrementCallCount(masm, r4, r5, r1); | 1886 IncrementCallCount(masm, r4, r5, r1); |
| 1889 | 1887 |
| 1890 __ LoadRR(r4, r6); | 1888 __ LoadRR(r4, r6); |
| 1891 __ LoadRR(r5, r3); | 1889 __ LoadRR(r5, r3); |
| 1892 ArrayConstructorStub stub(masm->isolate(), arg_count()); | 1890 __ mov(r2, Operand(arg_count())); |
| 1891 ArrayConstructorStub stub(masm->isolate()); |
| 1893 __ TailCallStub(&stub); | 1892 __ TailCallStub(&stub); |
| 1894 } | 1893 } |
| 1895 | 1894 |
| 1896 void CallICStub::Generate(MacroAssembler* masm) { | 1895 void CallICStub::Generate(MacroAssembler* masm) { |
| 1897 // r3 - function | 1896 // r3 - function |
| 1898 // r5 - slot id (Smi) | 1897 // r5 - slot id (Smi) |
| 1899 // r4 - vector | 1898 // r4 - vector |
| 1900 Label extra_checks_or_miss, call, call_function, call_count_incremented; | 1899 Label extra_checks_or_miss, call, call_function, call_count_incremented; |
| 1901 int argc = arg_count(); | 1900 int argc = arg_count(); |
| 1902 ParameterCount actual(argc); | 1901 ParameterCount actual(argc); |
| (...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3788 // For internal arrays we only need a few things | 3787 // For internal arrays we only need a few things |
| 3789 InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]); | 3788 InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]); |
| 3790 stubh1.GetCode(); | 3789 stubh1.GetCode(); |
| 3791 InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]); | 3790 InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]); |
| 3792 stubh2.GetCode(); | 3791 stubh2.GetCode(); |
| 3793 } | 3792 } |
| 3794 } | 3793 } |
| 3795 | 3794 |
| 3796 void ArrayConstructorStub::GenerateDispatchToArrayStub( | 3795 void ArrayConstructorStub::GenerateDispatchToArrayStub( |
| 3797 MacroAssembler* masm, AllocationSiteOverrideMode mode) { | 3796 MacroAssembler* masm, AllocationSiteOverrideMode mode) { |
| 3798 if (argument_count() == ANY) { | 3797 Label not_zero_case, not_one_case; |
| 3799 Label not_zero_case, not_one_case; | 3798 __ CmpP(r2, Operand::Zero()); |
| 3800 __ CmpP(r2, Operand::Zero()); | 3799 __ bne(¬_zero_case); |
| 3801 __ bne(¬_zero_case); | 3800 CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); |
| 3802 CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); | |
| 3803 | 3801 |
| 3804 __ bind(¬_zero_case); | 3802 __ bind(¬_zero_case); |
| 3805 __ CmpP(r2, Operand(1)); | 3803 __ CmpP(r2, Operand(1)); |
| 3806 __ bgt(¬_one_case); | 3804 __ bgt(¬_one_case); |
| 3807 CreateArrayDispatchOneArgument(masm, mode); | 3805 CreateArrayDispatchOneArgument(masm, mode); |
| 3808 | 3806 |
| 3809 __ bind(¬_one_case); | 3807 __ bind(¬_one_case); |
| 3810 ArrayNArgumentsConstructorStub stub(masm->isolate()); | 3808 ArrayNArgumentsConstructorStub stub(masm->isolate()); |
| 3811 __ TailCallStub(&stub); | 3809 __ TailCallStub(&stub); |
| 3812 } else if (argument_count() == NONE) { | |
| 3813 CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); | |
| 3814 } else if (argument_count() == ONE) { | |
| 3815 CreateArrayDispatchOneArgument(masm, mode); | |
| 3816 } else if (argument_count() == MORE_THAN_ONE) { | |
| 3817 ArrayNArgumentsConstructorStub stub(masm->isolate()); | |
| 3818 __ TailCallStub(&stub); | |
| 3819 } else { | |
| 3820 UNREACHABLE(); | |
| 3821 } | |
| 3822 } | 3810 } |
| 3823 | 3811 |
| 3824 void ArrayConstructorStub::Generate(MacroAssembler* masm) { | 3812 void ArrayConstructorStub::Generate(MacroAssembler* masm) { |
| 3825 // ----------- S t a t e ------------- | 3813 // ----------- S t a t e ------------- |
| 3826 // -- r2 : argc (only if argument_count() == ANY) | 3814 // -- r2 : argc (only if argument_count() == ANY) |
| 3827 // -- r3 : constructor | 3815 // -- r3 : constructor |
| 3828 // -- r4 : AllocationSite or undefined | 3816 // -- r4 : AllocationSite or undefined |
| 3829 // -- r5 : new target | 3817 // -- r5 : new target |
| 3830 // -- sp[0] : return address | 3818 // -- sp[0] : return address |
| 3831 // -- sp[4] : last argument | 3819 // -- sp[4] : last argument |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3862 __ LoadP(r5, FieldMemOperand(r4, AllocationSite::kTransitionInfoOffset)); | 3850 __ LoadP(r5, FieldMemOperand(r4, AllocationSite::kTransitionInfoOffset)); |
| 3863 __ SmiUntag(r5); | 3851 __ SmiUntag(r5); |
| 3864 STATIC_ASSERT(AllocationSite::ElementsKindBits::kShift == 0); | 3852 STATIC_ASSERT(AllocationSite::ElementsKindBits::kShift == 0); |
| 3865 __ AndP(r5, Operand(AllocationSite::ElementsKindBits::kMask)); | 3853 __ AndP(r5, Operand(AllocationSite::ElementsKindBits::kMask)); |
| 3866 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE); | 3854 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE); |
| 3867 | 3855 |
| 3868 __ bind(&no_info); | 3856 __ bind(&no_info); |
| 3869 GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES); | 3857 GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES); |
| 3870 | 3858 |
| 3871 __ bind(&subclassing); | 3859 __ bind(&subclassing); |
| 3872 switch (argument_count()) { | 3860 __ ShiftLeftP(r1, r2, Operand(kPointerSizeLog2)); |
| 3873 case ANY: | 3861 __ StoreP(r3, MemOperand(sp, r1)); |
| 3874 case MORE_THAN_ONE: | 3862 __ AddP(r2, r2, Operand(3)); |
| 3875 __ ShiftLeftP(r1, r2, Operand(kPointerSizeLog2)); | |
| 3876 __ StoreP(r3, MemOperand(sp, r1)); | |
| 3877 __ AddP(r2, r2, Operand(3)); | |
| 3878 break; | |
| 3879 case NONE: | |
| 3880 __ StoreP(r3, MemOperand(sp, 0 * kPointerSize)); | |
| 3881 __ LoadImmP(r2, Operand(3)); | |
| 3882 break; | |
| 3883 case ONE: | |
| 3884 __ StoreP(r3, MemOperand(sp, 1 * kPointerSize)); | |
| 3885 __ LoadImmP(r2, Operand(4)); | |
| 3886 break; | |
| 3887 } | |
| 3888 | |
| 3889 __ Push(r5, r4); | 3863 __ Push(r5, r4); |
| 3890 __ JumpToExternalReference(ExternalReference(Runtime::kNewArray, isolate())); | 3864 __ JumpToExternalReference(ExternalReference(Runtime::kNewArray, isolate())); |
| 3891 } | 3865 } |
| 3892 | 3866 |
| 3893 void InternalArrayConstructorStub::GenerateCase(MacroAssembler* masm, | 3867 void InternalArrayConstructorStub::GenerateCase(MacroAssembler* masm, |
| 3894 ElementsKind kind) { | 3868 ElementsKind kind) { |
| 3895 __ CmpLogicalP(r2, Operand(1)); | 3869 __ CmpLogicalP(r2, Operand(1)); |
| 3896 | 3870 |
| 3897 InternalArrayNoArgumentConstructorStub stub0(isolate(), kind); | 3871 InternalArrayNoArgumentConstructorStub stub0(isolate(), kind); |
| 3898 __ TailCallStub(&stub0, lt); | 3872 __ TailCallStub(&stub0, lt); |
| (...skipping 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5082 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, | 5056 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, |
| 5083 kStackUnwindSpace, NULL, return_value_operand, NULL); | 5057 kStackUnwindSpace, NULL, return_value_operand, NULL); |
| 5084 } | 5058 } |
| 5085 | 5059 |
| 5086 #undef __ | 5060 #undef __ |
| 5087 | 5061 |
| 5088 } // namespace internal | 5062 } // namespace internal |
| 5089 } // namespace v8 | 5063 } // namespace v8 |
| 5090 | 5064 |
| 5091 #endif // V8_TARGET_ARCH_S390 | 5065 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |