OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved.7 | 1 // Copyright 2012 the V8 project authors. All rights reserved.7 |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3295 __ sll(scratch, length, 2); | 3295 __ sll(scratch, length, 2); |
3296 | 3296 |
3297 __ bind(&invoke); | 3297 __ bind(&invoke); |
3298 DCHECK(instr->HasPointerMap()); | 3298 DCHECK(instr->HasPointerMap()); |
3299 LPointerMap* pointers = instr->pointer_map(); | 3299 LPointerMap* pointers = instr->pointer_map(); |
3300 SafepointGenerator safepoint_generator( | 3300 SafepointGenerator safepoint_generator( |
3301 this, pointers, Safepoint::kLazyDeopt); | 3301 this, pointers, Safepoint::kLazyDeopt); |
3302 // The number of arguments is stored in receiver which is a0, as expected | 3302 // The number of arguments is stored in receiver which is a0, as expected |
3303 // by InvokeFunction. | 3303 // by InvokeFunction. |
3304 ParameterCount actual(receiver); | 3304 ParameterCount actual(receiver); |
3305 __ InvokeFunction(function, actual, CALL_FUNCTION, safepoint_generator); | 3305 __ InvokeFunction(function, no_reg, actual, CALL_FUNCTION, |
| 3306 safepoint_generator); |
3306 } | 3307 } |
3307 | 3308 |
3308 | 3309 |
3309 void LCodeGen::DoPushArgument(LPushArgument* instr) { | 3310 void LCodeGen::DoPushArgument(LPushArgument* instr) { |
3310 LOperand* argument = instr->value(); | 3311 LOperand* argument = instr->value(); |
3311 if (argument->IsDoubleRegister() || argument->IsDoubleStackSlot()) { | 3312 if (argument->IsDoubleRegister() || argument->IsDoubleStackSlot()) { |
3312 Abort(kDoPushArgumentNotImplementedForDoubleType); | 3313 Abort(kDoPushArgumentNotImplementedForDoubleType); |
3313 } else { | 3314 } else { |
3314 Register argument_reg = EmitLoadRegister(argument, at); | 3315 Register argument_reg = EmitLoadRegister(argument, at); |
3315 __ push(argument_reg); | 3316 __ push(argument_reg); |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3716 void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) { | 3717 void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) { |
3717 DCHECK(ToRegister(instr->context()).is(cp)); | 3718 DCHECK(ToRegister(instr->context()).is(cp)); |
3718 DCHECK(ToRegister(instr->function()).is(a1)); | 3719 DCHECK(ToRegister(instr->function()).is(a1)); |
3719 DCHECK(instr->HasPointerMap()); | 3720 DCHECK(instr->HasPointerMap()); |
3720 | 3721 |
3721 Handle<JSFunction> known_function = instr->hydrogen()->known_function(); | 3722 Handle<JSFunction> known_function = instr->hydrogen()->known_function(); |
3722 if (known_function.is_null()) { | 3723 if (known_function.is_null()) { |
3723 LPointerMap* pointers = instr->pointer_map(); | 3724 LPointerMap* pointers = instr->pointer_map(); |
3724 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); | 3725 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); |
3725 ParameterCount count(instr->arity()); | 3726 ParameterCount count(instr->arity()); |
3726 __ InvokeFunction(a1, count, CALL_FUNCTION, generator); | 3727 __ InvokeFunction(a1, no_reg, count, CALL_FUNCTION, generator); |
3727 } else { | 3728 } else { |
3728 CallKnownFunction(known_function, | 3729 CallKnownFunction(known_function, |
3729 instr->hydrogen()->formal_parameter_count(), | 3730 instr->hydrogen()->formal_parameter_count(), |
3730 instr->arity(), instr); | 3731 instr->arity(), instr); |
3731 } | 3732 } |
3732 } | 3733 } |
3733 | 3734 |
3734 | 3735 |
3735 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { | 3736 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { |
3736 DCHECK(ToRegister(instr->result()).is(v0)); | 3737 DCHECK(ToRegister(instr->result()).is(v0)); |
(...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5818 __ Push(at, ToRegister(instr->function())); | 5819 __ Push(at, ToRegister(instr->function())); |
5819 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5820 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
5820 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5821 RecordSafepoint(Safepoint::kNoLazyDeopt); |
5821 } | 5822 } |
5822 | 5823 |
5823 | 5824 |
5824 #undef __ | 5825 #undef __ |
5825 | 5826 |
5826 } // namespace internal | 5827 } // namespace internal |
5827 } // namespace v8 | 5828 } // namespace v8 |
OLD | NEW |