| 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/arm64/frames-arm64.h" |     7 #include "src/arm64/frames-arm64.h" | 
|     8 #include "src/codegen.h" |     8 #include "src/codegen.h" | 
|     9 #include "src/debug/debug.h" |     9 #include "src/debug/debug.h" | 
|    10 #include "src/deoptimizer.h" |    10 #include "src/deoptimizer.h" | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    42   __ Ldr(result, ContextMemOperand(result, |    42   __ Ldr(result, ContextMemOperand(result, | 
|    43                                    Context::INTERNAL_ARRAY_FUNCTION_INDEX)); |    43                                    Context::INTERNAL_ARRAY_FUNCTION_INDEX)); | 
|    44 } |    44 } | 
|    45  |    45  | 
|    46  |    46  | 
|    47 void Builtins::Generate_Adaptor(MacroAssembler* masm, |    47 void Builtins::Generate_Adaptor(MacroAssembler* masm, | 
|    48                                 CFunctionId id, |    48                                 CFunctionId id, | 
|    49                                 BuiltinExtraArguments extra_args) { |    49                                 BuiltinExtraArguments extra_args) { | 
|    50   // ----------- S t a t e ------------- |    50   // ----------- S t a t e ------------- | 
|    51   //  -- x0                 : number of arguments excluding receiver |    51   //  -- x0                 : number of arguments excluding receiver | 
|    52   //  -- x1                 : called function (only guaranteed when |    52   //                          (only guaranteed when the called function | 
|    53   //                          extra_args requires it) |    53   //                           is not marked as DontAdaptArguments) | 
 |    54   //  -- x1                 : called function | 
|    54   //  -- sp[0]              : last argument |    55   //  -- sp[0]              : last argument | 
|    55   //  -- ... |    56   //  -- ... | 
|    56   //  -- sp[4 * (argc - 1)] : first argument (argc == x0) |    57   //  -- sp[4 * (argc - 1)] : first argument | 
|    57   //  -- sp[4 * argc]       : receiver |    58   //  -- sp[4 * argc]       : receiver | 
|    58   // ----------------------------------- |    59   // ----------------------------------- | 
|    59   __ AssertFunction(x1); |    60   __ AssertFunction(x1); | 
|    60  |    61  | 
|    61   // Make sure we operate in the context of the called function (for example |    62   // Make sure we operate in the context of the called function (for example | 
|    62   // ConstructStubs implemented in C++ will be run in the context of the caller |    63   // ConstructStubs implemented in C++ will be run in the context of the caller | 
|    63   // instead of the callee, due to the way that [[Construct]] is defined for |    64   // instead of the callee, due to the way that [[Construct]] is defined for | 
|    64   // ordinary functions). |    65   // ordinary functions). | 
|    65   // TODO(bmeurer): Can we make this more robust? |    66   // TODO(bmeurer): Can we make this more robust? | 
|    66   __ Ldr(cp, FieldMemOperand(x1, JSFunction::kContextOffset)); |    67   __ Ldr(cp, FieldMemOperand(x1, JSFunction::kContextOffset)); | 
|    67  |    68  | 
|    68   // Insert extra arguments. |    69   // Insert extra arguments. | 
|    69   int num_extra_args = 0; |    70   int num_extra_args = 0; | 
|    70   if (extra_args == NEEDS_CALLED_FUNCTION) { |    71   if (extra_args == NEEDS_CALLED_FUNCTION) { | 
|    71     num_extra_args = 1; |    72     num_extra_args = 1; | 
|    72     __ Push(x1); |    73     __ Push(x1); | 
|    73   } else { |    74   } else { | 
|    74     DCHECK(extra_args == NO_EXTRA_ARGUMENTS); |    75     DCHECK(extra_args == NO_EXTRA_ARGUMENTS); | 
|    75   } |    76   } | 
|    76  |    77  | 
|    77   // JumpToExternalReference expects x0 to contain the number of arguments |    78   // JumpToExternalReference expects x0 to contain the number of arguments | 
|    78   // including the receiver and the extra arguments. |    79   // including the receiver and the extra arguments.  But x0 is only valid | 
 |    80   // if the called function is marked as DontAdaptArguments, otherwise we | 
 |    81   // need to load the argument count from the SharedFunctionInfo. | 
 |    82   __ Ldr(x2, FieldMemOperand(x1, JSFunction::kSharedFunctionInfoOffset)); | 
 |    83   __ Ldrsw( | 
 |    84       x2, FieldMemOperand(x2, SharedFunctionInfo::kFormalParameterCountOffset)); | 
 |    85   __ Cmp(x2, SharedFunctionInfo::kDontAdaptArgumentsSentinel); | 
 |    86   __ Csel(x0, x0, x2, eq); | 
|    79   __ Add(x0, x0, num_extra_args + 1); |    87   __ Add(x0, x0, num_extra_args + 1); | 
 |    88  | 
|    80   __ JumpToExternalReference(ExternalReference(id, masm->isolate())); |    89   __ JumpToExternalReference(ExternalReference(id, masm->isolate())); | 
|    81 } |    90 } | 
|    82  |    91  | 
|    83  |    92  | 
|    84 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { |    93 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { | 
|    85   // ----------- S t a t e ------------- |    94   // ----------- S t a t e ------------- | 
|    86   //  -- x0     : number of arguments |    95   //  -- x0     : number of arguments | 
|    87   //  -- lr     : return address |    96   //  -- lr     : return address | 
|    88   //  -- sp[...]: constructor arguments |    97   //  -- sp[...]: constructor arguments | 
|    89   // ----------------------------------- |    98   // ----------------------------------- | 
| (...skipping 1862 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1952   } |  1961   } | 
|  1953 } |  1962 } | 
|  1954  |  1963  | 
|  1955  |  1964  | 
|  1956 #undef __ |  1965 #undef __ | 
|  1957  |  1966  | 
|  1958 }  // namespace internal |  1967 }  // namespace internal | 
|  1959 }  // namespace v8 |  1968 }  // namespace v8 | 
|  1960  |  1969  | 
|  1961 #endif  // V8_TARGET_ARCH_ARM |  1970 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW |