5#ifndef V8_OBJECTS_ELEMENTS_KIND_H_
6#define V8_OBJECTS_ELEMENTS_KIND_H_
18#define TYPED_ARRAYS_BASE(V) \
19 V(Uint8, uint8, UINT8, uint8_t) \
20 V(Int8, int8, INT8, int8_t) \
21 V(Uint16, uint16, UINT16, uint16_t) \
22 V(Int16, int16, INT16, int16_t) \
23 V(Uint32, uint32, UINT32, uint32_t) \
24 V(Int32, int32, INT32, int32_t) \
25 V(BigUint64, biguint64, BIGUINT64, uint64_t) \
26 V(BigInt64, bigint64, BIGINT64, int64_t) \
27 V(Uint8Clamped, uint8_clamped, UINT8_CLAMPED, uint8_t) \
28 V(Float32, float32, FLOAT32, float) \
29 V(Float64, float64, FLOAT64, double)
31#define TYPED_ARRAYS_FLOAT16(V) V(Float16, float16, FLOAT16, uint16_t)
33#define TYPED_ARRAYS(V) \
34 TYPED_ARRAYS_BASE(V) \
35 TYPED_ARRAYS_FLOAT16(V)
37#define RAB_GSAB_TYPED_ARRAYS_BASE(V) \
38 V(RabGsabUint8, rab_gsab_uint8, RAB_GSAB_UINT8, uint8_t) \
39 V(RabGsabInt8, rab_gsab_int8, RAB_GSAB_INT8, int8_t) \
40 V(RabGsabUint16, rab_gsab_uint16, RAB_GSAB_UINT16, uint16_t) \
41 V(RabGsabInt16, rab_gsab_int16, RAB_GSAB_INT16, int16_t) \
42 V(RabGsabUint32, rab_gsab_uint32, RAB_GSAB_UINT32, uint32_t) \
43 V(RabGsabInt32, rab_gsab_int32, RAB_GSAB_INT32, int32_t) \
44 V(RabGsabBigUint64, rab_gsab_biguint64, RAB_GSAB_BIGUINT64, uint64_t) \
45 V(RabGsabBigInt64, rab_gsab_bigint64, RAB_GSAB_BIGINT64, int64_t) \
46 V(RabGsabUint8Clamped, rab_gsab_uint8_clamped, RAB_GSAB_UINT8_CLAMPED, \
48 V(RabGsabFloat32, rab_gsab_float32, RAB_GSAB_FLOAT32, float) \
49 V(RabGsabFloat64, rab_gsab_float64, RAB_GSAB_FLOAT64, double)
51#define RAB_GSAB_TYPED_ARRAYS_FLOAT16(V) \
52 V(RabGsabFloat16, rab_gsab_float16, RAB_GSAB_FLOAT16, uint16_t)
54#define RAB_GSAB_TYPED_ARRAYS(V) \
55 RAB_GSAB_TYPED_ARRAYS_BASE(V) \
56 RAB_GSAB_TYPED_ARRAYS_FLOAT16(V)
61#define RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE_BASE(V) \
62 V(Uint8, rab_gsab_uint8, RAB_GSAB_UINT8, uint8_t) \
63 V(Int8, rab_gsab_int8, RAB_GSAB_INT8, int8_t) \
64 V(Uint16, rab_gsab_uint16, RAB_GSAB_UINT16, uint16_t) \
65 V(Int16, rab_gsab_int16, RAB_GSAB_INT16, int16_t) \
66 V(Uint32, rab_gsab_uint32, RAB_GSAB_UINT32, uint32_t) \
67 V(Int32, rab_gsab_int32, RAB_GSAB_INT32, int32_t) \
68 V(BigUint64, rab_gsab_biguint64, RAB_GSAB_BIGUINT64, uint64_t) \
69 V(BigInt64, rab_gsab_bigint64, RAB_GSAB_BIGINT64, int64_t) \
70 V(Uint8Clamped, rab_gsab_uint8_clamped, RAB_GSAB_UINT8_CLAMPED, uint8_t) \
71 V(Float32, rab_gsab_float32, RAB_GSAB_FLOAT32, float) \
72 V(Float64, rab_gsab_float64, RAB_GSAB_FLOAT64, double)
74#define RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE_FLOAT16(V) \
75 V(Float16, rab_gsab_float16, RAB_GSAB_FLOAT16, uint16_t)
77#define RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE(V) \
78 RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE_BASE(V) \
79 RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE_FLOAT16(V)
83#define RAB_GSAB_TYPED_ARRAYS_WITH_NON_RAB_GSAB_ELEMENTS_KIND_BASE(V) \
84 V(RabGsabUint8, rab_gsab_uint8, RAB_GSAB_UINT8, uint8_t, UINT8) \
85 V(RabGsabInt8, rab_gsab_int8, RAB_GSAB_INT8, int8_t, INT8) \
86 V(RabGsabUint16, rab_gsab_uint16, RAB_GSAB_UINT16, uint16_t, UINT16) \
87 V(RabGsabInt16, rab_gsab_int16, RAB_GSAB_INT16, int16_t, INT16) \
88 V(RabGsabUint32, rab_gsab_uint32, RAB_GSAB_UINT32, uint32_t, UINT32) \
89 V(RabGsabInt32, rab_gsab_int32, RAB_GSAB_INT32, int32_t, INT32) \
90 V(RabGsabBigUint64, rab_gsab_biguint64, RAB_GSAB_BIGUINT64, uint64_t, \
92 V(RabGsabBigInt64, rab_gsab_bigint64, RAB_GSAB_BIGINT64, int64_t, BIGINT64) \
93 V(RabGsabUint8Clamped, rab_gsab_uint8_clamped, RAB_GSAB_UINT8_CLAMPED, \
94 uint8_t, UINT8_CLAMPED) \
95 V(RabGsabFloat32, rab_gsab_float32, RAB_GSAB_FLOAT32, float, FLOAT32) \
96 V(RabGsabFloat64, rab_gsab_float64, RAB_GSAB_FLOAT64, double, FLOAT64)
98#define RAB_GSAB_TYPED_ARRAYS_WITH_NON_RAB_GSAB_ELEMENTS_KIND_FLOAT16(V) \
99 V(RabGsabFloat16, rab_gsab_float16, RAB_GSAB_FLOAT16, uint16_t, FLOAT16)
101#define RAB_GSAB_TYPED_ARRAYS_WITH_NON_RAB_GSAB_ELEMENTS_KIND(V) \
102 RAB_GSAB_TYPED_ARRAYS_WITH_NON_RAB_GSAB_ELEMENTS_KIND_BASE(V) \
103 RAB_GSAB_TYPED_ARRAYS_WITH_NON_RAB_GSAB_ELEMENTS_KIND_FLOAT16(V)
150#define TYPED_ARRAY_ELEMENTS_KIND(Type, type, TYPE, ctype) TYPE##_ELEMENTS,
153#undef TYPED_ARRAY_ELEMENTS_KIND
178#ifdef V8_COMPRESS_POINTERS
206 switch (elements_kind) {
209 case UINT8_CLAMPED_ELEMENTS:
210 case RAB_GSAB_UINT8_ELEMENTS:
211 case RAB_GSAB_INT8_ELEMENTS:
212 case RAB_GSAB_UINT8_CLAMPED_ELEMENTS:
214 case UINT16_ELEMENTS:
216 case FLOAT16_ELEMENTS:
217 case RAB_GSAB_FLOAT16_ELEMENTS:
218 case RAB_GSAB_UINT16_ELEMENTS:
219 case RAB_GSAB_INT16_ELEMENTS:
221 case UINT32_ELEMENTS:
223 case FLOAT32_ELEMENTS:
224 case RAB_GSAB_UINT32_ELEMENTS:
225 case RAB_GSAB_INT32_ELEMENTS:
226 case RAB_GSAB_FLOAT32_ELEMENTS:
230 case FLOAT64_ELEMENTS:
231 case BIGINT64_ELEMENTS:
232 case BIGUINT64_ELEMENTS:
233 case RAB_GSAB_FLOAT64_ELEMENTS:
234 case RAB_GSAB_BIGINT64_ELEMENTS:
235 case RAB_GSAB_BIGUINT64_ELEMENTS:
311 return kind == BIGINT64_ELEMENTS ||
kind == BIGUINT64_ELEMENTS ||
312 kind == RAB_GSAB_BIGINT64_ELEMENTS ||
313 kind == RAB_GSAB_BIGUINT64_ELEMENTS;
317 return kind == FLOAT16_ELEMENTS ||
kind == RAB_GSAB_FLOAT16_ELEMENTS;
321 return kind == FLOAT16_ELEMENTS ||
kind == RAB_GSAB_FLOAT16_ELEMENTS ||
322 kind == FLOAT32_ELEMENTS ||
kind == FLOAT64_ELEMENTS ||
323 kind == RAB_GSAB_FLOAT32_ELEMENTS ||
kind == RAB_GSAB_FLOAT64_ELEMENTS;
327 return kind == INT8_ELEMENTS ||
kind == RAB_GSAB_INT8_ELEMENTS ||
328 kind == INT16_ELEMENTS ||
kind == RAB_GSAB_INT16_ELEMENTS ||
329 kind == INT32_ELEMENTS ||
kind == RAB_GSAB_INT32_ELEMENTS;
333 return kind == UINT8_CLAMPED_ELEMENTS ||
334 kind == RAB_GSAB_UINT8_CLAMPED_ELEMENTS ||
kind == UINT8_ELEMENTS ||
335 kind == RAB_GSAB_UINT8_ELEMENTS ||
kind == UINT16_ELEMENTS ||
336 kind == RAB_GSAB_UINT16_ELEMENTS ||
kind == UINT32_ELEMENTS ||
337 kind == RAB_GSAB_UINT32_ELEMENTS;
488 "ElementsKind union not computable via std::max.");
490 "ElementsKind union not computable via std::max.");
492 "ElementsKind union not computable via std::max.");
498 *a_out = std::max(a, b);
505 *a_out = std::max(a, b);
512 *a_out = std::max(a, b);
#define RAB_GSAB_TYPED_ARRAYS(V)
#define TYPED_ARRAY_ELEMENTS_KIND(Type, type, TYPE, ctype)
ZoneVector< RpoNumber > & result
constexpr bool IsInRange(T value, U lower_limit, U higher_limit)
constexpr int kFastElementsKindCount
bool IsSlowArgumentsElementsKind(ElementsKind kind)
ElementsKind GetFastElementsKindFromSequenceIndex(int sequence_number)
bool IsWasmArrayElementsKind(ElementsKind kind)
constexpr bool IsHoleyElementsKind(ElementsKind kind)
bool IsAnyHoleyNonextensibleElementsKind(ElementsKind kind)
bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind, ElementsKind to_kind)
bool IsTransitionElementsKind(ElementsKind kind)
bool IsSealedElementsKind(ElementsKind kind)
bool IsFastOrNonextensibleOrSealedElementsKind(ElementsKind kind)
bool IsTypedArrayElementsKind(ElementsKind kind)
bool IsRabGsabTypedArrayElementsKind(ElementsKind kind)
const uint8_t * TypedArrayAndRabGsabTypedArrayElementsKindShifts()
ElementsKind GetCorrespondingRabGsabElementsKind(ElementsKind typed_array_kind)
constexpr bool IsSmiElementsKind(ElementsKind kind)
ElementsKind GetPackedElementsKind(ElementsKind holey_kind)
constexpr int kFastElementsKindPackedToHoley
bool IsAnyNonextensibleElementsKind(ElementsKind kind)
constexpr bool IsObjectElementsKind(ElementsKind kind)
constexpr bool IsFloat16TypedArrayElementsKind(ElementsKind kind)
bool IsNonextensibleElementsKind(ElementsKind kind)
@ FIRST_ANY_NONEXTENSIBLE_ELEMENTS_KIND
@ LAST_FAST_ELEMENTS_KIND
@ HOLEY_NONEXTENSIBLE_ELEMENTS
@ FIRST_VALID_ATOMICS_TYPED_ARRAY_ELEMENTS_KIND
@ FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND
@ LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND
@ FIRST_FAST_ELEMENTS_KIND
@ SLOW_STRING_WRAPPER_ELEMENTS
@ PACKED_NONEXTENSIBLE_ELEMENTS
@ LAST_ANY_NONEXTENSIBLE_ELEMENTS_KIND
@ SYSTEM_POINTER_ELEMENTS
@ TERMINAL_FAST_ELEMENTS_KIND
@ SLOW_SLOPPY_ARGUMENTS_ELEMENTS
@ LAST_VALID_ATOMICS_TYPED_ARRAY_ELEMENTS_KIND
@ FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND
@ LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND
@ FAST_SLOPPY_ARGUMENTS_ELEMENTS
@ FAST_STRING_WRAPPER_ELEMENTS
bool IsSimpleMapChangeTransition(ElementsKind from_kind, ElementsKind to_kind)
const char * ElementsKindToString(ElementsKind kind)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
bool IsHoleyElementsKindForRead(ElementsKind kind)
constexpr int kFastElementsKindBits
ElementsKind GetCorrespondingNonRabGsabElementsKind(ElementsKind typed_array_kind)
bool IsSmiOrObjectElementsKind(ElementsKind kind)
int GetSequenceIndexFromFastElementsKind(ElementsKind elements_kind)
int GetDefaultHeaderSizeForElementsKind(ElementsKind elements_kind)
bool IsSignedIntTypedArrayElementsKind(ElementsKind kind)
bool IsFastArgumentsElementsKind(ElementsKind kind)
bool IsFastPackedElementsKind(ElementsKind kind)
constexpr int ElementsKindToShiftSize(ElementsKind elements_kind)
constexpr int kTaggedSizeLog2
ElementsKind GetHoleyElementsKind(ElementsKind packed_kind)
bool IsSloppyArgumentsElementsKind(ElementsKind kind)
bool IsFastNumberElementsKind(ElementsKind kind)
DONT_OVERRIDE DISABLE_ALLOCATION_SITES HOLEY_ELEMENTS
bool IsFrozenElementsKind(ElementsKind kind)
ElementsKind GetNextTransitionElementsKind(ElementsKind kind)
bool IsTerminalElementsKind(ElementsKind kind)
bool IsBigIntTypedArrayElementsKind(ElementsKind kind)
bool IsFastElementsKind(ElementsKind kind)
bool IsSharedArrayElementsKind(ElementsKind kind)
DONT_OVERRIDE DISABLE_ALLOCATION_SITES DISABLE_ALLOCATION_SITES HOLEY_DOUBLE_ELEMENTS
bool IsHoleyOrDictionaryElementsKind(ElementsKind kind)
bool IsDictionaryElementsKind(ElementsKind kind)
bool UnionElementsKindUptoSize(ElementsKind *a_out, ElementsKind b)
bool IsFloatTypedArrayElementsKind(ElementsKind kind)
bool ElementsKindEqual(ElementsKind a, ElementsKind b)
constexpr int kElementsKindBits
bool IsUnsignedIntTypedArrayElementsKind(ElementsKind kind)
const uint8_t * TypedArrayAndRabGsabTypedArrayElementsKindSizes()
bool IsTypedArrayOrRabGsabTypedArrayElementsKind(ElementsKind kind)
bool IsStringWrapperElementsKind(ElementsKind kind)
bool IsAnyNonextensibleElementsKindUnchecked(ElementsKind kind)
constexpr bool IsDoubleElementsKind(ElementsKind kind)
constexpr int kElementsKindCount
ElementsKind GetMoreGeneralElementsKind(ElementsKind from_kind, ElementsKind to_kind)
bool IsTransitionableFastElementsKind(ElementsKind from_kind)
ElementsKind GetInitialFastElementsKind()
constexpr int ElementsKindToByteSize(ElementsKind elements_kind)
ElementsKind FastSmiToObjectElementsKind(ElementsKind from_kind)
bool UnionElementsKindUptoPackedness(ElementsKind *a_out, ElementsKind b)
#define DCHECK_IMPLIES(v1, v2)
#define CONSTEXPR_UNREACHABLE()
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE