| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_PPC | 5 #if V8_TARGET_ARCH_PPC |
| 6 | 6 |
| 7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 if (new_target_var != nullptr) { | 256 if (new_target_var != nullptr) { |
| 257 Comment cmnt(masm_, "[ new.target"); | 257 Comment cmnt(masm_, "[ new.target"); |
| 258 SetVar(new_target_var, r6, r3, r5); | 258 SetVar(new_target_var, r6, r3, r5); |
| 259 } | 259 } |
| 260 | 260 |
| 261 // Possibly allocate RestParameters | 261 // Possibly allocate RestParameters |
| 262 int rest_index; | 262 int rest_index; |
| 263 Variable* rest_param = scope()->rest_parameter(&rest_index); | 263 Variable* rest_param = scope()->rest_parameter(&rest_index); |
| 264 if (rest_param) { | 264 if (rest_param) { |
| 265 Comment cmnt(masm_, "[ Allocate rest parameter array"); | 265 Comment cmnt(masm_, "[ Allocate rest parameter array"); |
| 266 | 266 if (!function_in_register_r4) { |
| 267 int num_parameters = info->scope()->num_parameters(); | 267 __ LoadP(r4, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 268 int offset = num_parameters * kPointerSize; | 268 } |
| 269 | 269 FastNewRestParameterStub stub(isolate()); |
| 270 __ LoadSmiLiteral(RestParamAccessDescriptor::parameter_count(), | 270 __ CallStub(&stub); |
| 271 Smi::FromInt(num_parameters)); | |
| 272 __ addi(RestParamAccessDescriptor::parameter_pointer(), fp, | |
| 273 Operand(StandardFrameConstants::kCallerSPOffset + offset)); | |
| 274 __ LoadSmiLiteral(RestParamAccessDescriptor::rest_parameter_index(), | |
| 275 Smi::FromInt(rest_index)); | |
| 276 function_in_register_r4 = false; | 271 function_in_register_r4 = false; |
| 277 | |
| 278 RestParamAccessStub stub(isolate()); | |
| 279 __ CallStub(&stub); | |
| 280 | |
| 281 SetVar(rest_param, r3, r4, r5); | 272 SetVar(rest_param, r3, r4, r5); |
| 282 } | 273 } |
| 283 | 274 |
| 284 Variable* arguments = scope()->arguments(); | 275 Variable* arguments = scope()->arguments(); |
| 285 if (arguments != NULL) { | 276 if (arguments != NULL) { |
| 286 // Function uses arguments object. | 277 // Function uses arguments object. |
| 287 Comment cmnt(masm_, "[ Allocate arguments object"); | 278 Comment cmnt(masm_, "[ Allocate arguments object"); |
| 288 DCHECK(r4.is(ArgumentsAccessNewDescriptor::function())); | 279 DCHECK(r4.is(ArgumentsAccessNewDescriptor::function())); |
| 289 if (!function_in_register_r4) { | 280 if (!function_in_register_r4) { |
| 290 // Load this again, if it's used by the local context below. | 281 // Load this again, if it's used by the local context below. |
| (...skipping 4362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4653 return ON_STACK_REPLACEMENT; | 4644 return ON_STACK_REPLACEMENT; |
| 4654 } | 4645 } |
| 4655 | 4646 |
| 4656 DCHECK(interrupt_address == | 4647 DCHECK(interrupt_address == |
| 4657 isolate->builtins()->OsrAfterStackCheck()->entry()); | 4648 isolate->builtins()->OsrAfterStackCheck()->entry()); |
| 4658 return OSR_AFTER_STACK_CHECK; | 4649 return OSR_AFTER_STACK_CHECK; |
| 4659 } | 4650 } |
| 4660 } // namespace internal | 4651 } // namespace internal |
| 4661 } // namespace v8 | 4652 } // namespace v8 |
| 4662 #endif // V8_TARGET_ARCH_PPC | 4653 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |