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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/ic/handler-compiler.h" | 10 #include "src/ic/handler-compiler.h" |
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 // | 1060 // |
1061 // Note that this stub must be generated before any use of Abort. | 1061 // Note that this stub must be generated before any use of Abort. |
1062 MacroAssembler::NoUseRealAbortsScope no_use_real_aborts(masm); | 1062 MacroAssembler::NoUseRealAbortsScope no_use_real_aborts(masm); |
1063 | 1063 |
1064 ASM_LOCATION("CEntryStub::Generate entry"); | 1064 ASM_LOCATION("CEntryStub::Generate entry"); |
1065 ProfileEntryHookStub::MaybeCallEntryHook(masm); | 1065 ProfileEntryHookStub::MaybeCallEntryHook(masm); |
1066 | 1066 |
1067 // Register parameters: | 1067 // Register parameters: |
1068 // x0: argc (including receiver, untagged) | 1068 // x0: argc (including receiver, untagged) |
1069 // x1: target | 1069 // x1: target |
1070 // If argv_in_register(): | |
1071 // x11: argv (pointer to first argument) | |
1072 // | 1070 // |
1073 // The stack on entry holds the arguments and the receiver, with the receiver | 1071 // The stack on entry holds the arguments and the receiver, with the receiver |
1074 // at the highest address: | 1072 // at the highest address: |
1075 // | 1073 // |
1076 // jssp]argc-1]: receiver | 1074 // jssp]argc-1]: receiver |
1077 // jssp[argc-2]: arg[argc-2] | 1075 // jssp[argc-2]: arg[argc-2] |
1078 // ... ... | 1076 // ... ... |
1079 // jssp[1]: arg[1] | 1077 // jssp[1]: arg[1] |
1080 // jssp[0]: arg[0] | 1078 // jssp[0]: arg[0] |
1081 // | 1079 // |
(...skipping 11 matching lines...) Expand all Loading... |
1093 // into their argument registers, rather than using callee-saved registers and | 1091 // into their argument registers, rather than using callee-saved registers and |
1094 // preserving them on the stack. | 1092 // preserving them on the stack. |
1095 const Register& argv = x21; | 1093 const Register& argv = x21; |
1096 const Register& argc = x22; | 1094 const Register& argc = x22; |
1097 const Register& target = x23; | 1095 const Register& target = x23; |
1098 | 1096 |
1099 // Derive argv from the stack pointer so that it points to the first argument | 1097 // Derive argv from the stack pointer so that it points to the first argument |
1100 // (arg[argc-2]), or just below the receiver in case there are no arguments. | 1098 // (arg[argc-2]), or just below the receiver in case there are no arguments. |
1101 // - Adjust for the arg[] array. | 1099 // - Adjust for the arg[] array. |
1102 Register temp_argv = x11; | 1100 Register temp_argv = x11; |
1103 if (!argv_in_register()) { | 1101 __ Add(temp_argv, jssp, Operand(x0, LSL, kPointerSizeLog2)); |
1104 __ Add(temp_argv, jssp, Operand(x0, LSL, kPointerSizeLog2)); | 1102 // - Adjust for the receiver. |
1105 // - Adjust for the receiver. | 1103 __ Sub(temp_argv, temp_argv, 1 * kPointerSize); |
1106 __ Sub(temp_argv, temp_argv, 1 * kPointerSize); | |
1107 } | |
1108 | 1104 |
1109 // Enter the exit frame. Reserve three slots to preserve x21-x23 callee-saved | 1105 // Enter the exit frame. Reserve three slots to preserve x21-x23 callee-saved |
1110 // registers. | 1106 // registers. |
1111 FrameScope scope(masm, StackFrame::MANUAL); | 1107 FrameScope scope(masm, StackFrame::MANUAL); |
1112 __ EnterExitFrame(save_doubles(), x10, 3); | 1108 __ EnterExitFrame(save_doubles(), x10, 3); |
1113 DCHECK(csp.Is(__ StackPointer())); | 1109 DCHECK(csp.Is(__ StackPointer())); |
1114 | 1110 |
1115 // Poke callee-saved registers into reserved space. | 1111 // Poke callee-saved registers into reserved space. |
1116 __ Poke(argv, 1 * kPointerSize); | 1112 __ Poke(argv, 1 * kPointerSize); |
1117 __ Poke(argc, 2 * kPointerSize); | 1113 __ Poke(argc, 2 * kPointerSize); |
(...skipping 4873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5991 MemOperand(fp, 6 * kPointerSize), NULL); | 5987 MemOperand(fp, 6 * kPointerSize), NULL); |
5992 } | 5988 } |
5993 | 5989 |
5994 | 5990 |
5995 #undef __ | 5991 #undef __ |
5996 | 5992 |
5997 } // namespace internal | 5993 } // namespace internal |
5998 } // namespace v8 | 5994 } // namespace v8 |
5999 | 5995 |
6000 #endif // V8_TARGET_ARCH_ARM64 | 5996 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |