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

Side by Side Diff: src/builtins/builtins-object-gen.cc

Issue 2861983002: [ignition] Optimize JSGenerator creation (Closed)
Patch Set: rebase Created 3 years, 7 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
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | src/code-stub-assembler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 the V8 project authors. All rights reserved. 1 // Copyright 2017 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/builtins/builtins-utils-gen.h" 5 #include "src/builtins/builtins-utils-gen.h"
6 #include "src/builtins/builtins.h" 6 #include "src/builtins/builtins.h"
7 #include "src/code-stub-assembler.h" 7 #include "src/code-stub-assembler.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 Return(OrdinaryHasInstance(context, constructor, object)); 405 Return(OrdinaryHasInstance(context, constructor, object));
406 } 406 }
407 407
408 TF_BUILTIN(GetSuperConstructor, ObjectBuiltinsAssembler) { 408 TF_BUILTIN(GetSuperConstructor, ObjectBuiltinsAssembler) {
409 Node* object = Parameter(Descriptor::kObject); 409 Node* object = Parameter(Descriptor::kObject);
410 Node* context = Parameter(Descriptor::kContext); 410 Node* context = Parameter(Descriptor::kContext);
411 411
412 Return(GetSuperConstructor(object, context)); 412 Return(GetSuperConstructor(object, context));
413 } 413 }
414 414
415 TF_BUILTIN(CreateGeneratorObject, ObjectBuiltinsAssembler) {
416 Node* closure = Parameter(Descriptor::kClosure);
417 Node* receiver = Parameter(Descriptor::kReceiver);
418 Node* context = Parameter(Descriptor::kContext);
419
420 // Get the initial map from the function, jumping to the runtime if we don't
421 // have one.
422 Node* maybe_map =
423 LoadObjectField(closure, JSFunction::kPrototypeOrInitialMapOffset);
424 Label runtime(this);
425 GotoIf(DoesntHaveInstanceType(maybe_map, MAP_TYPE), &runtime);
426
427 Node* shared =
428 LoadObjectField(closure, JSFunction::kSharedFunctionInfoOffset);
429 Node* bytecode_array =
430 LoadObjectField(shared, SharedFunctionInfo::kFunctionDataOffset);
431 Node* frame_size = ChangeInt32ToIntPtr(LoadObjectField(
432 bytecode_array, BytecodeArray::kFrameSizeOffset, MachineType::Int32()));
433 Node* size = WordSar(frame_size, IntPtrConstant(kPointerSizeLog2));
434 Node* register_file = AllocateFixedArray(FAST_HOLEY_ELEMENTS, size);
435 FillFixedArrayWithValue(FAST_HOLEY_ELEMENTS, register_file, IntPtrConstant(0),
436 size, Heap::kUndefinedValueRootIndex);
437
438 Node* const result = AllocateJSObjectFromMap(maybe_map);
439
440 StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kFunctionOffset,
441 closure);
442 StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kContextOffset,
443 context);
444 StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kReceiverOffset,
445 receiver);
446 StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kRegisterFileOffset,
447 register_file);
448 Node* executing = SmiConstant(JSGeneratorObject::kGeneratorExecuting);
449 StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kContinuationOffset,
450 executing);
451 HandleSlackTracking(context, result, maybe_map, JSGeneratorObject::kSize);
452 Return(result);
453
454 BIND(&runtime);
455 {
456 Return(CallRuntime(Runtime::kCreateJSGeneratorObject, context, closure,
457 receiver));
458 }
459 }
460
415 } // namespace internal 461 } // namespace internal
416 } // namespace v8 462 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | src/code-stub-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698