| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
| 8 | 8 |
| 9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 int no_frame_start = masm_->pc_offset(); | 453 int no_frame_start = masm_->pc_offset(); |
| 454 __ ldp(fp, lr, MemOperand(current_sp, 2 * kXRegSize, PostIndex)); | 454 __ ldp(fp, lr, MemOperand(current_sp, 2 * kXRegSize, PostIndex)); |
| 455 // Drop the arguments and receiver and return. | 455 // Drop the arguments and receiver and return. |
| 456 // TODO(all): This implementation is overkill as it supports 2**31+1 | 456 // TODO(all): This implementation is overkill as it supports 2**31+1 |
| 457 // arguments, consider how to improve it without creating a security | 457 // arguments, consider how to improve it without creating a security |
| 458 // hole. | 458 // hole. |
| 459 __ ldr_pcrel(ip0, (3 * kInstructionSize) >> kLoadLiteralScaleLog2); | 459 __ ldr_pcrel(ip0, (3 * kInstructionSize) >> kLoadLiteralScaleLog2); |
| 460 __ add(current_sp, current_sp, ip0); | 460 __ add(current_sp, current_sp, ip0); |
| 461 __ ret(); | 461 __ ret(); |
| 462 int32_t arg_count = info_->scope()->num_parameters() + 1; | 462 int32_t arg_count = info_->scope()->num_parameters() + 1; |
| 463 if (FLAG_experimental_classes && | 463 if (IsSubclassConstructor(info_->function()->kind())) { |
| 464 IsSubclassConstructor(info_->function()->kind())) { | |
| 465 arg_count++; | 464 arg_count++; |
| 466 } | 465 } |
| 467 __ dc64(kXRegSize * arg_count); | 466 __ dc64(kXRegSize * arg_count); |
| 468 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); | 467 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); |
| 469 } | 468 } |
| 470 } | 469 } |
| 471 } | 470 } |
| 472 | 471 |
| 473 | 472 |
| 474 void FullCodeGenerator::EffectContext::Plug(Variable* var) const { | 473 void FullCodeGenerator::EffectContext::Plug(Variable* var) const { |
| (...skipping 2396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2871 PreservePositionScope scope(masm()->positions_recorder()); | 2870 PreservePositionScope scope(masm()->positions_recorder()); |
| 2872 VisitForStackValue(property->obj()); | 2871 VisitForStackValue(property->obj()); |
| 2873 } | 2872 } |
| 2874 if (is_named_call) { | 2873 if (is_named_call) { |
| 2875 EmitCallWithLoadIC(expr); | 2874 EmitCallWithLoadIC(expr); |
| 2876 } else { | 2875 } else { |
| 2877 EmitKeyedCallWithLoadIC(expr, property->key()); | 2876 EmitKeyedCallWithLoadIC(expr, property->key()); |
| 2878 } | 2877 } |
| 2879 } | 2878 } |
| 2880 } else if (call_type == Call::SUPER_CALL) { | 2879 } else if (call_type == Call::SUPER_CALL) { |
| 2881 if (FLAG_experimental_classes) { | 2880 EmitSuperConstructorCall(expr); |
| 2882 EmitSuperConstructorCall(expr); | |
| 2883 } else { | |
| 2884 SuperReference* super_ref = callee->AsSuperReference(); | |
| 2885 EmitLoadSuperConstructor(); | |
| 2886 __ Push(result_register()); | |
| 2887 VisitForStackValue(super_ref->this_var()); | |
| 2888 EmitCall(expr, CallICState::METHOD); | |
| 2889 } | |
| 2890 } else { | 2881 } else { |
| 2891 DCHECK(call_type == Call::OTHER_CALL); | 2882 DCHECK(call_type == Call::OTHER_CALL); |
| 2892 // Call to an arbitrary expression not handled specially above. | 2883 // Call to an arbitrary expression not handled specially above. |
| 2893 { PreservePositionScope scope(masm()->positions_recorder()); | 2884 { PreservePositionScope scope(masm()->positions_recorder()); |
| 2894 VisitForStackValue(callee); | 2885 VisitForStackValue(callee); |
| 2895 } | 2886 } |
| 2896 __ LoadRoot(x1, Heap::kUndefinedValueRootIndex); | 2887 __ LoadRoot(x1, Heap::kUndefinedValueRootIndex); |
| 2897 __ Push(x1); | 2888 __ Push(x1); |
| 2898 // Emit function call. | 2889 // Emit function call. |
| 2899 EmitCall(expr); | 2890 EmitCall(expr); |
| (...skipping 2570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5470 return previous_; | 5461 return previous_; |
| 5471 } | 5462 } |
| 5472 | 5463 |
| 5473 | 5464 |
| 5474 #undef __ | 5465 #undef __ |
| 5475 | 5466 |
| 5476 | 5467 |
| 5477 } } // namespace v8::internal | 5468 } } // namespace v8::internal |
| 5478 | 5469 |
| 5479 #endif // V8_TARGET_ARCH_ARM64 | 5470 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |