| Index: src/full-codegen/x87/full-codegen-x87.cc | 
| diff --git a/src/full-codegen/x87/full-codegen-x87.cc b/src/full-codegen/x87/full-codegen-x87.cc | 
| index d0e0b3d52e74e23320d9256d8ee6268eea888ce3..a035fff72d69698cad1644252770a214075104e5 100644 | 
| --- a/src/full-codegen/x87/full-codegen-x87.cc | 
| +++ b/src/full-codegen/x87/full-codegen-x87.cc | 
| @@ -1842,8 +1842,17 @@ void FullCodeGenerator::VisitYield(Yield* expr) { | 
|  | 
| __ jmp(&suspend); | 
| __ bind(&continuation); | 
| +      // When we arrive here, the stack top is the resume mode and | 
| +      // result_register() holds the input value (the argument given to the | 
| +      // respective resume operation). | 
| __ RecordGeneratorContinuation(); | 
| -      __ jmp(&resume); | 
| +      __ pop(ebx); | 
| +      __ cmp(ebx, Immediate(Smi::FromInt(JSGeneratorObject::RETURN))); | 
| +      __ j(not_equal, &resume); | 
| +      __ push(result_register()); | 
| +      EmitCreateIteratorResult(true); | 
| +      EmitUnwindBeforeReturn(); | 
| +      EmitReturnSequence(); | 
|  | 
| __ bind(&suspend); | 
| VisitForAccumulatorValue(expr->generator_object()); | 
| @@ -2004,8 +2013,8 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, | 
|  | 
| // Store input value into generator object. | 
| __ mov(FieldOperand(ebx, JSGeneratorObject::kInputOffset), result_register()); | 
| -  __ mov(edx, result_register()); | 
| -  __ RecordWriteField(ebx, JSGeneratorObject::kInputOffset, edx, ecx, | 
| +  __ mov(ecx, result_register()); | 
| +  __ RecordWriteField(ebx, JSGeneratorObject::kInputOffset, ecx, edx, | 
| kDontSaveFPRegs); | 
|  | 
| // Load suspended function and context. | 
| @@ -2056,6 +2065,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, | 
| __ add(edx, ecx); | 
| __ mov(FieldOperand(ebx, JSGeneratorObject::kContinuationOffset), | 
| Immediate(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting))); | 
| +    __ Push(Smi::FromInt(resume_mode));  // Consumed in continuation. | 
| __ jmp(edx); | 
| __ bind(&slow_resume); | 
| } | 
| @@ -2069,6 +2079,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, | 
| __ push(ecx); | 
| __ jmp(&push_operand_holes); | 
| __ bind(&call_resume); | 
| +  __ Push(Smi::FromInt(resume_mode));  // Consumed in continuation. | 
| __ push(ebx); | 
| __ push(result_register()); | 
| __ Push(Smi::FromInt(resume_mode)); | 
|  |