Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index 0647f5edc9aeb548f2b07bfdf938e95c85be57f8..2a8b9eea4457a002acb22a9f613630a0665cd651 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -2002,12 +2002,12 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, |
__ ldr(r3, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); |
__ ldr(r3, |
FieldMemOperand(r3, SharedFunctionInfo::kFormalParameterCountOffset)); |
- __ Move(r2, isolate()->factory()->the_hole_value()); |
+ __ LoadRoot(r2, Heap::kTheHoleValueRootIndex); |
Label push_argument_holes; |
__ bind(&push_argument_holes); |
__ push(r2); |
- __ sub(r3, r3, Operand(1)); |
- __ b(vc, &push_argument_holes); |
+ __ sub(r3, r3, Operand(1), SetCC); |
+ __ b(pl, &push_argument_holes); |
// Enter a new JavaScript frame, and initialize its slots as they were when |
// the generator was suspended. |
@@ -2016,6 +2016,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, |
__ bl(&resume_frame); |
__ jmp(&done); |
__ bind(&resume_frame); |
+ __ push(lr); // Return address. |
__ push(fp); // Caller's frame pointer. |
__ mov(fp, sp); |
__ push(cp); // Callee's context. |
@@ -2046,8 +2047,8 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator, |
// up the stack and the handlers. |
Label push_operand_holes, call_resume; |
__ bind(&push_operand_holes); |
- __ sub(r3, r3, Operand(1)); |
- __ b(vs, &call_resume); |
+ __ sub(r3, r3, Operand(1), SetCC); |
+ __ b(mi, &call_resume); |
__ push(r2); |
__ b(&push_operand_holes); |
__ bind(&call_resume); |