Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: src/arm64/macro-assembler-arm64.cc

Issue 1330033002: [calls] Consistent call protocol for calls. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add arm64, mips and mips64 ports. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/arm64/lithium-codegen-arm64.cc ('k') | src/hydrogen.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #if V8_TARGET_ARCH_ARM64 5 #if V8_TARGET_ARCH_ARM64
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/base/division-by-constant.h" 8 #include "src/base/division-by-constant.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 2553 matching lines...) Expand 10 before | Expand all | Expand 10 after
2564 2564
2565 // The code below is made a lot easier because the calling code already sets 2565 // The code below is made a lot easier because the calling code already sets
2566 // up actual and expected registers according to the contract if values are 2566 // up actual and expected registers according to the contract if values are
2567 // passed in registers. 2567 // passed in registers.
2568 DCHECK(actual.is_immediate() || actual.reg().is(x0)); 2568 DCHECK(actual.is_immediate() || actual.reg().is(x0));
2569 DCHECK(expected.is_immediate() || expected.reg().is(x2)); 2569 DCHECK(expected.is_immediate() || expected.reg().is(x2));
2570 DCHECK((!code_constant.is_null() && code_reg.is(no_reg)) || code_reg.is(x3)); 2570 DCHECK((!code_constant.is_null() && code_reg.is(no_reg)) || code_reg.is(x3));
2571 2571
2572 if (expected.is_immediate()) { 2572 if (expected.is_immediate()) {
2573 DCHECK(actual.is_immediate()); 2573 DCHECK(actual.is_immediate());
2574 Mov(x0, actual.immediate());
2574 if (expected.immediate() == actual.immediate()) { 2575 if (expected.immediate() == actual.immediate()) {
2575 definitely_matches = true; 2576 definitely_matches = true;
2576 2577
2577 } else { 2578 } else {
2578 Mov(x0, actual.immediate());
2579 if (expected.immediate() == 2579 if (expected.immediate() ==
2580 SharedFunctionInfo::kDontAdaptArgumentsSentinel) { 2580 SharedFunctionInfo::kDontAdaptArgumentsSentinel) {
2581 // Don't worry about adapting arguments for builtins that 2581 // Don't worry about adapting arguments for builtins that
2582 // don't want that done. Skip adaption code by making it look 2582 // don't want that done. Skip adaption code by making it look
2583 // like we have a match between expected and actual number of 2583 // like we have a match between expected and actual number of
2584 // arguments. 2584 // arguments.
2585 definitely_matches = true; 2585 definitely_matches = true;
2586 } else { 2586 } else {
2587 *definitely_mismatches = true; 2587 *definitely_mismatches = true;
2588 // Set up x2 for the argument adaptor. 2588 // Set up x2 for the argument adaptor.
2589 Mov(x2, expected.immediate()); 2589 Mov(x2, expected.immediate());
2590 } 2590 }
2591 } 2591 }
2592 2592
2593 } else { // expected is a register. 2593 } else { // expected is a register.
2594 Operand actual_op = actual.is_immediate() ? Operand(actual.immediate()) 2594 Operand actual_op = actual.is_immediate() ? Operand(actual.immediate())
2595 : Operand(actual.reg()); 2595 : Operand(actual.reg());
2596 Mov(x0, actual_op);
2596 // If actual == expected perform a regular invocation. 2597 // If actual == expected perform a regular invocation.
2597 Cmp(expected.reg(), actual_op); 2598 Cmp(expected.reg(), actual_op);
2598 B(eq, &regular_invoke); 2599 B(eq, &regular_invoke);
2599 // Otherwise set up x0 for the argument adaptor.
2600 Mov(x0, actual_op);
2601 } 2600 }
2602 2601
2603 // If the argument counts may mismatch, generate a call to the argument 2602 // If the argument counts may mismatch, generate a call to the argument
2604 // adaptor. 2603 // adaptor.
2605 if (!definitely_matches) { 2604 if (!definitely_matches) {
2606 if (!code_constant.is_null()) { 2605 if (!code_constant.is_null()) {
2607 Mov(x3, Operand(code_constant)); 2606 Mov(x3, Operand(code_constant));
2608 Add(x3, x3, Code::kHeaderSize - kHeapObjectTag); 2607 Add(x3, x3, Code::kHeaderSize - kHeapObjectTag);
2609 } 2608 }
2610 2609
(...skipping 2510 matching lines...) Expand 10 before | Expand all | Expand 10 after
5121 } 5120 }
5122 5121
5123 5122
5124 #undef __ 5123 #undef __
5125 5124
5126 5125
5127 } // namespace internal 5126 } // namespace internal
5128 } // namespace v8 5127 } // namespace v8
5129 5128
5130 #endif // V8_TARGET_ARCH_ARM64 5129 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm64/lithium-codegen-arm64.cc ('k') | src/hydrogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698