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

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

Issue 2604833004: [builtins] FastNewFunctionContextStub becomes a builtin (Closed)
Patch Set: That was unnecessary, reverted :) Created 3 years, 11 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 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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2312 matching lines...) Expand 10 before | Expand all | Expand 10 after
2323 { 2323 {
2324 var_result.Bind( 2324 var_result.Bind(
2325 assembler.CallRuntime(Runtime::kGetProperty, context, object, key)); 2325 assembler.CallRuntime(Runtime::kGetProperty, context, object, key));
2326 assembler.Goto(&end); 2326 assembler.Goto(&end);
2327 } 2327 }
2328 2328
2329 assembler.Bind(&end); 2329 assembler.Bind(&end);
2330 assembler.Return(var_result.value()); 2330 assembler.Return(var_result.value());
2331 } 2331 }
2332 2332
2333
2334 // static
2335 int FastNewFunctionContextStub::MaximumSlots() {
2336 return FLAG_test_small_max_function_context_stub_size ? kSmallMaximumSlots
2337 : kMaximumSlots;
2338 }
2339
2340 // static
2341 compiler::Node* FastNewFunctionContextStub::Generate(
2342 CodeStubAssembler* assembler, compiler::Node* function,
2343 compiler::Node* slots, compiler::Node* context, ScopeType scope_type) {
2344 typedef compiler::Node Node;
2345
2346 slots = assembler->ChangeUint32ToWord(slots);
2347
2348 // TODO(ishell): Use CSA::OptimalParameterMode() here.
2349 CodeStubAssembler::ParameterMode mode = CodeStubAssembler::INTPTR_PARAMETERS;
2350 Node* min_context_slots =
2351 assembler->IntPtrConstant(Context::MIN_CONTEXT_SLOTS);
2352 Node* length = assembler->IntPtrAdd(slots, min_context_slots);
2353 Node* size =
2354 assembler->GetFixedArrayAllocationSize(length, FAST_ELEMENTS, mode);
2355
2356 // Create a new closure from the given function info in new space
2357 Node* function_context = assembler->Allocate(size);
2358
2359 Heap::RootListIndex context_type;
2360 switch (scope_type) {
2361 case EVAL_SCOPE:
2362 context_type = Heap::kEvalContextMapRootIndex;
2363 break;
2364 case FUNCTION_SCOPE:
2365 context_type = Heap::kFunctionContextMapRootIndex;
2366 break;
2367 default:
2368 UNREACHABLE();
2369 }
2370 assembler->StoreMapNoWriteBarrier(function_context, context_type);
2371 assembler->StoreObjectFieldNoWriteBarrier(
2372 function_context, Context::kLengthOffset, assembler->SmiTag(length));
2373
2374 // Set up the fixed slots.
2375 assembler->StoreFixedArrayElement(function_context, Context::CLOSURE_INDEX,
2376 function, SKIP_WRITE_BARRIER);
2377 assembler->StoreFixedArrayElement(function_context, Context::PREVIOUS_INDEX,
2378 context, SKIP_WRITE_BARRIER);
2379 assembler->StoreFixedArrayElement(function_context, Context::EXTENSION_INDEX,
2380 assembler->TheHoleConstant(),
2381 SKIP_WRITE_BARRIER);
2382
2383 // Copy the native context from the previous context.
2384 Node* native_context = assembler->LoadNativeContext(context);
2385 assembler->StoreFixedArrayElement(function_context,
2386 Context::NATIVE_CONTEXT_INDEX,
2387 native_context, SKIP_WRITE_BARRIER);
2388
2389 // Initialize the rest of the slots to undefined.
2390 Node* undefined = assembler->UndefinedConstant();
2391 assembler->BuildFastFixedArrayForEach(
2392 function_context, FAST_ELEMENTS, min_context_slots, length,
2393 [assembler, undefined](Node* context, Node* offset) {
2394 assembler->StoreNoWriteBarrier(MachineRepresentation::kTagged, context,
2395 offset, undefined);
2396 },
2397 mode);
2398
2399 return function_context;
2400 }
2401
2402 void FastNewFunctionContextStub::GenerateAssembly(
2403 compiler::CodeAssemblerState* state) const {
2404 typedef compiler::Node Node;
2405 CodeStubAssembler assembler(state);
2406 Node* function = assembler.Parameter(Descriptor::kFunction);
2407 Node* slots = assembler.Parameter(Descriptor::kSlots);
2408 Node* context = assembler.Parameter(Descriptor::kContext);
2409
2410 assembler.Return(
2411 Generate(&assembler, function, slots, context, scope_type()));
2412 }
2413
2414 // static 2333 // static
2415 compiler::Node* FastCloneRegExpStub::Generate(CodeStubAssembler* assembler, 2334 compiler::Node* FastCloneRegExpStub::Generate(CodeStubAssembler* assembler,
2416 compiler::Node* closure, 2335 compiler::Node* closure,
2417 compiler::Node* literal_index, 2336 compiler::Node* literal_index,
2418 compiler::Node* pattern, 2337 compiler::Node* pattern,
2419 compiler::Node* flags, 2338 compiler::Node* flags,
2420 compiler::Node* context) { 2339 compiler::Node* context) {
2421 typedef CodeStubAssembler::Label Label; 2340 typedef CodeStubAssembler::Label Label;
2422 typedef CodeStubAssembler::Variable Variable; 2341 typedef CodeStubAssembler::Variable Variable;
2423 typedef compiler::Node Node; 2342 typedef compiler::Node Node;
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
2963 } 2882 }
2964 2883
2965 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) 2884 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate)
2966 : PlatformCodeStub(isolate) {} 2885 : PlatformCodeStub(isolate) {}
2967 2886
2968 InternalArrayConstructorStub::InternalArrayConstructorStub(Isolate* isolate) 2887 InternalArrayConstructorStub::InternalArrayConstructorStub(Isolate* isolate)
2969 : PlatformCodeStub(isolate) {} 2888 : PlatformCodeStub(isolate) {}
2970 2889
2971 } // namespace internal 2890 } // namespace internal
2972 } // namespace v8 2891 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698