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 <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 class StoreDescriptor : public CallInterfaceDescriptor { | 317 class StoreDescriptor : public CallInterfaceDescriptor { |
318 public: | 318 public: |
319 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot) | 319 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot) |
320 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreDescriptor, | 320 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreDescriptor, |
321 CallInterfaceDescriptor) | 321 CallInterfaceDescriptor) |
322 | 322 |
323 static const Register ReceiverRegister(); | 323 static const Register ReceiverRegister(); |
324 static const Register NameRegister(); | 324 static const Register NameRegister(); |
325 static const Register ValueRegister(); | 325 static const Register ValueRegister(); |
326 static const Register SlotRegister(); | 326 static const Register SlotRegister(); |
| 327 |
| 328 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87 |
| 329 static const bool kPassLastArgsOnStack = true; |
| 330 #else |
| 331 static const bool kPassLastArgsOnStack = false; |
| 332 #endif |
| 333 |
| 334 // Pass value and slot through the stack. |
| 335 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0; |
327 }; | 336 }; |
328 | 337 |
329 class StoreTransitionDescriptor : public StoreDescriptor { | 338 class StoreTransitionDescriptor : public StoreDescriptor { |
330 public: | 339 public: |
331 DEFINE_PARAMETERS(kReceiver, kName, kMap, kValue, kSlot, kVector) | 340 DEFINE_PARAMETERS(kReceiver, kName, kMap, kValue, kSlot, kVector) |
332 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreTransitionDescriptor, | 341 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreTransitionDescriptor, |
333 StoreDescriptor) | 342 StoreDescriptor) |
334 | 343 |
335 static const Register MapRegister(); | 344 static const Register MapRegister(); |
336 static const Register SlotRegister(); | 345 static const Register SlotRegister(); |
337 static const Register VectorRegister(); | 346 static const Register VectorRegister(); |
338 | 347 |
339 static bool PassVectorAndSlotOnStack(); | 348 // Pass value, slot and vector through the stack. |
| 349 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; |
340 }; | 350 }; |
341 | 351 |
342 class StoreWithVectorDescriptor : public StoreDescriptor { | 352 class StoreWithVectorDescriptor : public StoreDescriptor { |
343 public: | 353 public: |
344 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot, kVector) | 354 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot, kVector) |
345 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreWithVectorDescriptor, | 355 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreWithVectorDescriptor, |
346 StoreDescriptor) | 356 StoreDescriptor) |
347 | 357 |
348 static const Register VectorRegister(); | 358 static const Register VectorRegister(); |
| 359 |
| 360 // Pass value, slot and vector through the stack. |
| 361 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; |
349 }; | 362 }; |
350 | 363 |
351 class LoadWithVectorDescriptor : public LoadDescriptor { | 364 class LoadWithVectorDescriptor : public LoadDescriptor { |
352 public: | 365 public: |
353 DEFINE_PARAMETERS(kReceiver, kName, kSlot, kVector) | 366 DEFINE_PARAMETERS(kReceiver, kName, kSlot, kVector) |
354 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadWithVectorDescriptor, | 367 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadWithVectorDescriptor, |
355 LoadDescriptor) | 368 LoadDescriptor) |
356 | 369 |
357 static const Register VectorRegister(); | 370 static const Register VectorRegister(); |
358 }; | 371 }; |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 } // namespace v8 | 809 } // namespace v8 |
797 | 810 |
798 | 811 |
799 #if V8_TARGET_ARCH_ARM64 | 812 #if V8_TARGET_ARCH_ARM64 |
800 #include "src/arm64/interface-descriptors-arm64.h" | 813 #include "src/arm64/interface-descriptors-arm64.h" |
801 #elif V8_TARGET_ARCH_ARM | 814 #elif V8_TARGET_ARCH_ARM |
802 #include "src/arm/interface-descriptors-arm.h" | 815 #include "src/arm/interface-descriptors-arm.h" |
803 #endif | 816 #endif |
804 | 817 |
805 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 818 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
OLD | NEW |