Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: src/objects.h

Issue 1250733005: SIMD.js Add the other SIMD Phase 1 types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Don't run downloaded SIMD value type tests. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/lithium-codegen-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // - InternalizedString 106 // - InternalizedString
107 // - SeqInternalizedString 107 // - SeqInternalizedString
108 // - SeqOneByteInternalizedString 108 // - SeqOneByteInternalizedString
109 // - SeqTwoByteInternalizedString 109 // - SeqTwoByteInternalizedString
110 // - ConsInternalizedString 110 // - ConsInternalizedString
111 // - ExternalInternalizedString 111 // - ExternalInternalizedString
112 // - ExternalOneByteInternalizedString 112 // - ExternalOneByteInternalizedString
113 // - ExternalTwoByteInternalizedString 113 // - ExternalTwoByteInternalizedString
114 // - Symbol 114 // - Symbol
115 // - HeapNumber 115 // - HeapNumber
116 // - Float32x4 116 // - Simd128Value
117 // - Float32x4
118 // - Int32x4
119 // - Bool32x4
120 // - Int16x8
121 // - Bool16x8
122 // - Int8x16
123 // - Bool8x16
117 // - Cell 124 // - Cell
118 // - PropertyCell 125 // - PropertyCell
119 // - Code 126 // - Code
120 // - Map 127 // - Map
121 // - Oddball 128 // - Oddball
122 // - Foreign 129 // - Foreign
123 // - SharedFunctionInfo 130 // - SharedFunctionInfo
124 // - Struct 131 // - Struct
125 // - Box 132 // - Box
126 // - AccessorInfo 133 // - AccessorInfo
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 370 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \
364 V(EXTERNAL_INTERNALIZED_STRING_TYPE) \ 371 V(EXTERNAL_INTERNALIZED_STRING_TYPE) \
365 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 372 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \
366 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 373 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \
367 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ 374 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \
368 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 375 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \
369 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 376 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \
370 \ 377 \
371 V(SYMBOL_TYPE) \ 378 V(SYMBOL_TYPE) \
372 V(FLOAT32X4_TYPE) \ 379 V(FLOAT32X4_TYPE) \
380 V(INT32X4_TYPE) \
381 V(BOOL32X4_TYPE) \
382 V(INT16X8_TYPE) \
383 V(BOOL16X8_TYPE) \
384 V(INT8X16_TYPE) \
385 V(BOOL8X16_TYPE) \
373 \ 386 \
374 V(MAP_TYPE) \ 387 V(MAP_TYPE) \
375 V(CODE_TYPE) \ 388 V(CODE_TYPE) \
376 V(ODDBALL_TYPE) \ 389 V(ODDBALL_TYPE) \
377 V(CELL_TYPE) \ 390 V(CELL_TYPE) \
378 V(PROPERTY_CELL_TYPE) \ 391 V(PROPERTY_CELL_TYPE) \
379 \ 392 \
380 V(HEAP_NUMBER_TYPE) \ 393 V(HEAP_NUMBER_TYPE) \
381 V(MUTABLE_HEAP_NUMBER_TYPE) \ 394 V(MUTABLE_HEAP_NUMBER_TYPE) \
382 V(FOREIGN_TYPE) \ 395 V(FOREIGN_TYPE) \
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 669
657 // Objects allocated in their own spaces (never in new space). 670 // Objects allocated in their own spaces (never in new space).
658 MAP_TYPE, 671 MAP_TYPE,
659 CODE_TYPE, 672 CODE_TYPE,
660 ODDBALL_TYPE, 673 ODDBALL_TYPE,
661 674
662 // "Data", objects that cannot contain non-map-word pointers to heap 675 // "Data", objects that cannot contain non-map-word pointers to heap
663 // objects. 676 // objects.
664 HEAP_NUMBER_TYPE, 677 HEAP_NUMBER_TYPE,
665 MUTABLE_HEAP_NUMBER_TYPE, 678 MUTABLE_HEAP_NUMBER_TYPE,
666 FLOAT32X4_TYPE, // FIRST_SIMD_TYPE, LAST_SIMD_TYPE 679 FLOAT32X4_TYPE, // FIRST_SIMD_VALUE_TYPE
680 INT32X4_TYPE,
681 BOOL32X4_TYPE,
682 INT16X8_TYPE,
683 BOOL16X8_TYPE,
684 INT8X16_TYPE,
685 BOOL8X16_TYPE, // LAST_SIMD_VALUE_TYPE
667 FOREIGN_TYPE, 686 FOREIGN_TYPE,
668 BYTE_ARRAY_TYPE, 687 BYTE_ARRAY_TYPE,
669 BYTECODE_ARRAY_TYPE, 688 BYTECODE_ARRAY_TYPE,
670 FREE_SPACE_TYPE, 689 FREE_SPACE_TYPE,
671 FIXED_INT8_ARRAY_TYPE, // FIRST_FIXED_TYPED_ARRAY_TYPE 690 FIXED_INT8_ARRAY_TYPE, // FIRST_FIXED_TYPED_ARRAY_TYPE
672 FIXED_UINT8_ARRAY_TYPE, 691 FIXED_UINT8_ARRAY_TYPE,
673 FIXED_INT16_ARRAY_TYPE, 692 FIXED_INT16_ARRAY_TYPE,
674 FIXED_UINT16_ARRAY_TYPE, 693 FIXED_UINT16_ARRAY_TYPE,
675 FIXED_INT32_ARRAY_TYPE, 694 FIXED_INT32_ARRAY_TYPE,
676 FIXED_UINT32_ARRAY_TYPE, 695 FIXED_UINT32_ARRAY_TYPE,
677 FIXED_FLOAT32_ARRAY_TYPE, 696 FIXED_FLOAT32_ARRAY_TYPE,
678 FIXED_FLOAT64_ARRAY_TYPE, 697 FIXED_FLOAT64_ARRAY_TYPE,
679 FIXED_UINT8_CLAMPED_ARRAY_TYPE, // LAST_FIXED_TYPED_ARRAY_TYPE 698 FIXED_UINT8_CLAMPED_ARRAY_TYPE, // LAST_FIXED_TYPED_ARRAY_TYPE
680 FIXED_DOUBLE_ARRAY_TYPE, 699 FIXED_DOUBLE_ARRAY_TYPE,
681 FILLER_TYPE, // LAST_DATA_TYPE 700 FILLER_TYPE, // LAST_DATA_TYPE
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 JS_FUNCTION_TYPE, // LAST_JS_OBJECT_TYPE, LAST_JS_RECEIVER_TYPE 759 JS_FUNCTION_TYPE, // LAST_JS_OBJECT_TYPE, LAST_JS_RECEIVER_TYPE
741 760
742 // Pseudo-types 761 // Pseudo-types
743 FIRST_TYPE = 0x0, 762 FIRST_TYPE = 0x0,
744 LAST_TYPE = JS_FUNCTION_TYPE, 763 LAST_TYPE = JS_FUNCTION_TYPE,
745 FIRST_NAME_TYPE = FIRST_TYPE, 764 FIRST_NAME_TYPE = FIRST_TYPE,
746 LAST_NAME_TYPE = SYMBOL_TYPE, 765 LAST_NAME_TYPE = SYMBOL_TYPE,
747 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE, 766 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE,
748 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE, 767 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE,
749 FIRST_NONSTRING_TYPE = SYMBOL_TYPE, 768 FIRST_NONSTRING_TYPE = SYMBOL_TYPE,
750 // Boundaries for testing for a SIMD type. 769 // Boundaries for testing for a SIMD types.
751 FIRST_SIMD_TYPE = FLOAT32X4_TYPE, 770 FIRST_SIMD_VALUE_TYPE = FLOAT32X4_TYPE,
752 LAST_SIMD_TYPE = FLOAT32X4_TYPE, 771 LAST_SIMD_VALUE_TYPE = BOOL8X16_TYPE,
753 // Boundaries for testing for a fixed typed array. 772 // Boundaries for testing for a fixed typed array.
754 FIRST_FIXED_TYPED_ARRAY_TYPE = FIXED_INT8_ARRAY_TYPE, 773 FIRST_FIXED_TYPED_ARRAY_TYPE = FIXED_INT8_ARRAY_TYPE,
755 LAST_FIXED_TYPED_ARRAY_TYPE = FIXED_UINT8_CLAMPED_ARRAY_TYPE, 774 LAST_FIXED_TYPED_ARRAY_TYPE = FIXED_UINT8_CLAMPED_ARRAY_TYPE,
756 // Boundary for promotion to old space. 775 // Boundary for promotion to old space.
757 LAST_DATA_TYPE = FILLER_TYPE, 776 LAST_DATA_TYPE = FILLER_TYPE,
758 // Boundary for objects represented as JSReceiver (i.e. JSObject or JSProxy). 777 // Boundary for objects represented as JSReceiver (i.e. JSObject or JSProxy).
759 // Note that there is no range for JSObject or JSProxy, since their subtypes 778 // Note that there is no range for JSObject or JSProxy, since their subtypes
760 // are not continuous in this enum! The enum ranges instead reflect the 779 // are not continuous in this enum! The enum ranges instead reflect the
761 // external class names, where proxies are treated as either ordinary objects, 780 // external class names, where proxies are treated as either ordinary objects,
762 // or functions. 781 // or functions.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 894
876 895
877 #define OBJECT_TYPE_LIST(V) \ 896 #define OBJECT_TYPE_LIST(V) \
878 V(Smi) \ 897 V(Smi) \
879 V(HeapObject) \ 898 V(HeapObject) \
880 V(Number) 899 V(Number)
881 900
882 #define HEAP_OBJECT_TYPE_LIST(V) \ 901 #define HEAP_OBJECT_TYPE_LIST(V) \
883 V(HeapNumber) \ 902 V(HeapNumber) \
884 V(MutableHeapNumber) \ 903 V(MutableHeapNumber) \
904 V(Simd128Value) \
885 V(Float32x4) \ 905 V(Float32x4) \
906 V(Int32x4) \
907 V(Bool32x4) \
908 V(Int16x8) \
909 V(Bool16x8) \
910 V(Int8x16) \
911 V(Bool8x16) \
886 V(Name) \ 912 V(Name) \
887 V(UniqueName) \ 913 V(UniqueName) \
888 V(String) \ 914 V(String) \
889 V(SeqString) \ 915 V(SeqString) \
890 V(ExternalString) \ 916 V(ExternalString) \
891 V(ConsString) \ 917 V(ConsString) \
892 V(SlicedString) \ 918 V(SlicedString) \
893 V(ExternalTwoByteString) \ 919 V(ExternalTwoByteString) \
894 V(ExternalOneByteString) \ 920 V(ExternalOneByteString) \
895 V(SeqTwoByteString) \ 921 V(SeqTwoByteString) \
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 static const int kInfinityOrNanExponent = 1597 static const int kInfinityOrNanExponent =
1572 (kExponentMask >> kExponentShift) - kExponentBias; 1598 (kExponentMask >> kExponentShift) - kExponentBias;
1573 static const int kMantissaBitsInTopWord = 20; 1599 static const int kMantissaBitsInTopWord = 20;
1574 static const int kNonMantissaBitsInTopWord = 12; 1600 static const int kNonMantissaBitsInTopWord = 12;
1575 1601
1576 private: 1602 private:
1577 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapNumber); 1603 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapNumber);
1578 }; 1604 };
1579 1605
1580 1606
1581 // The Float32x4 class describes heap allocated SIMD values holding 4 32-bit 1607 // The SimdValue128 class describes heap allocated 128 bit SIMD values.
1582 // IEEE floats. 1608 class Simd128Value : public HeapObject {
1583 class Float32x4 : public HeapObject {
1584 public: 1609 public:
1585 inline float get_lane(int lane) const; 1610 DECLARE_CAST(Simd128Value)
1586 inline void set_lane(int lane, float value);
1587 1611
1588 DECLARE_CAST(Float32x4) 1612 // Checks that another instance is bit-wise equal.
1589 1613 bool BitwiseEquals(const Simd128Value* other) const;
1590 // Dispatched behavior. 1614 // Computes a hash from the 128 bit value, viewed as 4 32-bit integers.
1591 void Float32x4Print(std::ostream& os); // NOLINT 1615 uint32_t Hash() const;
1592 DECLARE_VERIFIER(Float32x4)
1593 1616
1594 // Layout description. 1617 // Layout description.
1595 static const int kValueOffset = HeapObject::kHeaderSize; 1618 static const int kValueOffset = HeapObject::kHeaderSize;
1596 static const int kSize = kValueOffset + kSimd128Size; 1619 static const int kSize = kValueOffset + kSimd128Size;
1597 1620
1598 private: 1621 private:
1599 DISALLOW_IMPLICIT_CONSTRUCTORS(Float32x4); 1622 DISALLOW_IMPLICIT_CONSTRUCTORS(Simd128Value);
1600 }; 1623 };
1601 1624
1602 1625
1626 #define SIMD128_TYPES(V) \
1627 V(Float32x4, float32x4, 4, float) \
1628 V(Int32x4, int32x4, 4, int32_t) \
1629 V(Bool32x4, bool32x4, 4, bool) \
1630 V(Int16x8, int16x8, 8, int16_t) \
1631 V(Bool16x8, bool16x8, 8, bool) \
1632 V(Int8x16, int8x16, 16, int8_t) \
1633 V(Bool8x16, bool8x16, 16, bool)
1634
1635 #define SIMD128_VALUE_CLASS(name, type, lane_count, lane_type) \
1636 class name : public Simd128Value { \
1637 public: \
1638 inline lane_type get_lane(int lane) const; \
1639 inline void set_lane(int lane, lane_type value); \
1640 \
1641 DECLARE_CAST(name) \
1642 \
1643 DECLARE_PRINTER(name) \
1644 DECLARE_VERIFIER(name) \
1645 \
1646 private: \
1647 DISALLOW_IMPLICIT_CONSTRUCTORS(name); \
1648 };
1649
1650 SIMD128_TYPES(SIMD128_VALUE_CLASS)
1651
1652
1603 enum EnsureElementsMode { 1653 enum EnsureElementsMode {
1604 DONT_ALLOW_DOUBLE_ELEMENTS, 1654 DONT_ALLOW_DOUBLE_ELEMENTS,
1605 ALLOW_COPIED_DOUBLE_ELEMENTS, 1655 ALLOW_COPIED_DOUBLE_ELEMENTS,
1606 ALLOW_CONVERTED_DOUBLE_ELEMENTS 1656 ALLOW_CONVERTED_DOUBLE_ELEMENTS
1607 }; 1657 };
1608 1658
1609 1659
1610 // Indicator for one component of an AccessorPair. 1660 // Indicator for one component of an AccessorPair.
1611 enum AccessorComponent { 1661 enum AccessorComponent {
1612 ACCESSOR_GETTER, 1662 ACCESSOR_GETTER,
(...skipping 8929 matching lines...) Expand 10 before | Expand all | Expand 10 after
10542 } else { 10592 } else {
10543 value &= ~(1 << bit_position); 10593 value &= ~(1 << bit_position);
10544 } 10594 }
10545 return value; 10595 return value;
10546 } 10596 }
10547 }; 10597 };
10548 10598
10549 } } // namespace v8::internal 10599 } } // namespace v8::internal
10550 10600
10551 #endif // V8_OBJECTS_H_ 10601 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698