| 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/bootstrapper.h" |     9 #include "src/bootstrapper.h" | 
|    10 #include "src/code-stubs.h" |    10 #include "src/code-stubs.h" | 
|    11 #include "src/regexp-macro-assembler.h" |    11 #include "src/regexp-macro-assembler.h" | 
|    12 #include "src/stub-cache.h" |    12 #include "src/stub-cache.h" | 
|    13  |    13  | 
|    14 namespace v8 { |    14 namespace v8 { | 
|    15 namespace internal { |    15 namespace internal { | 
|    16  |    16  | 
|    17 void FastNewClosureStub::InitializeInterfaceDescriptor( |    17 void FastNewClosureStub::InitializeInterfaceDescriptor( | 
|    18     CodeStubInterfaceDescriptor* descriptor) { |    18     CodeStubInterfaceDescriptor* descriptor) { | 
 |    19   // cp: context | 
|    19   // x2: function info |    20   // x2: function info | 
|    20   Register registers[] = { x2 }; |    21   Register registers[] = { cp, x2 }; | 
|    21   descriptor->Initialize( |    22   descriptor->Initialize( | 
|    22       ARRAY_SIZE(registers), registers, |    23       ARRAY_SIZE(registers), registers, | 
|    23       Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); |    24       Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); | 
|    24 } |    25 } | 
|    25  |    26  | 
|    26  |    27  | 
|    27 void FastNewContextStub::InitializeInterfaceDescriptor( |    28 void FastNewContextStub::InitializeInterfaceDescriptor( | 
|    28     CodeStubInterfaceDescriptor* descriptor) { |    29     CodeStubInterfaceDescriptor* descriptor) { | 
 |    30   // cp: context | 
|    29   // x1: function |    31   // x1: function | 
|    30   Register registers[] = { x1 }; |    32   Register registers[] = { cp, x1 }; | 
|    31   descriptor->Initialize(ARRAY_SIZE(registers), registers); |    33   descriptor->Initialize(ARRAY_SIZE(registers), registers); | 
|    32 } |    34 } | 
|    33  |    35  | 
|    34  |    36  | 
|    35 void ToNumberStub::InitializeInterfaceDescriptor( |    37 void ToNumberStub::InitializeInterfaceDescriptor( | 
|    36     CodeStubInterfaceDescriptor* descriptor) { |    38     CodeStubInterfaceDescriptor* descriptor) { | 
 |    39   // cp: context | 
|    37   // x0: value |    40   // x0: value | 
|    38   Register registers[] = { x0 }; |    41   Register registers[] = { cp, x0 }; | 
|    39   descriptor->Initialize(ARRAY_SIZE(registers), registers); |    42   descriptor->Initialize(ARRAY_SIZE(registers), registers); | 
|    40 } |    43 } | 
|    41  |    44  | 
|    42  |    45  | 
|    43 void NumberToStringStub::InitializeInterfaceDescriptor( |    46 void NumberToStringStub::InitializeInterfaceDescriptor( | 
|    44     CodeStubInterfaceDescriptor* descriptor) { |    47     CodeStubInterfaceDescriptor* descriptor) { | 
 |    48   // cp: context | 
|    45   // x0: value |    49   // x0: value | 
|    46   Register registers[] = { x0 }; |    50   Register registers[] = { cp, x0 }; | 
|    47   descriptor->Initialize( |    51   descriptor->Initialize( | 
|    48       ARRAY_SIZE(registers), registers, |    52       ARRAY_SIZE(registers), registers, | 
|    49       Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); |    53       Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); | 
|    50 } |    54 } | 
|    51  |    55  | 
|    52  |    56  | 
|    53 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |    57 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( | 
|    54     CodeStubInterfaceDescriptor* descriptor) { |    58     CodeStubInterfaceDescriptor* descriptor) { | 
 |    59   // cp: context | 
|    55   // x3: array literals array |    60   // x3: array literals array | 
|    56   // x2: array literal index |    61   // x2: array literal index | 
|    57   // x1: constant elements |    62   // x1: constant elements | 
|    58   Register registers[] = { x3, x2, x1 }; |    63   Register registers[] = { cp, x3, x2, x1 }; | 
|    59   Representation representations[] = { |    64   Representation representations[] = { | 
|    60     Representation::Tagged(), |    65     Representation::Tagged(), | 
 |    66     Representation::Tagged(), | 
|    61     Representation::Smi(), |    67     Representation::Smi(), | 
|    62     Representation::Tagged() }; |    68     Representation::Tagged() }; | 
|    63   descriptor->Initialize( |    69   descriptor->Initialize( | 
|    64       ARRAY_SIZE(registers), registers, |    70       ARRAY_SIZE(registers), registers, | 
|    65       Runtime::FunctionForId( |    71       Runtime::FunctionForId( | 
|    66           Runtime::kCreateArrayLiteralStubBailout)->entry, |    72           Runtime::kCreateArrayLiteralStubBailout)->entry, | 
|    67       representations); |    73       representations); | 
|    68 } |    74 } | 
|    69  |    75  | 
|    70  |    76  | 
|    71 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( |    77 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( | 
|    72     CodeStubInterfaceDescriptor* descriptor) { |    78     CodeStubInterfaceDescriptor* descriptor) { | 
 |    79   // cp: context | 
|    73   // x3: object literals array |    80   // x3: object literals array | 
|    74   // x2: object literal index |    81   // x2: object literal index | 
|    75   // x1: constant properties |    82   // x1: constant properties | 
|    76   // x0: object literal flags |    83   // x0: object literal flags | 
|    77   Register registers[] = { x3, x2, x1, x0 }; |    84   Register registers[] = { cp, x3, x2, x1, x0 }; | 
|    78   descriptor->Initialize( |    85   descriptor->Initialize( | 
|    79       ARRAY_SIZE(registers), registers, |    86       ARRAY_SIZE(registers), registers, | 
|    80       Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); |    87       Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); | 
|    81 } |    88 } | 
|    82  |    89  | 
|    83  |    90  | 
|    84 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( |    91 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( | 
|    85     CodeStubInterfaceDescriptor* descriptor) { |    92     CodeStubInterfaceDescriptor* descriptor) { | 
 |    93   // cp: context | 
|    86   // x2: feedback vector |    94   // x2: feedback vector | 
|    87   // x3: call feedback slot |    95   // x3: call feedback slot | 
|    88   Register registers[] = { x2, x3 }; |    96   Register registers[] = { cp, x2, x3 }; | 
|    89   descriptor->Initialize(ARRAY_SIZE(registers), registers); |    97   descriptor->Initialize(ARRAY_SIZE(registers), registers); | 
|    90 } |    98 } | 
|    91  |    99  | 
|    92  |   100  | 
|    93 void RegExpConstructResultStub::InitializeInterfaceDescriptor( |   101 void RegExpConstructResultStub::InitializeInterfaceDescriptor( | 
|    94     CodeStubInterfaceDescriptor* descriptor) { |   102     CodeStubInterfaceDescriptor* descriptor) { | 
 |   103   // cp: context | 
|    95   // x2: length |   104   // x2: length | 
|    96   // x1: index (of last match) |   105   // x1: index (of last match) | 
|    97   // x0: string |   106   // x0: string | 
|    98   Register registers[] = { x2, x1, x0 }; |   107   Register registers[] = { cp, x2, x1, x0 }; | 
|    99   descriptor->Initialize( |   108   descriptor->Initialize( | 
|   100       ARRAY_SIZE(registers), registers, |   109       ARRAY_SIZE(registers), registers, | 
|   101       Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); |   110       Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); | 
|   102 } |   111 } | 
|   103  |   112  | 
|   104  |   113  | 
|   105 void TransitionElementsKindStub::InitializeInterfaceDescriptor( |   114 void TransitionElementsKindStub::InitializeInterfaceDescriptor( | 
|   106     CodeStubInterfaceDescriptor* descriptor) { |   115     CodeStubInterfaceDescriptor* descriptor) { | 
 |   116   // cp: context | 
|   107   // x0: value (js_array) |   117   // x0: value (js_array) | 
|   108   // x1: to_map |   118   // x1: to_map | 
|   109   Register registers[] = { x0, x1 }; |   119   Register registers[] = { cp, x0, x1 }; | 
|   110   Address entry = |   120   Address entry = | 
|   111       Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; |   121       Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; | 
|   112   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   122   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   113                          FUNCTION_ADDR(entry)); |   123                          FUNCTION_ADDR(entry)); | 
|   114 } |   124 } | 
|   115  |   125  | 
|   116  |   126  | 
|   117 void CompareNilICStub::InitializeInterfaceDescriptor( |   127 void CompareNilICStub::InitializeInterfaceDescriptor( | 
|   118     CodeStubInterfaceDescriptor* descriptor) { |   128     CodeStubInterfaceDescriptor* descriptor) { | 
 |   129   // cp: context | 
|   119   // x0: value to compare |   130   // x0: value to compare | 
|   120   Register registers[] = { x0 }; |   131   Register registers[] = { cp, x0 }; | 
|   121   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   132   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   122                          FUNCTION_ADDR(CompareNilIC_Miss)); |   133                          FUNCTION_ADDR(CompareNilIC_Miss)); | 
|   123   descriptor->SetMissHandler( |   134   descriptor->SetMissHandler( | 
|   124       ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |   135       ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); | 
|   125 } |   136 } | 
|   126  |   137  | 
|   127  |   138  | 
 |   139 const Register InterfaceDescriptor::ContextRegister() { return cp; } | 
 |   140  | 
 |   141  | 
|   128 static void InitializeArrayConstructorDescriptor( |   142 static void InitializeArrayConstructorDescriptor( | 
|   129     CodeStubInterfaceDescriptor* descriptor, |   143     CodeStubInterfaceDescriptor* descriptor, | 
|   130     int constant_stack_parameter_count) { |   144     int constant_stack_parameter_count) { | 
 |   145   // cp: context | 
|   131   // x1: function |   146   // x1: function | 
|   132   // x2: allocation site with elements kind |   147   // x2: allocation site with elements kind | 
|   133   // x0: number of arguments to the constructor function |   148   // x0: number of arguments to the constructor function | 
|   134   Address deopt_handler = Runtime::FunctionForId( |   149   Address deopt_handler = Runtime::FunctionForId( | 
|   135       Runtime::kArrayConstructor)->entry; |   150       Runtime::kArrayConstructor)->entry; | 
|   136  |   151  | 
|   137   if (constant_stack_parameter_count == 0) { |   152   if (constant_stack_parameter_count == 0) { | 
|   138     Register registers[] = { x1, x2 }; |   153     Register registers[] = { cp, x1, x2 }; | 
|   139     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   154     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   140                            deopt_handler, |   155                            deopt_handler, | 
|   141                            NULL, |   156                            NULL, | 
|   142                            constant_stack_parameter_count, |   157                            constant_stack_parameter_count, | 
|   143                            JS_FUNCTION_STUB_MODE); |   158                            JS_FUNCTION_STUB_MODE); | 
|   144   } else { |   159   } else { | 
|   145     // stack param count needs (constructor pointer, and single argument) |   160     // stack param count needs (constructor pointer, and single argument) | 
|   146     Register registers[] = { x1, x2, x0 }; |   161     Register registers[] = { cp, x1, x2, x0 }; | 
|   147     Representation representations[] = { |   162     Representation representations[] = { | 
|   148         Representation::Tagged(), |   163         Representation::Tagged(), | 
|   149         Representation::Tagged(), |   164         Representation::Tagged(), | 
 |   165         Representation::Tagged(), | 
|   150         Representation::Integer32() }; |   166         Representation::Integer32() }; | 
|   151     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   167     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   152                            x0, |   168                            x0, | 
|   153                            deopt_handler, |   169                            deopt_handler, | 
|   154                            representations, |   170                            representations, | 
|   155                            constant_stack_parameter_count, |   171                            constant_stack_parameter_count, | 
|   156                            JS_FUNCTION_STUB_MODE, |   172                            JS_FUNCTION_STUB_MODE, | 
|   157                            PASS_ARGUMENTS); |   173                            PASS_ARGUMENTS); | 
|   158   } |   174   } | 
|   159 } |   175 } | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|   173  |   189  | 
|   174 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |   190 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( | 
|   175     CodeStubInterfaceDescriptor* descriptor) { |   191     CodeStubInterfaceDescriptor* descriptor) { | 
|   176   InitializeArrayConstructorDescriptor(descriptor, -1); |   192   InitializeArrayConstructorDescriptor(descriptor, -1); | 
|   177 } |   193 } | 
|   178  |   194  | 
|   179  |   195  | 
|   180 static void InitializeInternalArrayConstructorDescriptor( |   196 static void InitializeInternalArrayConstructorDescriptor( | 
|   181     CodeStubInterfaceDescriptor* descriptor, |   197     CodeStubInterfaceDescriptor* descriptor, | 
|   182     int constant_stack_parameter_count) { |   198     int constant_stack_parameter_count) { | 
 |   199   // cp: context | 
|   183   // x1: constructor function |   200   // x1: constructor function | 
|   184   // x0: number of arguments to the constructor function |   201   // x0: number of arguments to the constructor function | 
|   185   Address deopt_handler = Runtime::FunctionForId( |   202   Address deopt_handler = Runtime::FunctionForId( | 
|   186       Runtime::kInternalArrayConstructor)->entry; |   203       Runtime::kInternalArrayConstructor)->entry; | 
|   187  |   204  | 
|   188   if (constant_stack_parameter_count == 0) { |   205   if (constant_stack_parameter_count == 0) { | 
|   189     Register registers[] = { x1 }; |   206     Register registers[] = { cp, x1 }; | 
|   190     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   207     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   191                            deopt_handler, |   208                            deopt_handler, | 
|   192                            NULL, |   209                            NULL, | 
|   193                            constant_stack_parameter_count, |   210                            constant_stack_parameter_count, | 
|   194                            JS_FUNCTION_STUB_MODE); |   211                            JS_FUNCTION_STUB_MODE); | 
|   195   } else { |   212   } else { | 
|   196     // stack param count needs (constructor pointer, and single argument) |   213     // stack param count needs (constructor pointer, and single argument) | 
|   197     Register registers[] = { x1, x0 }; |   214     Register registers[] = { cp, x1, x0 }; | 
|   198     Representation representations[] = { |   215     Representation representations[] = { | 
|   199         Representation::Tagged(), |   216         Representation::Tagged(), | 
 |   217         Representation::Tagged(), | 
|   200         Representation::Integer32() }; |   218         Representation::Integer32() }; | 
|   201     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   219     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   202                            x0, |   220                            x0, | 
|   203                            deopt_handler, |   221                            deopt_handler, | 
|   204                            representations, |   222                            representations, | 
|   205                            constant_stack_parameter_count, |   223                            constant_stack_parameter_count, | 
|   206                            JS_FUNCTION_STUB_MODE, |   224                            JS_FUNCTION_STUB_MODE, | 
|   207                            PASS_ARGUMENTS); |   225                            PASS_ARGUMENTS); | 
|   208   } |   226   } | 
|   209 } |   227 } | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   222  |   240  | 
|   223  |   241  | 
|   224 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |   242 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( | 
|   225     CodeStubInterfaceDescriptor* descriptor) { |   243     CodeStubInterfaceDescriptor* descriptor) { | 
|   226   InitializeInternalArrayConstructorDescriptor(descriptor, -1); |   244   InitializeInternalArrayConstructorDescriptor(descriptor, -1); | 
|   227 } |   245 } | 
|   228  |   246  | 
|   229  |   247  | 
|   230 void ToBooleanStub::InitializeInterfaceDescriptor( |   248 void ToBooleanStub::InitializeInterfaceDescriptor( | 
|   231     CodeStubInterfaceDescriptor* descriptor) { |   249     CodeStubInterfaceDescriptor* descriptor) { | 
 |   250   // cp: context | 
|   232   // x0: value |   251   // x0: value | 
|   233   Register registers[] = { x0 }; |   252   Register registers[] = { cp, x0 }; | 
|   234   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   253   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   235                          FUNCTION_ADDR(ToBooleanIC_Miss)); |   254                          FUNCTION_ADDR(ToBooleanIC_Miss)); | 
|   236   descriptor->SetMissHandler( |   255   descriptor->SetMissHandler( | 
|   237       ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |   256       ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); | 
|   238 } |   257 } | 
|   239  |   258  | 
|   240  |   259  | 
|   241 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( |   260 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( | 
|   242     CodeStubInterfaceDescriptor* descriptor) { |   261     CodeStubInterfaceDescriptor* descriptor) { | 
 |   262   // cp: context | 
|   243   // x0: value |   263   // x0: value | 
|   244   // x3: target map |   264   // x3: target map | 
|   245   // x1: key |   265   // x1: key | 
|   246   // x2: receiver |   266   // x2: receiver | 
|   247   Register registers[] = { x0, x3, x1, x2 }; |   267   Register registers[] = { cp, x0, x3, x1, x2 }; | 
|   248   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   268   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   249                          FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); |   269                          FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); | 
|   250 } |   270 } | 
|   251  |   271  | 
|   252  |   272  | 
|   253 void BinaryOpICStub::InitializeInterfaceDescriptor( |   273 void BinaryOpICStub::InitializeInterfaceDescriptor( | 
|   254     CodeStubInterfaceDescriptor* descriptor) { |   274     CodeStubInterfaceDescriptor* descriptor) { | 
 |   275   // cp: context | 
|   255   // x1: left operand |   276   // x1: left operand | 
|   256   // x0: right operand |   277   // x0: right operand | 
|   257   Register registers[] = { x1, x0 }; |   278   Register registers[] = { cp, x1, x0 }; | 
|   258   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   279   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   259                          FUNCTION_ADDR(BinaryOpIC_Miss)); |   280                          FUNCTION_ADDR(BinaryOpIC_Miss)); | 
|   260   descriptor->SetMissHandler( |   281   descriptor->SetMissHandler( | 
|   261       ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |   282       ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); | 
|   262 } |   283 } | 
|   263  |   284  | 
|   264  |   285  | 
|   265 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( |   286 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( | 
|   266     CodeStubInterfaceDescriptor* descriptor) { |   287     CodeStubInterfaceDescriptor* descriptor) { | 
 |   288   // cp: context | 
|   267   // x2: allocation site |   289   // x2: allocation site | 
|   268   // x1: left operand |   290   // x1: left operand | 
|   269   // x0: right operand |   291   // x0: right operand | 
|   270   Register registers[] = { x2, x1, x0 }; |   292   Register registers[] = { cp, x2, x1, x0 }; | 
|   271   descriptor->Initialize(ARRAY_SIZE(registers), registers, |   293   descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   272                          FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |   294                          FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); | 
|   273 } |   295 } | 
|   274  |   296  | 
|   275  |   297  | 
|   276 void StringAddStub::InitializeInterfaceDescriptor( |   298 void StringAddStub::InitializeInterfaceDescriptor( | 
|   277     CodeStubInterfaceDescriptor* descriptor) { |   299     CodeStubInterfaceDescriptor* descriptor) { | 
 |   300   // cp: context | 
|   278   // x1: left operand |   301   // x1: left operand | 
|   279   // x0: right operand |   302   // x0: right operand | 
|   280   Register registers[] = { x1, x0 }; |   303   Register registers[] = { cp, x1, x0 }; | 
|   281   descriptor->Initialize( |   304   descriptor->Initialize( | 
|   282       ARRAY_SIZE(registers), registers, |   305       ARRAY_SIZE(registers), registers, | 
|   283       Runtime::FunctionForId(Runtime::kStringAdd)->entry); |   306       Runtime::FunctionForId(Runtime::kStringAdd)->entry); | 
|   284 } |   307 } | 
|   285  |   308  | 
|   286  |   309  | 
|   287 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { |   310 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { | 
|   288   static PlatformCallInterfaceDescriptor default_descriptor = |   311   static PlatformInterfaceDescriptor default_descriptor = | 
|   289       PlatformCallInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS); |   312       PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS); | 
|   290  |   313  | 
|   291   static PlatformCallInterfaceDescriptor noInlineDescriptor = |   314   static PlatformInterfaceDescriptor noInlineDescriptor = | 
|   292       PlatformCallInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS); |   315       PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS); | 
|   293  |   316  | 
|   294   { |   317   { | 
|   295     CallInterfaceDescriptor* descriptor = |   318     CallInterfaceDescriptor* descriptor = | 
|   296         isolate->call_descriptor(Isolate::ArgumentAdaptorCall); |   319         isolate->call_descriptor(Isolate::ArgumentAdaptorCall); | 
|   297     Register registers[] = { x1,  // JSFunction |   320     Register registers[] = { cp,  // context | 
|   298                              cp,  // context |   321                              x1,  // JSFunction | 
|   299                              x0,  // actual number of arguments |   322                              x0,  // actual number of arguments | 
|   300                              x2,  // expected number of arguments |   323                              x2,  // expected number of arguments | 
|   301     }; |   324     }; | 
|   302     Representation representations[] = { |   325     Representation representations[] = { | 
 |   326         Representation::Tagged(),     // context | 
|   303         Representation::Tagged(),     // JSFunction |   327         Representation::Tagged(),     // JSFunction | 
|   304         Representation::Tagged(),     // context |  | 
|   305         Representation::Integer32(),  // actual number of arguments |   328         Representation::Integer32(),  // actual number of arguments | 
|   306         Representation::Integer32(),  // expected number of arguments |   329         Representation::Integer32(),  // expected number of arguments | 
|   307     }; |   330     }; | 
|   308     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   331     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   309                            representations, &default_descriptor); |   332                            representations, &default_descriptor); | 
|   310   } |   333   } | 
|   311   { |   334   { | 
|   312     CallInterfaceDescriptor* descriptor = |   335     CallInterfaceDescriptor* descriptor = | 
|   313         isolate->call_descriptor(Isolate::KeyedCall); |   336         isolate->call_descriptor(Isolate::KeyedCall); | 
|   314     Register registers[] = { cp,  // context |   337     Register registers[] = { cp,  // context | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
|   343     Representation representations[] = { |   366     Representation representations[] = { | 
|   344         Representation::Tagged(),  // context |   367         Representation::Tagged(),  // context | 
|   345         Representation::Tagged(),  // receiver |   368         Representation::Tagged(),  // receiver | 
|   346     }; |   369     }; | 
|   347     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   370     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   348                            representations, &default_descriptor); |   371                            representations, &default_descriptor); | 
|   349   } |   372   } | 
|   350   { |   373   { | 
|   351     CallInterfaceDescriptor* descriptor = |   374     CallInterfaceDescriptor* descriptor = | 
|   352         isolate->call_descriptor(Isolate::ApiFunctionCall); |   375         isolate->call_descriptor(Isolate::ApiFunctionCall); | 
|   353     Register registers[] = { x0,  // callee |   376     Register registers[] = { cp,  // context | 
 |   377                              x0,  // callee | 
|   354                              x4,  // call_data |   378                              x4,  // call_data | 
|   355                              x2,  // holder |   379                              x2,  // holder | 
|   356                              x1,  // api_function_address |   380                              x1,  // api_function_address | 
|   357                              cp,  // context |  | 
|   358     }; |   381     }; | 
|   359     Representation representations[] = { |   382     Representation representations[] = { | 
 |   383         Representation::Tagged(),    // context | 
|   360         Representation::Tagged(),    // callee |   384         Representation::Tagged(),    // callee | 
|   361         Representation::Tagged(),    // call_data |   385         Representation::Tagged(),    // call_data | 
|   362         Representation::Tagged(),    // holder |   386         Representation::Tagged(),    // holder | 
|   363         Representation::External(),  // api_function_address |   387         Representation::External(),  // api_function_address | 
|   364         Representation::Tagged(),    // context |  | 
|   365     }; |   388     }; | 
|   366     descriptor->Initialize(ARRAY_SIZE(registers), registers, |   389     descriptor->Initialize(ARRAY_SIZE(registers), registers, | 
|   367                            representations, &default_descriptor); |   390                            representations, &default_descriptor); | 
|   368   } |   391   } | 
|   369 } |   392 } | 
|   370  |   393  | 
|   371  |   394  | 
|   372 #define __ ACCESS_MASM(masm) |   395 #define __ ACCESS_MASM(masm) | 
|   373  |   396  | 
|   374  |   397  | 
|   375 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { |   398 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { | 
|   376   // Update the static counter each time a new code stub is generated. |   399   // Update the static counter each time a new code stub is generated. | 
|   377   isolate()->counters()->code_stubs()->Increment(); |   400   isolate()->counters()->code_stubs()->Increment(); | 
|   378  |   401  | 
|   379   CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor(); |   402   CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor(); | 
|   380   int param_count = descriptor->register_param_count(); |   403   int param_count = descriptor->GetEnvironmentParameterCount(); | 
|   381   { |   404   { | 
|   382     // Call the runtime system in a fresh internal frame. |   405     // Call the runtime system in a fresh internal frame. | 
|   383     FrameScope scope(masm, StackFrame::INTERNAL); |   406     FrameScope scope(masm, StackFrame::INTERNAL); | 
|   384     ASSERT((descriptor->register_param_count() == 0) || |   407     ASSERT((param_count == 0) || | 
|   385            x0.Is(descriptor->GetParameterRegister(param_count - 1))); |   408            x0.Is(descriptor->GetEnvironmentParameterRegister(param_count - 1))); | 
|   386  |   409  | 
|   387     // Push arguments |   410     // Push arguments | 
|   388     MacroAssembler::PushPopQueue queue(masm); |   411     MacroAssembler::PushPopQueue queue(masm); | 
|   389     for (int i = 0; i < param_count; ++i) { |   412     for (int i = 0; i < param_count; ++i) { | 
|   390       queue.Queue(descriptor->GetParameterRegister(i)); |   413       queue.Queue(descriptor->GetEnvironmentParameterRegister(i)); | 
|   391     } |   414     } | 
|   392     queue.PushQueued(); |   415     queue.PushQueued(); | 
|   393  |   416  | 
|   394     ExternalReference miss = descriptor->miss_handler(); |   417     ExternalReference miss = descriptor->miss_handler(); | 
|   395     __ CallExternalReference(miss, descriptor->register_param_count()); |   418     __ CallExternalReference(miss, param_count); | 
|   396   } |   419   } | 
|   397  |   420  | 
|   398   __ Ret(); |   421   __ Ret(); | 
|   399 } |   422 } | 
|   400  |   423  | 
|   401  |   424  | 
|   402 void DoubleToIStub::Generate(MacroAssembler* masm) { |   425 void DoubleToIStub::Generate(MacroAssembler* masm) { | 
|   403   Label done; |   426   Label done; | 
|   404   Register input = source(); |   427   Register input = source(); | 
|   405   Register result = destination(); |   428   Register result = destination(); | 
| (...skipping 4997 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5403                               MemOperand(fp, 6 * kPointerSize), |  5426                               MemOperand(fp, 6 * kPointerSize), | 
|  5404                               NULL); |  5427                               NULL); | 
|  5405 } |  5428 } | 
|  5406  |  5429  | 
|  5407  |  5430  | 
|  5408 #undef __ |  5431 #undef __ | 
|  5409  |  5432  | 
|  5410 } }  // namespace v8::internal |  5433 } }  // namespace v8::internal | 
|  5411  |  5434  | 
|  5412 #endif  // V8_TARGET_ARCH_ARM64 |  5435 #endif  // V8_TARGET_ARCH_ARM64 | 
| OLD | NEW |