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