| 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 |