| Index: src/full-codegen/ppc/full-codegen-ppc.cc
|
| diff --git a/src/full-codegen/ppc/full-codegen-ppc.cc b/src/full-codegen/ppc/full-codegen-ppc.cc
|
| index abd41c4c803f9a9c7e06778c589a6a67255d6f04..4af5bc4ab8f5afe2a0ca747794ac6356d38867f6 100644
|
| --- a/src/full-codegen/ppc/full-codegen-ppc.cc
|
| +++ b/src/full-codegen/ppc/full-codegen-ppc.cc
|
| @@ -186,7 +186,7 @@ void FullCodeGenerator::Generate() {
|
| }
|
| }
|
|
|
| - bool function_in_register = true;
|
| + bool function_in_register_r4 = true;
|
|
|
| // Possibly allocate a local context.
|
| if (info->scope()->num_heap_slots() > 0) {
|
| @@ -207,7 +207,7 @@ void FullCodeGenerator::Generate() {
|
| __ push(r4);
|
| __ CallRuntime(Runtime::kNewFunctionContext, 1);
|
| }
|
| - function_in_register = false;
|
| + function_in_register_r4 = false;
|
| // Context is returned in r3. It replaces the context passed to us.
|
| // It's saved in the stack and kept live in cp.
|
| __ mr(cp, r3);
|
| @@ -240,14 +240,19 @@ void FullCodeGenerator::Generate() {
|
| }
|
| }
|
|
|
| + PrepareForBailoutForId(BailoutId::Prologue(), NO_REGISTERS);
|
| + // Function register is trashed in case we bailout here. But since that
|
| + // could happen only when we allocate a context the value of
|
| + // |function_in_register_r4| is correct.
|
| +
|
| // Possibly set up a local binding to the this function which is used in
|
| // derived constructors with super calls.
|
| Variable* this_function_var = scope()->this_function_var();
|
| if (this_function_var != nullptr) {
|
| Comment cmnt(masm_, "[ This function");
|
| - if (!function_in_register) {
|
| + if (!function_in_register_r4) {
|
| __ LoadP(r4, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| - // The write barrier clobbers register again, keep is marked as such.
|
| + // The write barrier clobbers register again, keep it marked as such.
|
| }
|
| SetVar(this_function_var, r4, r3, r5);
|
| }
|
| @@ -271,6 +276,7 @@ void FullCodeGenerator::Generate() {
|
| __ LoadP(r4, MemOperand(r5, StandardFrameConstants::kMarkerOffset));
|
| __ CmpSmiLiteral(r4, Smi::FromInt(StackFrame::CONSTRUCT), r0);
|
| Label non_construct_frame, done;
|
| + function_in_register_r4 = false;
|
|
|
| __ bne(&non_construct_frame);
|
| __ LoadP(r3, MemOperand(
|
| @@ -298,6 +304,7 @@ void FullCodeGenerator::Generate() {
|
| __ LoadSmiLiteral(r4, Smi::FromInt(rest_index));
|
| __ LoadSmiLiteral(r3, Smi::FromInt(language_mode()));
|
| __ Push(r6, r5, r4, r3);
|
| + function_in_register_r4 = false;
|
|
|
| RestParamAccessStub stub(isolate());
|
| __ CallStub(&stub);
|
| @@ -309,7 +316,7 @@ void FullCodeGenerator::Generate() {
|
| if (arguments != NULL) {
|
| // Function uses arguments object.
|
| Comment cmnt(masm_, "[ Allocate arguments object");
|
| - if (!function_in_register) {
|
| + if (!function_in_register_r4) {
|
| // Load this again, if it's used by the local context below.
|
| __ LoadP(r6, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| } else {
|
|
|