| Index: src/interpreter/interpreter-generator.cc | 
| diff --git a/src/interpreter/interpreter-generator.cc b/src/interpreter/interpreter-generator.cc | 
| index 85a15b2389b9cff57452cd0957b7e6be093fdd1a..51441a07d4ecf0f59276f494ebb3417b912c573c 100644 | 
| --- a/src/interpreter/interpreter-generator.cc | 
| +++ b/src/interpreter/interpreter-generator.cc | 
| @@ -3612,14 +3612,15 @@ IGNITION_HANDLER(Illegal, InterpreterAssembler) { Abort(kInvalidBytecode); } | 
| // No operation. | 
| IGNITION_HANDLER(Nop, InterpreterAssembler) { Dispatch(); } | 
|  | 
| -// SuspendGenerator <generator> | 
| +// SuspendGenerator <generator> <first input register> <register count> <flags> | 
| // | 
| // Exports the register file and stores it into the generator.  Also stores the | 
| // current context, the state given in the accumulator, and the current bytecode | 
| // offset (for debugging purposes) into the generator. | 
| IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) { | 
| Node* generator_reg = BytecodeOperandReg(0); | 
| -  Node* flags = BytecodeOperandFlag(1); | 
| +  Node* flags = BytecodeOperandFlag(3); | 
| + | 
| Node* generator = LoadRegister(generator_reg); | 
|  | 
| Label if_stepping(this, Label::kDeferred), ok(this); | 
| @@ -3637,7 +3638,13 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) { | 
| Node* context = GetContext(); | 
| Node* state = GetAccumulator(); | 
|  | 
| -  ExportRegisterFile(array); | 
| +  // Bytecode operand 1 should be always 0 (we are always store registers | 
| +  // from the beginning). | 
| +  CSA_ASSERT(this, WordEqual(BytecodeOperandReg(1), | 
| +                             IntPtrConstant(Register(0).ToOperand()))); | 
| +  // Bytecode operand 2 is the number of registers to store to the generator. | 
| +  Node* register_count = ChangeUint32ToWord(BytecodeOperandCount(2)); | 
| +  ExportRegisterFile(array, register_count); | 
| StoreObjectField(generator, JSGeneratorObject::kContextOffset, context); | 
| StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, state); | 
|  | 
| @@ -3686,18 +3693,14 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) { | 
| } | 
| } | 
|  | 
| -// ResumeGenerator <generator> | 
| +// RestoreGeneratorState <generator> | 
| // | 
| -// Imports the register file stored in the generator. Also loads the | 
| -// generator's state and stores it in the accumulator, before overwriting it | 
| -// with kGeneratorExecuting. | 
| -IGNITION_HANDLER(ResumeGenerator, InterpreterAssembler) { | 
| +// Loads the generator's state and stores it in the accumulator, | 
| +// before overwriting it with kGeneratorExecuting. | 
| +IGNITION_HANDLER(RestoreGeneratorState, InterpreterAssembler) { | 
| Node* generator_reg = BytecodeOperandReg(0); | 
| Node* generator = LoadRegister(generator_reg); | 
|  | 
| -  ImportRegisterFile( | 
| -      LoadObjectField(generator, JSGeneratorObject::kRegisterFileOffset)); | 
| - | 
| Node* old_state = | 
| LoadObjectField(generator, JSGeneratorObject::kContinuationOffset); | 
| Node* new_state = Int32Constant(JSGeneratorObject::kGeneratorExecuting); | 
| @@ -3708,6 +3711,28 @@ IGNITION_HANDLER(ResumeGenerator, InterpreterAssembler) { | 
| Dispatch(); | 
| } | 
|  | 
| +// RestoreGeneratorRegisters <generator> <first output register> <register | 
| +// count> | 
| +// | 
| +// Imports the register file stored in the generator. | 
| +IGNITION_HANDLER(RestoreGeneratorRegisters, InterpreterAssembler) { | 
| +  Node* generator_reg = BytecodeOperandReg(0); | 
| +  // Bytecode operand 1 is the start register. It should always be 0, so let's | 
| +  // ignore it. | 
| +  CSA_ASSERT(this, WordEqual(BytecodeOperandReg(1), | 
| +                             IntPtrConstant(Register(0).ToOperand()))); | 
| +  // Bytecode operand 2 is the number of registers to store to the generator. | 
| +  Node* register_count = ChangeUint32ToWord(BytecodeOperandCount(2)); | 
| + | 
| +  Node* generator = LoadRegister(generator_reg); | 
| + | 
| +  ImportRegisterFile( | 
| +      LoadObjectField(generator, JSGeneratorObject::kRegisterFileOffset), | 
| +      register_count); | 
| + | 
| +  Dispatch(); | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| Handle<Code> GenerateBytecodeHandler(Isolate* isolate, Bytecode bytecode, | 
|  |