OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ | 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ |
6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ | 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
10 | 10 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 V(Named) \ | 52 V(Named) \ |
53 V(CallHandler) \ | 53 V(CallHandler) \ |
54 V(ArgumentAdaptor) \ | 54 V(ArgumentAdaptor) \ |
55 V(ApiFunction) \ | 55 V(ApiFunction) \ |
56 V(ApiAccessor) \ | 56 V(ApiAccessor) \ |
57 V(ApiGetter) \ | 57 V(ApiGetter) \ |
58 V(ArgumentsAccessRead) \ | 58 V(ArgumentsAccessRead) \ |
59 V(StoreArrayLiteralElement) \ | 59 V(StoreArrayLiteralElement) \ |
60 V(MathPowTagged) \ | 60 V(MathPowTagged) \ |
61 V(MathPowInteger) \ | 61 V(MathPowInteger) \ |
62 V(MathRoundVariant) \ | |
63 V(ContextOnly) \ | 62 V(ContextOnly) \ |
64 V(GrowArrayElements) | 63 V(GrowArrayElements) \ |
| 64 V(MathRoundVariant) |
65 | 65 |
66 | 66 |
67 class CallInterfaceDescriptorData { | 67 class CallInterfaceDescriptorData { |
68 public: | 68 public: |
69 CallInterfaceDescriptorData() : register_param_count_(-1) {} | 69 CallInterfaceDescriptorData() |
| 70 : stack_paramater_count_(-1), |
| 71 register_param_count_(-1), |
| 72 function_type_(nullptr) {} |
70 | 73 |
71 // A copy of the passed in registers and param_representations is made | 74 // A copy of the passed in registers and param_representations is made |
72 // and owned by the CallInterfaceDescriptorData. | 75 // and owned by the CallInterfaceDescriptorData. |
73 | 76 |
| 77 void InitializePlatformIndependent(int stack_paramater_count, |
| 78 Type::FunctionType* function_type) { |
| 79 function_type_ = function_type; |
| 80 stack_paramater_count_ = stack_paramater_count; |
| 81 } |
| 82 |
74 // TODO(mvstanton): Instead of taking parallel arrays register and | 83 // TODO(mvstanton): Instead of taking parallel arrays register and |
75 // param_representations, how about a struct that puts the representation | 84 // param_representations, how about a struct that puts the representation |
76 // and register side by side (eg, RegRep(r1, Representation::Tagged()). | 85 // and register side by side (eg, RegRep(r1, Representation::Tagged()). |
77 // The same should go for the CodeStubDescriptor class. | 86 // The same should go for the CodeStubDescriptor class. |
78 void Initialize(int register_parameter_count, Register* registers, | 87 void InitializePlatformSpecific( |
79 Representation* param_representations, | 88 int register_parameter_count, Register* registers, |
80 PlatformInterfaceDescriptor* platform_descriptor = NULL); | 89 PlatformInterfaceDescriptor* platform_descriptor = NULL); |
81 | 90 |
82 bool IsInitialized() const { return register_param_count_ >= 0; } | 91 bool IsInitialized() const { return register_param_count_ >= 0; } |
83 | 92 |
84 int register_param_count() const { return register_param_count_; } | 93 int register_param_count() const { return register_param_count_; } |
85 Register register_param(int index) const { return register_params_[index]; } | 94 Register register_param(int index) const { return register_params_[index]; } |
86 Register* register_params() const { return register_params_.get(); } | 95 Register* register_params() const { return register_params_.get(); } |
87 Representation register_param_representation(int index) const { | 96 Type* register_param_type(int index) const { |
88 return register_param_representations_[index]; | 97 return function_type_->Parameter(index); |
89 } | |
90 Representation* register_param_representations() const { | |
91 return register_param_representations_.get(); | |
92 } | 98 } |
93 PlatformInterfaceDescriptor* platform_specific_descriptor() const { | 99 PlatformInterfaceDescriptor* platform_specific_descriptor() const { |
94 return platform_specific_descriptor_; | 100 return platform_specific_descriptor_; |
95 } | 101 } |
96 | 102 |
| 103 Type::FunctionType* function_type() const { return function_type_; } |
| 104 |
97 private: | 105 private: |
| 106 int stack_paramater_count_; |
98 int register_param_count_; | 107 int register_param_count_; |
99 | 108 |
100 // The Register params are allocated dynamically by the | 109 // The Register params are allocated dynamically by the |
101 // InterfaceDescriptor, and freed on destruction. This is because static | 110 // InterfaceDescriptor, and freed on destruction. This is because static |
102 // arrays of Registers cause creation of runtime static initializers | 111 // arrays of Registers cause creation of runtime static initializers |
103 // which we don't want. | 112 // which we don't want. |
104 SmartArrayPointer<Register> register_params_; | 113 SmartArrayPointer<Register> register_params_; |
105 // Specifies Representations for the stub's parameter. Points to an array of | 114 |
106 // Representations of the same length of the numbers of parameters to the | 115 // Specifies types for parameters and return |
107 // stub, or if NULL (the default value), Representation of each parameter | 116 Type::FunctionType* function_type_; |
108 // assumed to be Tagged(). | |
109 SmartArrayPointer<Representation> register_param_representations_; | |
110 | 117 |
111 PlatformInterfaceDescriptor* platform_specific_descriptor_; | 118 PlatformInterfaceDescriptor* platform_specific_descriptor_; |
112 | 119 |
113 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); | 120 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); |
114 }; | 121 }; |
115 | 122 |
116 | 123 |
117 class CallDescriptors { | 124 class CallDescriptors { |
118 public: | 125 public: |
119 enum Key { | 126 enum Key { |
120 #define DEF_ENUM(name) name, | 127 #define DEF_ENUM(name) name, |
121 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) | 128 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) |
122 #undef DEF_ENUM | 129 #undef DEF_ENUM |
123 NUMBER_OF_DESCRIPTORS | 130 NUMBER_OF_DESCRIPTORS |
124 }; | 131 }; |
125 }; | 132 }; |
126 | 133 |
127 | 134 |
128 class CallInterfaceDescriptor { | 135 class CallInterfaceDescriptor { |
129 public: | 136 public: |
130 CallInterfaceDescriptor() : data_(NULL) {} | 137 CallInterfaceDescriptor() : data_(NULL) {} |
| 138 virtual ~CallInterfaceDescriptor() {} |
131 | 139 |
132 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) | 140 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) |
133 : data_(isolate->call_descriptor_data(key)) {} | 141 : data_(isolate->call_descriptor_data(key)) {} |
134 | 142 |
135 int GetEnvironmentLength() const { return data()->register_param_count(); } | 143 int GetEnvironmentLength() const { return data()->register_param_count(); } |
136 | 144 |
137 int GetRegisterParameterCount() const { | 145 int GetRegisterParameterCount() const { |
138 return data()->register_param_count(); | 146 return data()->register_param_count(); |
139 } | 147 } |
140 | 148 |
141 Register GetParameterRegister(int index) const { | 149 Register GetParameterRegister(int index) const { |
142 return data()->register_param(index); | 150 return data()->register_param(index); |
143 } | 151 } |
144 | 152 |
145 Representation GetParameterRepresentation(int index) const { | 153 Type* GetParameterType(int index) const { |
146 DCHECK(index < data()->register_param_count()); | 154 DCHECK(index < data()->register_param_count()); |
147 if (data()->register_param_representations() == NULL) { | 155 return data()->register_param_type(index); |
148 return Representation::Tagged(); | |
149 } | |
150 | |
151 return data()->register_param_representation(index); | |
152 } | 156 } |
153 | 157 |
154 // "Environment" versions of parameter functions. The first register | 158 // "Environment" versions of parameter functions. The first register |
155 // parameter (context) is not included. | 159 // parameter (context) is not included. |
156 int GetEnvironmentParameterCount() const { | 160 int GetEnvironmentParameterCount() const { |
157 return GetEnvironmentLength() - 1; | 161 return GetEnvironmentLength() - 1; |
158 } | 162 } |
159 | 163 |
160 Register GetEnvironmentParameterRegister(int index) const { | 164 Register GetEnvironmentParameterRegister(int index) const { |
161 return GetParameterRegister(index + 1); | 165 return GetParameterRegister(index + 1); |
162 } | 166 } |
163 | 167 |
164 Representation GetEnvironmentParameterRepresentation(int index) const { | 168 Type* GetEnvironmentParameterType(int index) const { |
165 return GetParameterRepresentation(index + 1); | 169 return GetParameterType(index + 1); |
166 } | 170 } |
167 | 171 |
168 // Some platforms have extra information to associate with the descriptor. | 172 // Some platforms have extra information to associate with the descriptor. |
169 PlatformInterfaceDescriptor* platform_specific_descriptor() const { | 173 PlatformInterfaceDescriptor* platform_specific_descriptor() const { |
170 return data()->platform_specific_descriptor(); | 174 return data()->platform_specific_descriptor(); |
171 } | 175 } |
172 | 176 |
| 177 Type::FunctionType* GetFunctionType() const { |
| 178 return data()->function_type(); |
| 179 } |
| 180 |
173 static const Register ContextRegister(); | 181 static const Register ContextRegister(); |
174 | 182 |
175 const char* DebugName(Isolate* isolate) const; | 183 const char* DebugName(Isolate* isolate) const; |
176 | 184 |
| 185 static Type::FunctionType* BuildDefaultFunctionType(Isolate* isolate, |
| 186 int paramater_count); |
| 187 |
177 protected: | 188 protected: |
178 const CallInterfaceDescriptorData* data() const { return data_; } | 189 const CallInterfaceDescriptorData* data() const { return data_; } |
179 | 190 |
| 191 virtual Type::FunctionType* BuildCallInterfaceDescriptorFunctionType( |
| 192 Isolate* isolate, int register_param_count) { |
| 193 return BuildDefaultFunctionType(isolate, register_param_count); |
| 194 } |
| 195 |
| 196 virtual void InitializePlatformSpecific(CallInterfaceDescriptorData* data) { |
| 197 UNREACHABLE(); |
| 198 } |
| 199 |
| 200 void Initialize(Isolate* isolate, CallDescriptors::Key key) { |
| 201 if (!data()->IsInitialized()) { |
| 202 CallInterfaceDescriptorData* d = isolate->call_descriptor_data(key); |
| 203 InitializePlatformSpecific(d); |
| 204 Type::FunctionType* function_type = |
| 205 BuildCallInterfaceDescriptorFunctionType(isolate, |
| 206 d->register_param_count()); |
| 207 d->InitializePlatformIndependent(0, function_type); |
| 208 } |
| 209 } |
| 210 |
180 private: | 211 private: |
181 const CallInterfaceDescriptorData* data_; | 212 const CallInterfaceDescriptorData* data_; |
182 }; | 213 }; |
183 | 214 |
184 | 215 |
185 #define DECLARE_DESCRIPTOR(name, base) \ | 216 #define DECLARE_DESCRIPTOR(name, base) \ |
186 explicit name(Isolate* isolate) : base(isolate, key()) { \ | 217 explicit name(Isolate* isolate) : base(isolate, key()) { \ |
187 if (!data()->IsInitialized()) \ | 218 Initialize(isolate, key()); \ |
188 Initialize(isolate->call_descriptor_data(key())); \ | 219 } \ |
189 } \ | 220 \ |
190 \ | 221 protected: \ |
191 protected: \ | 222 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; \ |
192 void Initialize(CallInterfaceDescriptorData* data); \ | 223 name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \ |
193 name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \ | 224 \ |
194 \ | 225 public: \ |
195 public: \ | |
196 static inline CallDescriptors::Key key(); | 226 static inline CallDescriptors::Key key(); |
197 | 227 |
198 | 228 |
| 229 #define DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(name, base) \ |
| 230 DECLARE_DESCRIPTOR(name, base) \ |
| 231 protected: \ |
| 232 virtual Type::FunctionType* BuildCallInterfaceDescriptorFunctionType( \ |
| 233 Isolate* isolate, int register_param_count) override; \ |
| 234 \ |
| 235 public: |
199 // LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. | 236 // LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. |
200 class LoadDescriptor : public CallInterfaceDescriptor { | 237 class LoadDescriptor : public CallInterfaceDescriptor { |
201 public: | 238 public: |
202 DECLARE_DESCRIPTOR(LoadDescriptor, CallInterfaceDescriptor) | 239 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadDescriptor, |
| 240 CallInterfaceDescriptor) |
203 | 241 |
204 enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex }; | 242 enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex }; |
205 static const Register ReceiverRegister(); | 243 static const Register ReceiverRegister(); |
206 static const Register NameRegister(); | 244 static const Register NameRegister(); |
207 static const Register SlotRegister(); | 245 static const Register SlotRegister(); |
208 }; | 246 }; |
209 | 247 |
210 | 248 |
211 class StoreDescriptor : public CallInterfaceDescriptor { | 249 class StoreDescriptor : public CallInterfaceDescriptor { |
212 public: | 250 public: |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 DECLARE_DESCRIPTOR(InstanceofDescriptor, CallInterfaceDescriptor) | 291 DECLARE_DESCRIPTOR(InstanceofDescriptor, CallInterfaceDescriptor) |
254 | 292 |
255 enum ParameterIndices { kLeftIndex, kRightIndex, kParameterCount }; | 293 enum ParameterIndices { kLeftIndex, kRightIndex, kParameterCount }; |
256 static const Register left(); | 294 static const Register left(); |
257 static const Register right(); | 295 static const Register right(); |
258 }; | 296 }; |
259 | 297 |
260 | 298 |
261 class VectorStoreICTrampolineDescriptor : public StoreDescriptor { | 299 class VectorStoreICTrampolineDescriptor : public StoreDescriptor { |
262 public: | 300 public: |
263 DECLARE_DESCRIPTOR(VectorStoreICTrampolineDescriptor, StoreDescriptor) | 301 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE( |
| 302 VectorStoreICTrampolineDescriptor, StoreDescriptor) |
264 | 303 |
265 enum ParameterIndices { kReceiverIndex, kNameIndex, kValueIndex, kSlotIndex }; | 304 enum ParameterIndices { kReceiverIndex, kNameIndex, kValueIndex, kSlotIndex }; |
266 | 305 |
267 static const Register SlotRegister(); | 306 static const Register SlotRegister(); |
268 }; | 307 }; |
269 | 308 |
270 | 309 |
271 class VectorStoreICDescriptor : public VectorStoreICTrampolineDescriptor { | 310 class VectorStoreICDescriptor : public VectorStoreICTrampolineDescriptor { |
272 public: | 311 public: |
273 DECLARE_DESCRIPTOR(VectorStoreICDescriptor, VectorStoreICTrampolineDescriptor) | 312 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE( |
| 313 VectorStoreICDescriptor, VectorStoreICTrampolineDescriptor) |
274 | 314 |
275 enum ParameterIndices { | 315 enum ParameterIndices { |
276 kReceiverIndex, | 316 kReceiverIndex, |
277 kNameIndex, | 317 kNameIndex, |
278 kValueIndex, | 318 kValueIndex, |
279 kSlotIndex, | 319 kSlotIndex, |
280 kVectorIndex | 320 kVectorIndex |
281 }; | 321 }; |
282 | 322 |
283 static const Register VectorRegister(); | 323 static const Register VectorRegister(); |
284 }; | 324 }; |
285 | 325 |
286 | 326 |
287 class LoadWithVectorDescriptor : public LoadDescriptor { | 327 class LoadWithVectorDescriptor : public LoadDescriptor { |
288 public: | 328 public: |
289 DECLARE_DESCRIPTOR(LoadWithVectorDescriptor, LoadDescriptor) | 329 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadWithVectorDescriptor, |
| 330 LoadDescriptor) |
290 | 331 |
291 enum ParameterIndices { | 332 enum ParameterIndices { |
292 kReceiverIndex, | 333 kReceiverIndex, |
293 kNameIndex, | 334 kNameIndex, |
294 kSlotIndex, | 335 kSlotIndex, |
295 kVectorIndex | 336 kVectorIndex |
296 }; | 337 }; |
297 | 338 |
298 static const Register VectorRegister(); | 339 static const Register VectorRegister(); |
299 }; | 340 }; |
(...skipping 24 matching lines...) Expand all Loading... |
324 | 365 |
325 | 366 |
326 class TypeofDescriptor : public CallInterfaceDescriptor { | 367 class TypeofDescriptor : public CallInterfaceDescriptor { |
327 public: | 368 public: |
328 DECLARE_DESCRIPTOR(TypeofDescriptor, CallInterfaceDescriptor) | 369 DECLARE_DESCRIPTOR(TypeofDescriptor, CallInterfaceDescriptor) |
329 }; | 370 }; |
330 | 371 |
331 | 372 |
332 class FastCloneShallowArrayDescriptor : public CallInterfaceDescriptor { | 373 class FastCloneShallowArrayDescriptor : public CallInterfaceDescriptor { |
333 public: | 374 public: |
334 DECLARE_DESCRIPTOR(FastCloneShallowArrayDescriptor, CallInterfaceDescriptor) | 375 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FastCloneShallowArrayDescriptor, |
| 376 CallInterfaceDescriptor) |
335 }; | 377 }; |
336 | 378 |
337 | 379 |
338 class FastCloneShallowObjectDescriptor : public CallInterfaceDescriptor { | 380 class FastCloneShallowObjectDescriptor : public CallInterfaceDescriptor { |
339 public: | 381 public: |
340 DECLARE_DESCRIPTOR(FastCloneShallowObjectDescriptor, CallInterfaceDescriptor) | 382 DECLARE_DESCRIPTOR(FastCloneShallowObjectDescriptor, CallInterfaceDescriptor) |
341 }; | 383 }; |
342 | 384 |
343 | 385 |
344 class CreateAllocationSiteDescriptor : public CallInterfaceDescriptor { | 386 class CreateAllocationSiteDescriptor : public CallInterfaceDescriptor { |
345 public: | 387 public: |
346 DECLARE_DESCRIPTOR(CreateAllocationSiteDescriptor, CallInterfaceDescriptor) | 388 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(CreateAllocationSiteDescriptor, |
| 389 CallInterfaceDescriptor) |
347 }; | 390 }; |
348 | 391 |
349 | 392 |
350 class CreateWeakCellDescriptor : public CallInterfaceDescriptor { | 393 class CreateWeakCellDescriptor : public CallInterfaceDescriptor { |
351 public: | 394 public: |
352 enum ParameterIndices { | 395 enum ParameterIndices { |
353 kVectorIndex, | 396 kVectorIndex, |
354 kSlotIndex, | 397 kSlotIndex, |
355 kValueIndex, | 398 kValueIndex, |
356 kParameterCount | 399 kParameterCount |
357 }; | 400 }; |
358 | 401 |
359 DECLARE_DESCRIPTOR(CreateWeakCellDescriptor, CallInterfaceDescriptor) | 402 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(CreateWeakCellDescriptor, |
| 403 CallInterfaceDescriptor) |
360 }; | 404 }; |
361 | 405 |
362 | 406 |
363 class CallFunctionDescriptor : public CallInterfaceDescriptor { | 407 class CallFunctionDescriptor : public CallInterfaceDescriptor { |
364 public: | 408 public: |
365 DECLARE_DESCRIPTOR(CallFunctionDescriptor, CallInterfaceDescriptor) | 409 DECLARE_DESCRIPTOR(CallFunctionDescriptor, CallInterfaceDescriptor) |
366 }; | 410 }; |
367 | 411 |
368 | 412 |
369 class CallFunctionWithFeedbackDescriptor : public CallInterfaceDescriptor { | 413 class CallFunctionWithFeedbackDescriptor : public CallInterfaceDescriptor { |
370 public: | 414 public: |
371 DECLARE_DESCRIPTOR(CallFunctionWithFeedbackDescriptor, | 415 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE( |
372 CallInterfaceDescriptor) | 416 CallFunctionWithFeedbackDescriptor, CallInterfaceDescriptor) |
373 }; | 417 }; |
374 | 418 |
375 | 419 |
376 class CallFunctionWithFeedbackAndVectorDescriptor | 420 class CallFunctionWithFeedbackAndVectorDescriptor |
377 : public CallInterfaceDescriptor { | 421 : public CallInterfaceDescriptor { |
378 public: | 422 public: |
379 DECLARE_DESCRIPTOR(CallFunctionWithFeedbackAndVectorDescriptor, | 423 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE( |
380 CallInterfaceDescriptor) | 424 CallFunctionWithFeedbackAndVectorDescriptor, CallInterfaceDescriptor) |
381 }; | 425 }; |
382 | 426 |
383 | 427 |
384 class CallConstructDescriptor : public CallInterfaceDescriptor { | 428 class CallConstructDescriptor : public CallInterfaceDescriptor { |
385 public: | 429 public: |
386 DECLARE_DESCRIPTOR(CallConstructDescriptor, CallInterfaceDescriptor) | 430 DECLARE_DESCRIPTOR(CallConstructDescriptor, CallInterfaceDescriptor) |
387 }; | 431 }; |
388 | 432 |
389 | 433 |
390 class RegExpConstructResultDescriptor : public CallInterfaceDescriptor { | 434 class RegExpConstructResultDescriptor : public CallInterfaceDescriptor { |
(...skipping 17 matching lines...) Expand all Loading... |
408 class ArrayConstructorConstantArgCountDescriptor | 452 class ArrayConstructorConstantArgCountDescriptor |
409 : public CallInterfaceDescriptor { | 453 : public CallInterfaceDescriptor { |
410 public: | 454 public: |
411 DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor, | 455 DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor, |
412 CallInterfaceDescriptor) | 456 CallInterfaceDescriptor) |
413 }; | 457 }; |
414 | 458 |
415 | 459 |
416 class ArrayConstructorDescriptor : public CallInterfaceDescriptor { | 460 class ArrayConstructorDescriptor : public CallInterfaceDescriptor { |
417 public: | 461 public: |
418 DECLARE_DESCRIPTOR(ArrayConstructorDescriptor, CallInterfaceDescriptor) | 462 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArrayConstructorDescriptor, |
| 463 CallInterfaceDescriptor) |
419 }; | 464 }; |
420 | 465 |
421 | 466 |
422 class InternalArrayConstructorConstantArgCountDescriptor | 467 class InternalArrayConstructorConstantArgCountDescriptor |
423 : public CallInterfaceDescriptor { | 468 : public CallInterfaceDescriptor { |
424 public: | 469 public: |
425 DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor, | 470 DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor, |
426 CallInterfaceDescriptor) | 471 CallInterfaceDescriptor) |
427 }; | 472 }; |
428 | 473 |
429 | 474 |
430 class InternalArrayConstructorDescriptor : public CallInterfaceDescriptor { | 475 class InternalArrayConstructorDescriptor : public CallInterfaceDescriptor { |
431 public: | 476 public: |
432 DECLARE_DESCRIPTOR(InternalArrayConstructorDescriptor, | 477 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE( |
433 CallInterfaceDescriptor) | 478 InternalArrayConstructorDescriptor, CallInterfaceDescriptor) |
434 }; | 479 }; |
435 | 480 |
436 | 481 |
437 class CompareDescriptor : public CallInterfaceDescriptor { | 482 class CompareDescriptor : public CallInterfaceDescriptor { |
438 public: | 483 public: |
439 DECLARE_DESCRIPTOR(CompareDescriptor, CallInterfaceDescriptor) | 484 DECLARE_DESCRIPTOR(CompareDescriptor, CallInterfaceDescriptor) |
440 }; | 485 }; |
441 | 486 |
442 | 487 |
443 class CompareNilDescriptor : public CallInterfaceDescriptor { | 488 class CompareNilDescriptor : public CallInterfaceDescriptor { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 | 529 |
485 | 530 |
486 class CallHandlerDescriptor : public CallInterfaceDescriptor { | 531 class CallHandlerDescriptor : public CallInterfaceDescriptor { |
487 public: | 532 public: |
488 DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) | 533 DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) |
489 }; | 534 }; |
490 | 535 |
491 | 536 |
492 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { | 537 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { |
493 public: | 538 public: |
494 DECLARE_DESCRIPTOR(ArgumentAdaptorDescriptor, CallInterfaceDescriptor) | 539 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, |
| 540 CallInterfaceDescriptor) |
495 }; | 541 }; |
496 | 542 |
497 | 543 |
498 class ApiFunctionDescriptor : public CallInterfaceDescriptor { | 544 class ApiFunctionDescriptor : public CallInterfaceDescriptor { |
499 public: | 545 public: |
500 DECLARE_DESCRIPTOR(ApiFunctionDescriptor, CallInterfaceDescriptor) | 546 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ApiFunctionDescriptor, |
| 547 CallInterfaceDescriptor) |
501 }; | 548 }; |
502 | 549 |
503 | 550 |
504 class ApiAccessorDescriptor : public CallInterfaceDescriptor { | 551 class ApiAccessorDescriptor : public CallInterfaceDescriptor { |
505 public: | 552 public: |
506 DECLARE_DESCRIPTOR(ApiAccessorDescriptor, CallInterfaceDescriptor) | 553 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ApiAccessorDescriptor, |
| 554 CallInterfaceDescriptor) |
507 }; | 555 }; |
508 | 556 |
509 | 557 |
510 class ApiGetterDescriptor : public CallInterfaceDescriptor { | 558 class ApiGetterDescriptor : public CallInterfaceDescriptor { |
511 public: | 559 public: |
512 DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) | 560 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ApiGetterDescriptor, |
| 561 CallInterfaceDescriptor) |
513 | 562 |
514 static const Register function_address(); | 563 static const Register function_address(); |
515 }; | 564 }; |
516 | 565 |
517 | 566 |
518 class ArgumentsAccessReadDescriptor : public CallInterfaceDescriptor { | 567 class ArgumentsAccessReadDescriptor : public CallInterfaceDescriptor { |
519 public: | 568 public: |
520 DECLARE_DESCRIPTOR(ArgumentsAccessReadDescriptor, CallInterfaceDescriptor) | 569 DECLARE_DESCRIPTOR(ArgumentsAccessReadDescriptor, CallInterfaceDescriptor) |
521 | 570 |
522 static const Register index(); | 571 static const Register index(); |
(...skipping 19 matching lines...) Expand all Loading... |
542 class MathPowIntegerDescriptor : public CallInterfaceDescriptor { | 591 class MathPowIntegerDescriptor : public CallInterfaceDescriptor { |
543 public: | 592 public: |
544 DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor) | 593 DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor) |
545 | 594 |
546 static const Register exponent(); | 595 static const Register exponent(); |
547 }; | 596 }; |
548 | 597 |
549 | 598 |
550 class MathRoundVariantDescriptor : public CallInterfaceDescriptor { | 599 class MathRoundVariantDescriptor : public CallInterfaceDescriptor { |
551 public: | 600 public: |
552 DECLARE_DESCRIPTOR(MathRoundVariantDescriptor, CallInterfaceDescriptor) | 601 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(MathRoundVariantDescriptor, |
| 602 CallInterfaceDescriptor) |
553 }; | 603 }; |
554 | 604 |
555 | 605 |
556 class ContextOnlyDescriptor : public CallInterfaceDescriptor { | 606 class ContextOnlyDescriptor : public CallInterfaceDescriptor { |
557 public: | 607 public: |
558 DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor) | 608 DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor) |
559 }; | 609 }; |
560 | 610 |
561 | 611 |
562 class GrowArrayElementsDescriptor : public CallInterfaceDescriptor { | 612 class GrowArrayElementsDescriptor : public CallInterfaceDescriptor { |
(...skipping 18 matching lines...) Expand all Loading... |
581 } // namespace v8::internal | 631 } // namespace v8::internal |
582 | 632 |
583 | 633 |
584 #if V8_TARGET_ARCH_ARM64 | 634 #if V8_TARGET_ARCH_ARM64 |
585 #include "src/arm64/interface-descriptors-arm64.h" | 635 #include "src/arm64/interface-descriptors-arm64.h" |
586 #elif V8_TARGET_ARCH_ARM | 636 #elif V8_TARGET_ARCH_ARM |
587 #include "src/arm/interface-descriptors-arm.h" | 637 #include "src/arm/interface-descriptors-arm.h" |
588 #endif | 638 #endif |
589 | 639 |
590 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 640 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
OLD | NEW |