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 #include "src/crankshaft/ppc/lithium-codegen-ppc.h" | 5 #include "src/crankshaft/ppc/lithium-codegen-ppc.h" |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.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/crankshaft/hydrogen-osr.h" | 10 #include "src/crankshaft/hydrogen-osr.h" |
(...skipping 3509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3520 __ addi(length, length, Operand(-1)); | 3520 __ addi(length, length, Operand(-1)); |
3521 __ bdnz(&loop); | 3521 __ bdnz(&loop); |
3522 | 3522 |
3523 __ bind(&invoke); | 3523 __ bind(&invoke); |
3524 DCHECK(instr->HasPointerMap()); | 3524 DCHECK(instr->HasPointerMap()); |
3525 LPointerMap* pointers = instr->pointer_map(); | 3525 LPointerMap* pointers = instr->pointer_map(); |
3526 SafepointGenerator safepoint_generator(this, pointers, Safepoint::kLazyDeopt); | 3526 SafepointGenerator safepoint_generator(this, pointers, Safepoint::kLazyDeopt); |
3527 // The number of arguments is stored in receiver which is r3, as expected | 3527 // The number of arguments is stored in receiver which is r3, as expected |
3528 // by InvokeFunction. | 3528 // by InvokeFunction. |
3529 ParameterCount actual(receiver); | 3529 ParameterCount actual(receiver); |
3530 __ InvokeFunction(function, actual, CALL_FUNCTION, safepoint_generator); | 3530 __ InvokeFunction(function, no_reg, actual, CALL_FUNCTION, |
| 3531 safepoint_generator); |
3531 } | 3532 } |
3532 | 3533 |
3533 | 3534 |
3534 void LCodeGen::DoPushArgument(LPushArgument* instr) { | 3535 void LCodeGen::DoPushArgument(LPushArgument* instr) { |
3535 LOperand* argument = instr->value(); | 3536 LOperand* argument = instr->value(); |
3536 if (argument->IsDoubleRegister() || argument->IsDoubleStackSlot()) { | 3537 if (argument->IsDoubleRegister() || argument->IsDoubleStackSlot()) { |
3537 Abort(kDoPushArgumentNotImplementedForDoubleType); | 3538 Abort(kDoPushArgumentNotImplementedForDoubleType); |
3538 } else { | 3539 } else { |
3539 Register argument_reg = EmitLoadRegister(argument, ip); | 3540 Register argument_reg = EmitLoadRegister(argument, ip); |
3540 __ push(argument_reg); | 3541 __ push(argument_reg); |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3947 void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) { | 3948 void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) { |
3948 DCHECK(ToRegister(instr->context()).is(cp)); | 3949 DCHECK(ToRegister(instr->context()).is(cp)); |
3949 DCHECK(ToRegister(instr->function()).is(r4)); | 3950 DCHECK(ToRegister(instr->function()).is(r4)); |
3950 DCHECK(instr->HasPointerMap()); | 3951 DCHECK(instr->HasPointerMap()); |
3951 | 3952 |
3952 Handle<JSFunction> known_function = instr->hydrogen()->known_function(); | 3953 Handle<JSFunction> known_function = instr->hydrogen()->known_function(); |
3953 if (known_function.is_null()) { | 3954 if (known_function.is_null()) { |
3954 LPointerMap* pointers = instr->pointer_map(); | 3955 LPointerMap* pointers = instr->pointer_map(); |
3955 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); | 3956 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); |
3956 ParameterCount count(instr->arity()); | 3957 ParameterCount count(instr->arity()); |
3957 __ InvokeFunction(r4, count, CALL_FUNCTION, generator); | 3958 __ InvokeFunction(r4, no_reg, count, CALL_FUNCTION, generator); |
3958 } else { | 3959 } else { |
3959 CallKnownFunction(known_function, | 3960 CallKnownFunction(known_function, |
3960 instr->hydrogen()->formal_parameter_count(), | 3961 instr->hydrogen()->formal_parameter_count(), |
3961 instr->arity(), instr); | 3962 instr->arity(), instr); |
3962 } | 3963 } |
3963 } | 3964 } |
3964 | 3965 |
3965 | 3966 |
3966 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { | 3967 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { |
3967 DCHECK(ToRegister(instr->result()).is(r3)); | 3968 DCHECK(ToRegister(instr->result()).is(r3)); |
(...skipping 2067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6035 __ Push(scope_info); | 6036 __ Push(scope_info); |
6036 __ push(ToRegister(instr->function())); | 6037 __ push(ToRegister(instr->function())); |
6037 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6038 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
6038 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6039 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6039 } | 6040 } |
6040 | 6041 |
6041 | 6042 |
6042 #undef __ | 6043 #undef __ |
6043 } // namespace internal | 6044 } // namespace internal |
6044 } // namespace v8 | 6045 } // namespace v8 |
OLD | NEW |