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-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 const Register& current_sp = __ StackPointer(); | 452 const Register& current_sp = __ StackPointer(); |
453 // Nothing ensures 16 bytes alignment here. | 453 // Nothing ensures 16 bytes alignment here. |
454 ASSERT(!current_sp.Is(csp)); | 454 ASSERT(!current_sp.Is(csp)); |
455 __ mov(current_sp, fp); | 455 __ mov(current_sp, fp); |
456 int no_frame_start = masm_->pc_offset(); | 456 int no_frame_start = masm_->pc_offset(); |
457 __ ldp(fp, lr, MemOperand(current_sp, 2 * kXRegSize, PostIndex)); | 457 __ ldp(fp, lr, MemOperand(current_sp, 2 * kXRegSize, PostIndex)); |
458 // Drop the arguments and receiver and return. | 458 // Drop the arguments and receiver and return. |
459 // TODO(all): This implementation is overkill as it supports 2**31+1 | 459 // TODO(all): This implementation is overkill as it supports 2**31+1 |
460 // arguments, consider how to improve it without creating a security | 460 // arguments, consider how to improve it without creating a security |
461 // hole. | 461 // hole. |
462 __ LoadLiteral(ip0, 3 * kInstructionSize); | 462 __ ldr_pcrel(ip0, (3 * kInstructionSize) >> kLoadLiteralScaleLog2); |
463 __ add(current_sp, current_sp, ip0); | 463 __ add(current_sp, current_sp, ip0); |
464 __ ret(); | 464 __ ret(); |
465 __ dc64(kXRegSize * (info_->scope()->num_parameters() + 1)); | 465 __ dc64(kXRegSize * (info_->scope()->num_parameters() + 1)); |
466 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); | 466 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); |
467 } | 467 } |
468 } | 468 } |
469 } | 469 } |
470 | 470 |
471 | 471 |
472 void FullCodeGenerator::EffectContext::Plug(Variable* var) const { | 472 void FullCodeGenerator::EffectContext::Plug(Variable* var) const { |
(...skipping 4420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4893 return previous_; | 4893 return previous_; |
4894 } | 4894 } |
4895 | 4895 |
4896 | 4896 |
4897 #undef __ | 4897 #undef __ |
4898 | 4898 |
4899 | 4899 |
4900 } } // namespace v8::internal | 4900 } } // namespace v8::internal |
4901 | 4901 |
4902 #endif // V8_TARGET_ARCH_ARM64 | 4902 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |