Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Side by Side Diff: src/arm64/code-stubs-arm64.cc

Issue 975463002: Implement subclassing Arrays. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix arm again Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_ARM64 7 #if V8_TARGET_ARCH_ARM64
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 4998 matching lines...) Expand 10 before | Expand all | Expand 10 after
5009 CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode); 5009 CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode);
5010 } else { 5010 } else {
5011 UNREACHABLE(); 5011 UNREACHABLE();
5012 } 5012 }
5013 } 5013 }
5014 5014
5015 5015
5016 void ArrayConstructorStub::Generate(MacroAssembler* masm) { 5016 void ArrayConstructorStub::Generate(MacroAssembler* masm) {
5017 ASM_LOCATION("ArrayConstructorStub::Generate"); 5017 ASM_LOCATION("ArrayConstructorStub::Generate");
5018 // ----------- S t a t e ------------- 5018 // ----------- S t a t e -------------
5019 // -- x0 : argc (only if argument_count() == ANY) 5019 // -- x0 : argc (only if argument_count() is ANY or MORE_THAN_ONE)
5020 // -- x1 : constructor 5020 // -- x1 : constructor
5021 // -- x2 : AllocationSite or undefined 5021 // -- x2 : AllocationSite or undefined
5022 // -- x3 : original constructor 5022 // -- x3 : original constructor
5023 // -- sp[0] : return address 5023 // -- sp[0] : last argument
5024 // -- sp[4] : last argument
5025 // ----------------------------------- 5024 // -----------------------------------
5026 Register constructor = x1; 5025 Register constructor = x1;
5027 Register allocation_site = x2; 5026 Register allocation_site = x2;
5028 Register original_constructor = x3; 5027 Register original_constructor = x3;
5029 5028
5030 if (FLAG_debug_code) { 5029 if (FLAG_debug_code) {
5031 // The array construct code is only set for the global and natives 5030 // The array construct code is only set for the global and natives
5032 // builtin Array functions which always have maps. 5031 // builtin Array functions which always have maps.
5033 5032
5034 Label unexpected_map, map_ok; 5033 Label unexpected_map, map_ok;
(...skipping 23 matching lines...) Expand all
5058 5057
5059 __ Ldrsw(kind, 5058 __ Ldrsw(kind,
5060 UntagSmiFieldMemOperand(allocation_site, 5059 UntagSmiFieldMemOperand(allocation_site,
5061 AllocationSite::kTransitionInfoOffset)); 5060 AllocationSite::kTransitionInfoOffset));
5062 __ And(kind, kind, AllocationSite::ElementsKindBits::kMask); 5061 __ And(kind, kind, AllocationSite::ElementsKindBits::kMask);
5063 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE); 5062 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE);
5064 5063
5065 __ Bind(&no_info); 5064 __ Bind(&no_info);
5066 GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES); 5065 GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES);
5067 5066
5067 // Subclassing support.
5068 __ Bind(&subclassing); 5068 __ Bind(&subclassing);
5069 __ TailCallRuntime(Runtime::kThrowArrayNotSubclassableError, 0, 1); 5069 __ Push(constructor, original_constructor);
5070 // Adjust argc.
5071 switch (argument_count()) {
5072 case ANY:
5073 case MORE_THAN_ONE:
5074 __ add(x0, x0, Operand(2));
5075 break;
5076 case NONE:
5077 __ Mov(x0, Operand(2));
5078 break;
5079 case ONE:
5080 __ Mov(x0, Operand(3));
5081 break;
5082 }
5083 __ JumpToExternalReference(
5084 ExternalReference(Runtime::kArrayConstructorWithSubclassing, isolate()));
5070 } 5085 }
5071 5086
5072 5087
5073 void InternalArrayConstructorStub::GenerateCase( 5088 void InternalArrayConstructorStub::GenerateCase(
5074 MacroAssembler* masm, ElementsKind kind) { 5089 MacroAssembler* masm, ElementsKind kind) {
5075 Label zero_case, n_case; 5090 Label zero_case, n_case;
5076 Register argc = x0; 5091 Register argc = x0;
5077 5092
5078 __ Cbz(argc, &zero_case); 5093 __ Cbz(argc, &zero_case);
5079 __ CompareAndBranch(argc, 1, ne, &n_case); 5094 __ CompareAndBranch(argc, 1, ne, &n_case);
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
5503 kStackUnwindSpace, NULL, spill_offset, 5518 kStackUnwindSpace, NULL, spill_offset,
5504 MemOperand(fp, 6 * kPointerSize), NULL); 5519 MemOperand(fp, 6 * kPointerSize), NULL);
5505 } 5520 }
5506 5521
5507 5522
5508 #undef __ 5523 #undef __
5509 5524
5510 } } // namespace v8::internal 5525 } } // namespace v8::internal
5511 5526
5512 #endif // V8_TARGET_ARCH_ARM64 5527 #endif // V8_TARGET_ARCH_ARM64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698