Index: src/builtins/arm64/builtins-arm64.cc |
diff --git a/src/builtins/arm64/builtins-arm64.cc b/src/builtins/arm64/builtins-arm64.cc |
index aeb0508a20e7342ed897f4a454a5c69bdf68dd7b..88af03a49457d1b8ce2fdd32ed594573dd387fbb 100644 |
--- a/src/builtins/arm64/builtins-arm64.cc |
+++ b/src/builtins/arm64/builtins-arm64.cc |
@@ -789,14 +789,15 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { |
__ LoadRoot(x11, Heap::kTheHoleValueRootIndex); |
__ PushMultipleTimes(x11, w10); |
- // Dispatch on the kind of generator object. |
- Label old_generator; |
- __ Ldr(x3, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); |
- __ Ldr(x3, FieldMemOperand(x3, SharedFunctionInfo::kFunctionDataOffset)); |
- __ CompareObjectType(x3, x3, x3, BYTECODE_ARRAY_TYPE); |
- __ B(ne, &old_generator); |
+ // Underlying function needs to have bytecode available. |
+ if (FLAG_debug_code) { |
+ __ Ldr(x3, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); |
+ __ Ldr(x3, FieldMemOperand(x3, SharedFunctionInfo::kFunctionDataOffset)); |
+ __ CompareObjectType(x3, x3, x3, BYTECODE_ARRAY_TYPE); |
+ __ Assert(eq, kMissingBytecodeArray); |
+ } |
- // New-style (ignition/turbofan) generator object |
+ // Resume (Ignition/TurboFan) generator object. |
{ |
__ Ldr(x0, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); |
__ Ldr(w0, FieldMemOperand( |
@@ -810,49 +811,6 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { |
__ Jump(x5); |
} |
- // Old-style (full-codegen) generator object |
- __ bind(&old_generator); |
- { |
- // Enter a new JavaScript frame, and initialize its slots as they were when |
- // the generator was suspended. |
- FrameScope scope(masm, StackFrame::MANUAL); |
- __ Push(lr, fp); |
- __ Move(fp, jssp); |
- __ Push(cp, x4); |
- |
- // Restore the operand stack. |
- __ Ldr(x0, FieldMemOperand(x1, JSGeneratorObject::kOperandStackOffset)); |
- __ Ldr(w3, UntagSmiFieldMemOperand(x0, FixedArray::kLengthOffset)); |
- __ Add(x0, x0, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); |
- __ Add(x3, x0, Operand(x3, LSL, kPointerSizeLog2)); |
- { |
- Label done_loop, loop; |
- __ Bind(&loop); |
- __ Cmp(x0, x3); |
- __ B(eq, &done_loop); |
- __ Ldr(x10, MemOperand(x0, kPointerSize, PostIndex)); |
- __ Push(x10); |
- __ B(&loop); |
- __ Bind(&done_loop); |
- } |
- |
- // Reset operand stack so we don't leak. |
- __ LoadRoot(x10, Heap::kEmptyFixedArrayRootIndex); |
- __ Str(x10, FieldMemOperand(x1, JSGeneratorObject::kOperandStackOffset)); |
- |
- // Resume the generator function at the continuation. |
- __ Ldr(x10, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); |
- __ Ldr(x10, FieldMemOperand(x10, SharedFunctionInfo::kCodeOffset)); |
- __ Add(x10, x10, Code::kHeaderSize - kHeapObjectTag); |
- __ Ldrsw(x11, UntagSmiFieldMemOperand( |
- x1, JSGeneratorObject::kContinuationOffset)); |
- __ Add(x10, x10, x11); |
- __ Mov(x12, Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)); |
- __ Str(x12, FieldMemOperand(x1, JSGeneratorObject::kContinuationOffset)); |
- __ Move(x0, x1); // Continuation expects generator object in x0. |
- __ Br(x10); |
- } |
- |
__ Bind(&prepare_step_in_if_stepping); |
{ |
FrameScope scope(masm, StackFrame::INTERNAL); |