5#ifndef V8_WASM_VALUE_TYPE_H_ 
    6#define V8_WASM_VALUE_TYPE_H_ 
    8#if !V8_ENABLE_WEBASSEMBLY 
    9#error This header should only be included if WebAssembly is enabled. 
   31#define FOREACH_NUMERIC_VALUE_TYPE(V)    \ 
   32  V(I32, 2, I32, Int32, 'i', "i32")      \ 
   33  V(I64, 3, I64, Int64, 'l', "i64")      \ 
   34  V(F32, 2, F32, Float32, 'f', "f32")    \ 
   35  V(F64, 3, F64, Float64, 'd', "f64")    \ 
   36  V(S128, 4, S128, Simd128, 's', "v128") \ 
   37  V(I8, 0, I8, Int8, 'b', "i8")          \ 
   38  V(I16, 1, I16, Int16, 'h', "i16")      \ 
   39  V(F16, 1, F16, Float16, 'p', "f16") 
 
   41#define FOREACH_VALUE_TYPE(V)                                      \ 
   42  V(Void, -1, Void, None, 'v', "<void>")                           \ 
   43  FOREACH_NUMERIC_VALUE_TYPE(V)                                    \ 
   44  V(Ref, kTaggedSizeLog2, Ref, AnyTagged, 'r', "ref")              \ 
   45  V(RefNull, kTaggedSizeLog2, RefNull, AnyTagged, 'n', "ref null") \ 
   46  V(Top, -1, Void, None, '\\', "<top>")                            \ 
   47  V(Bottom, -1, Void, None, '*', "<bot>") 
 
   81    return index == other.index;
 
 
 
   94  return oss << index.index;
 
 
  104#define DEF_ENUM(kind, ...) k##kind, 
 
  147namespace value_type_impl {
 
  156#define FUNC value_type_impl::RefTypeKindField::encode(RefTypeKind::kFunction) 
  157#define STRUCT value_type_impl::RefTypeKindField::encode(RefTypeKind::kStruct) 
  158#define ARRAY value_type_impl::RefTypeKindField::encode(RefTypeKind::kArray) 
  159#define CONT value_type_impl::RefTypeKindField::encode(RefTypeKind::kCont) 
  160#define REF value_type_impl::IsRefField::encode(true) 
  161#define SENTINEL value_type_impl::HasIndexOrSentinelField::encode(true) 
  162#define EXACT value_type_impl::IsExactField::encode(Exactness::kExact) 
  168#define FOREACH_NONE_TYPE(V)  \ 
  169  V(NoCont, NoCont, REF | CONT | EXACT, "nocont")                              \ 
  170  V(NoExn, NoExn, REF | EXACT, "noexn")                                        \ 
  171  V(NoExtern, NoExtern, REF | EXACT, "noextern")                               \ 
  172  V(NoFunc, NoFunc, REF | FUNC | EXACT, "nofunc")                              \ 
  173  V(None, None, REF | EXACT, "none") 
 
  175#define FOREACH_ABSTRACT_TYPE(V)  \ 
  176  FOREACH_NONE_TYPE(V)                                                         \ 
  178  V(Func, FuncRef, REF | FUNC, "func")                                         \ 
  179  V(Any, AnyRef, REF, "any")                                                   \ 
  180  V(Eq, EqRef, REF, "eq")                                                      \ 
  181  V(I31, I31Ref, REF, "i31")                                                   \ 
  182  V(Struct, StructRef, REF | STRUCT, "struct")                                 \ 
  183  V(Array, ArrayRef, REF | ARRAY, "array")                                     \ 
  184  V(Extern, ExternRef, REF, "extern")                                          \ 
  185  V(Exn, ExnRef, REF, "exn")                                                   \ 
  187  V(Cont, ContRef, REF | CONT, "cont")                                         \ 
  189  V(String, StringRef, REF, "string")                                          \ 
  190  V(StringViewWtf8, StringViewWtf8, REF, "stringview_wtf8")                    \ 
  191  V(StringViewWtf16, StringViewWtf16, REF, "stringview_wtf16")                 \ 
  192  V(StringViewIter, StringViewIter, REF, "stringview_iter") 
 
  195#define FOREACH_INTERNAL_TYPE(V)  \ 
  196  V(Void, Void, SENTINEL, "<void>")                                            \ 
  197  V(Top, Void, SENTINEL, "<top>")                                              \ 
  198  V(Bottom, Void, SENTINEL | EXACT, "<bot>")                                   \ 
  199  V(ExternString, Void, REF, "<extern_string>") 
 
  201#define FOREACH_GENERIC_TYPE(V)  \ 
  202  FOREACH_INTERNAL_TYPE(V)                                                     \ 
  203  FOREACH_ABSTRACT_TYPE(V) 
 
  222namespace value_type_impl {
 
  267#define DEF_ENUM(kind, ...) k##kind, 
 
  277#define DEF_ENUM(kind, code, extra_bits, ...)                  \ 
  278  k##kind = value_type_impl::PayloadField::encode(             \ 
  279                static_cast<uint8_t>(StandardType::k##kind)) + \ 
 
  286#define DEF_ENUM(kind, ...)                                    \ 
  287  k##kind = value_type_impl::PayloadField::encode(             \ 
  288                static_cast<uint8_t>(StandardType::k##kind)) + \ 
  289            value_type_impl::kNumericExtraBits, 
 
  302namespace value_type_impl {
 
  307  static_assert(
static_cast<uint32_t
>(StandardType::kI32) >=
 
 
  323#define NULLTYPE(name, ...)  \ 
  324  case GenericKind::k##name: \ 
 
  428    return bits == 
static_cast<uint32_t
>(GenericKind::kBottom);
 
 
  432    return bits == 
static_cast<uint32_t
>(GenericKind::kTop);
 
 
  436    return bits == 
static_cast<uint32_t
>(GenericKind::kVoid);
 
 
  440    return bits == 
static_cast<uint32_t
>(GenericKind::kStringViewWtf8) ||
 
  441           bits == 
static_cast<uint32_t
>(GenericKind::kStringViewWtf16) ||
 
  442           bits == 
static_cast<uint32_t
>(GenericKind::kStringViewIter);
 
 
  445    return bit_field_ == 
static_cast<uint32_t
>(NumericKind::kI8) ||
 
  446           bit_field_ == 
static_cast<uint32_t
>(NumericKind::kI16) ||
 
  447           bit_field_ == 
static_cast<uint32_t
>(NumericKind::kF16);
 
 
  467    if (ref == GenericKind::kExtern) 
return false;
 
  468    if (ref == GenericKind::kExternString) 
return false;
 
  469    if (ref == GenericKind::kNoExtern) 
return false;
 
 
  476    constexpr uint8_t kValueKindSizeLog2[] = {
 
  477#define VALUE_KIND_SIZE_LOG2(kind, log2Size, ...) log2Size, 
  479#undef VALUE_KIND_SIZE_LOG2 
  482    return kValueKindSizeLog2[
index];
 
 
  488    constexpr uint8_t kValueKindSize[] = {
 
  489#define ELEM_SIZE_LOG2(kind, log2Size, ...) (1 << log2Size), 
  494    return kValueKindSize[
index];
 
 
  511#define MACH_TYPE(kind, log2Size, code, machineType, ...) \ 
  512  MachineType::machineType(), 
  517    return kMachineType[
index];
 
 
  561    constexpr const char kNumericShortName[] = {
 
  562#define SHORT_NAME(kind, log2, code, mtype, shortName, ...) shortName, 
  567    return kNumericShortName[
index];
 
 
  574    static_assert(
static_cast<int>(StandardType::kI32) >
 
  575                  static_cast<int>(StandardType::kAny));
 
 
  634        case NumericKind::kI32:
 
  636        case NumericKind::kI64:
 
  638        case NumericKind::kF32:
 
  640        case NumericKind::kF64:
 
  642        case NumericKind::kS128:
 
  644        case NumericKind::kI8:
 
  646        case NumericKind::kI16:
 
  648        case NumericKind::kF16:
 
  653    if (
is_top()) 
return kTop;
 
 
  679                   value_type_impl::IsNullableField::encode(nullable) |
 
  680                   value_type_impl::IsSharedField::encode(
is_shared)) {
 
 
  689            value_type_impl::IsNullableField::encode(nullable) |
 
  690            value_type_impl::IsExactField::encode(exact) |
 
  691            value_type_impl::IsSharedField::encode(shared) |
 
  693            value_type_impl::PayloadField::encode(index.index)) {
 
 
 
  723    DCHECK(!type.is_numeric());
 
 
  731      return Generic(GenericKind::kBottom, 
false);
 
  733    constexpr size_t kNumCases = 
kLast - kFirst + 1;
 
  734    constexpr std::array<GenericKind, kNumCases> kLookupTable =
 
  737#define CASE(name, code, ...)                                         \ 
  738  case (k##code##Code - kFirst):                                      \ 
  739    static_assert(k##code##Code >= kFirst && k##code##Code <= kLast); \ 
  740    return GenericKind::k##name; 
  744              return GenericKind::kBottom;
 
 
  767    constexpr uint32_t kMask = ~value_type_impl::IsRefField::kMask &
 
  768                               ~value_type_impl::IsNullableField::kMask;
 
  769    return (
bit_field_ & kMask) == (other.bit_field_ & kMask);
 
 
  776      return std::to_string(
raw_index().index);
 
 
 
  851    bool distinguish_shared)
 const {
 
  855    case GenericKind::kTop:
 
  857    case GenericKind::kBottom:
 
  860#define CASE(name, ...)                                                  \ 
  861  case GenericKind::k##name:                                             \ 
  862    return distinguish_shared && is_shared() ? HeapType::k##name##Shared \ 
  867    case GenericKind::kExternString:
 
  870    case GenericKind::kVoid:
 
 
  939    if (!
is_ref()) 
return *
this;
 
 
  945    if (
bit_field_ == 
static_cast<uint32_t
>(NumericKind::kI8) ||
 
  946        bit_field_ == 
static_cast<uint32_t
>(NumericKind::kI16)) {
 
  949    if (
bit_field_ == 
static_cast<uint32_t
>(NumericKind::kF16)) {
 
 
  977    switch (type.representation()) {
 
 
 
 1034            type.raw_bit_field(), nullable))};
 
 
 
 1124                                         bool shared = 
false)
 
 
 
 1147  constexpr int8_t kValueKindSizeLog2[] = {
 
 1148#define VALUE_KIND_SIZE_LOG2(kind, log2Size, ...) log2Size, 
 1150#undef VALUE_KIND_SIZE_LOG2 
 1153  int size_log_2 = kValueKindSizeLog2[
kind];
 
 
 1159  constexpr int8_t kElementSize[] = {
 
 1160#define ELEM_SIZE_LOG2(kind, log2Size, ...) \ 
 1161  log2Size == -1 ? -1 : (1 << std::max(0, log2Size)), 
 1163#undef ELEM_SIZE_LOG2 
 1166  int size = kElementSize[
kind];
 
 
 1180  constexpr const char* kKindName[] = {
 
 1181#define KIND_NAME(kind, log2Size, code, machineType, shortName, kindName, ...) \ 
 1187  return kKindName[
kind];
 
 
 1199#define MACH_TYPE(kind, log2Size, code, machineType, ...) \ 
 1200  MachineType::machineType(), 
 1205  return kMachineType[
kind];
 
 
 1215static_assert(
sizeof(ValueTypeBase) <= 
kUInt32Size,
 
 1216              "ValueType is small and can be passed by value");
 
 1218              "ValueType has space to be encoded in a Smi");
 
 1222  return oss << type.name() << 
" (raw=0x" << std::hex << type.raw_bit_field()
 
 
 1255    GenericKind::kExternString};
 
 
 1271#define FOREACH_WASMVALUE_CTYPES(V) \ 
 
 1305#define FOREACH_LOAD_TYPE(V) \ 
 1309  V(I32, 16S, Int16)         \ 
 1310  V(I32, 16U, Uint16)        \ 
 1314  V(I64, 16S, Int16)         \ 
 1315  V(I64, 16U, Uint16)        \ 
 1316  V(I64, 32S, Int32)         \ 
 1317  V(I64, 32U, Uint32)        \ 
 1318  V(F32, F16, Float16)       \ 
 
 1326#define DEF_ENUM(type, suffix, ...) k##type##Load##suffix, 
 
 1354        return is_signed ? kI32Load8S : kI32Load8U;
 
 1356        return is_signed ? kI32Load16S : kI32Load16U;
 
 
 1369#define LOAD_SIZE(_, __, memtype) \ 
 1370  static_cast<uint8_t>(           \ 
 1371      ElementSizeInBytes(MachineType::memtype().representation())), 
 
 1378#define LOAD_SIZE(_, __, memtype) \ 
 1379  static_cast<uint8_t>(           \ 
 1380      ElementSizeLog2Of(MachineType::memtype().representation())), 
 
 1386#define VALUE_TYPE(type, ...) ValueType::Primitive(k##type), 
 
 1392#define MEMTYPE(_, __, memtype) MachineType::memtype(), 
 
 
 1398#define FOREACH_STORE_TYPE(V) \ 
 1401  V(I32, 16, Word16)          \ 
 1404  V(I64, 16, Word16)          \ 
 1405  V(I64, 32, Word32)          \ 
 1406  V(F32, F16, Float16)        \ 
 
 1414#define DEF_ENUM(type, suffix, ...) k##type##Store##suffix, 
 
 1446        return kF32StoreF16;
 
 
 1457#define STORE_SIZE(_, __, memrep) \ 
 1458  static_cast<uint8_t>(ElementSizeLog2Of(MachineRepresentation::k##memrep)), 
 
 1464#define VALUE_TYPE(type, ...) ValueType::Primitive(k##type), 
 
 1470#define MEMREP(_, __, memrep) MachineRepresentation::k##memrep, 
 
 
 1477    const CanonicalSig* wasm_signature);
 
static constexpr int kLastUsedBit
static constexpr T decode(U value)
static constexpr bool is_valid(T value)
static constexpr U encode(T value)
static V8_NODISCARD constexpr U update(U previous, T value)
static constexpr int kSize
static constexpr int kShift
constexpr MachineRepresentation representation() const
static constexpr MachineType AnyTagged()
static constexpr MachineType None()
size_t return_count() const
size_t parameter_count() const
CanonicalSig * Get() const
Builder(Zone *zone, size_t return_count, size_t parameter_count)
uint64_t signature_hash() const
CanonicalSig(size_t return_count, size_t parameter_count, const CanonicalValueType *reps)
CanonicalValueType AsExactIfProposalEnabled(Exactness exact=Exactness::kExact) const
constexpr CanonicalValueType AsExact(Exactness exact=Exactness::kExact) const
static constexpr CanonicalValueType RefNull(CanonicalTypeIndex index, bool shared, RefTypeKind kind)
constexpr HeapType::Representation heap_representation() const
static constexpr CanonicalValueType FromRawBitField(uint32_t bits)
static constexpr CanonicalValueType Ref(CanonicalTypeIndex index, bool shared, RefTypeKind kind)
constexpr HeapType::Representation heap_representation_non_shared() const
constexpr CanonicalTypeIndex ref_index() const
constexpr bool is_reference_to(HeapType::Representation repr) const
static constexpr CanonicalValueType Primitive(NumericKind kind)
constexpr bool IsFunctionType() const
static constexpr CanonicalValueType RefMaybeNull(CanonicalValueType type, Nullability nullable)
constexpr bool operator==(CanonicalValueType other) const
static constexpr HeapType Generic(GenericKind kind, bool shared)
static constexpr HeapType from_code(uint8_t code, bool is_shared)
constexpr bool operator==(HeapType other) const
constexpr HeapType AsExact(Exactness exact=Exactness::kExact) const
static constexpr HeapType Index(ModuleTypeIndex index, bool shared, RefTypeKind kind, Exactness exact=Exactness::kAnySubtype)
constexpr Representation representation() const
constexpr bool is_non_nullable() const
constexpr bool is_index() const
constexpr bool is_nullable() const
constexpr ModuleTypeIndex ref_index() const
static constexpr HeapType FromBits(uint32_t bits)
constexpr Nullability nullability() const
constexpr HeapType heap_type() const
constexpr IndependentHeapType AsNonNull() const
constexpr IndependentHeapType(GenericKind kind, Nullability nullable=kNullable, bool shared=false)
constexpr bool operator==(CanonicalValueType b) const
constexpr IndependentValueType(NumericKind kind)
constexpr bool operator==(ValueType b) const
constexpr IndependentValueType(GenericKind kind, Nullability nullable, bool shared)
constexpr ValueType value_type() const
constexpr LoadType(LoadTypeValue val)
constexpr uint8_t size() const
static LoadType ForValueKind(ValueKind kind, bool is_signed=false)
constexpr uint8_t size_log_2() const
static constexpr ValueType kValueType[]
constexpr MachineType mem_type() const
static constexpr MachineType kMemType[]
static constexpr uint8_t kLoadSize[]
static constexpr uint8_t kLoadSizeLog2[]
constexpr LoadTypeValue value() const
static constexpr ValueType kValueType[]
static StoreType ForValueKind(ValueKind kind)
constexpr MachineRepresentation mem_rep() const
static constexpr uint8_t kStoreSizeLog2[]
constexpr StoreTypeValue value() const
static constexpr MachineRepresentation kMemRep[]
constexpr unsigned size_log_2() const
constexpr ValueType value_type() const
constexpr StoreType(StoreTypeValue val)
constexpr unsigned size() const
V8_EXPORT_PRIVATE ValueTypeCode value_type_code_numeric() const
constexpr bool is_ref() const
V8_EXPORT_PRIVATE std::string generic_heaptype_name() const
static const uint32_t kIndexShift
constexpr int value_kind_size() const
constexpr int value_kind_size_log2() const
size_t hash_value() const
V8_EXPORT_PRIVATE ValueTypeCode value_type_code_generic() const
constexpr char short_name() const
constexpr bool is_non_nullable() const
friend class CanonicalValueType
constexpr TypeIndex raw_index() const
constexpr bool is_sentinel() const
constexpr NumericKind numeric_kind() const
static const uint32_t kIsNullableBit
static const uint32_t kRefKindShift
static const int kLastUsedBit
constexpr bool is_valid() const
constexpr StandardType standard_type() const
void Populate(bool shared, RefTypeKind kind)
constexpr bool encoding_needs_shared() const
constexpr MachineType machine_type() const
constexpr bool is_bottom() const
constexpr bool is_packed() const
constexpr bool is_reference_to(GenericKind type) const
constexpr ValueTypeBase(GenericKind kind, Nullability nullable, bool is_shared)
constexpr uint32_t raw_heap_representation(bool distinguish_shared) const
constexpr ValueTypeBase(NumericKind kind)
constexpr ValueKind kind() const
constexpr bool is_reference() const
static const uint32_t kHasIndexBit
constexpr bool is_shared() const
constexpr MachineRepresentation machine_representation() const
constexpr bool is_string_view() const
static const uint32_t kRefKindBits
constexpr bool encoding_needs_exact() const
constexpr bool has_index() const
constexpr Nullability nullability() const
constexpr Exactness exactness() const
constexpr bool is_generic() const
constexpr bool is_object_reference() const
constexpr bool is_numeric() const
constexpr bool is_void() const
constexpr bool is_nullable() const
constexpr bool is_uninhabited() const
static const int kNumIndexBits
constexpr ValueTypeBase(TypeIndex index, Nullability nullable, Exactness exact, bool shared, RefTypeKind ref_type_kind)
constexpr ValueTypeBase()
static const uint32_t kIsRefBit
constexpr bool encoding_needs_heap_type() const
constexpr bool is_exact() const
constexpr bool is_abstract_ref() const
constexpr bool is_defaultable() const
V8_EXPORT_PRIVATE std::string name() const
constexpr uint32_t raw_bit_field() const
constexpr TypeKind type_kind() const
constexpr bool is_top() const
constexpr bool use_wasm_null() const
constexpr RefTypeKind ref_type_kind() const
constexpr ValueTypeBase(uint32_t bit_field)
constexpr int value_kind_full_size() const
static const uint32_t kIndexBits
constexpr GenericKind generic_kind() const
ValueTypeCode value_type_code() const
static constexpr ValueTypeBase Primitive(ValueKind kind)
constexpr ValueType AsNonShared() const
static constexpr ValueType FromRawBitField(uint32_t bits)
static constexpr ValueType Primitive(ValueKind kind)
static constexpr ValueType Generic(GenericKind kind, Nullability nullable, bool shared)
constexpr ValueType AsExact(Exactness exact=Exactness::kExact) const
constexpr HeapType heap_type() const
constexpr bool operator==(ValueType other) const
static constexpr ValueType RefNull(ModuleTypeIndex index, bool shared, RefTypeKind kind)
constexpr bool is_reference_to(HeapType::Representation repr) const
static ValueType For(MachineType type)
ValueType AsExactIfProposalEnabled(Exactness exact=Exactness::kExact) const
constexpr HeapType::Representation heap_representation() const
static constexpr ValueType Ref(HeapType type)
constexpr bool is_reference_to(GenericKind kind) const
static constexpr ValueType RefMaybeNull(HeapType type, Nullability nullable)
constexpr CanonicalValueType Canonicalize(CanonicalTypeIndex index) const
constexpr ValueType Unpacked() const
static constexpr ValueType Ref(ModuleTypeIndex index, bool shared, RefTypeKind kind)
constexpr ModuleTypeIndex ref_index() const
static constexpr ValueType RefNull(HeapType type)
static constexpr ValueType RefMaybeNull(ModuleTypeIndex index, Nullability nullable, bool shared, RefTypeKind kind)
static constexpr ValueType Primitive(NumericKind kind)
constexpr ValueType AsNonNull() const
constexpr ValueType AsNullable(Nullability nullable=kNullable) const
constexpr auto make_array(Function f)
UnionOf< BigInt, NonBigIntPrimitive > Primitive
WordWithBits< 128 > Simd128
static constexpr uint32_t kNumericExtraBits
static constexpr uint32_t kNumberOfNumericKinds
static constexpr uint32_t kGenericKindMask
static constexpr uint32_t kNumericKindMask
constexpr uint32_t ToZeroBasedIndex(NumericKind kind)
static constexpr uint32_t kNumberOfStandardTypes
static constexpr uint32_t kNumberOfGenericKinds
constexpr bool IsNullKind(GenericKind kind)
constexpr MachineType machine_type(ValueKind kind)
bool EquivalentNumericSig(const CanonicalSig *a, const FunctionSig *b)
constexpr IndependentHeapType kWasmNullExternRef
constexpr IndependentHeapType kWasmNullRef
constexpr IndependentHeapType kWasmRefExtern
constexpr IndependentHeapType kWasmRefNullExternString
constexpr IndependentHeapType kWasmStringRef
std::optional< wasm::ValueKind > WasmReturnTypeFromSignature(const CanonicalSig *wasm_signature)
constexpr IndependentValueType kWasmI8
constexpr IndependentValueType kWasmF32
constexpr IndependentHeapType kWasmAnyRef
constexpr IndependentHeapType kWasmStringViewWtf8
constexpr IndependentHeapType kWasmEqRef
constexpr IndependentHeapType kWasmExternRef
constexpr int value_kind_full_size(ValueKind kind)
constexpr IndependentHeapType kWasmNullFuncRef
constexpr IndependentValueType kWasmI32
constexpr bool is_packed(ValueKind kind)
constexpr IndependentHeapType kWasmStringViewIter
constexpr IndependentHeapType kWasmContRef
constexpr IndependentHeapType kWasmI31Ref
constexpr IndependentValueType kWasmF16
constexpr IndependentHeapType kWasmFuncRef
constexpr int value_kind_size_log2(ValueKind kind)
const wasm::FunctionSig * GetI32Sig(Zone *zone, const wasm::FunctionSig *sig)
constexpr size_t kV8MaxWasmTypes
constexpr IndependentHeapType kWasmTop
constexpr bool is_object_reference(ValueKind kind)
constexpr IndependentHeapType kWasmRefI31
constexpr ValueKind unpacked(ValueKind kind)
constexpr IndependentHeapType kWasmExnRef
constexpr IndependentHeapType kWasmRefExternString
static constexpr bool kNotShared
constexpr IndependentHeapType kWasmStringViewWtf16
constexpr IndependentHeapType kWasmVoid
constexpr IndependentHeapType kWasmStructRef
constexpr IndependentHeapType kWasmNullContRef
constexpr int value_kind_size(ValueKind kind)
constexpr IndependentHeapType kWasmBottom
std::ostream & operator<<(std::ostream &os, LiftoffVarState slot)
constexpr IndependentValueType kWasmS128
constexpr int kMaxValueTypeSize
constexpr IndependentValueType kWasmF64
constexpr bool is_reference(ValueKind kind)
constexpr IndependentValueType kWasmI64
constexpr IndependentValueType kWasmI16
constexpr IndependentHeapType kWasmRefString
constexpr IndependentHeapType kWasmArrayRef
constexpr IndependentHeapType kWasmNullExnRef
constexpr int kTaggedSize
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in name
kWasmInternalFunctionIndirectPointerTag kProtectedInstanceDataOffset sig
constexpr int kSystemPointerSize
constexpr int kTaggedSizeLog2
V8_EXPORT_PRIVATE FlagValues v8_flags
constexpr int kUInt32Size
bool is_signed(Condition cond)
#define DCHECK_LE(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define ASSERT_TRIVIALLY_COPYABLE(T)
#define V8_EXPORT_PRIVATE
auto operator<=>(CanonicalTypeIndex other) const
bool operator==(CanonicalTypeIndex other) const
static constexpr CanonicalTypeIndex Invalid()
static constexpr ModuleTypeIndex Invalid()
auto operator<=>(ModuleTypeIndex other) const
bool operator==(ModuleTypeIndex other) const
static constexpr uint32_t kInvalid
constexpr bool valid() const
size_t hash_value() const
#define V8_LIKELY(condition)
#define FOREACH_STORE_TYPE(V)
#define NULLTYPE(name,...)
#define LOAD_SIZE(_, __, memtype)
#define ELEM_SIZE_LOG2(kind, log2Size,...)
#define MEMTYPE(_, __, memtype)
#define FOREACH_NUMERIC_VALUE_TYPE(V)
#define FOREACH_ABSTRACT_TYPE(V)
#define MEMREP(_, __, memrep)
#define VALUE_KIND_SIZE_LOG2(kind, log2Size,...)
#define SHORT_NAME(kind, log2, code, mtype, shortName,...)
#define KIND_NAME(kind, log2Size, code, machineType, shortName, kindName,...)
#define VALUE_TYPE(type,...)
#define FOREACH_NONE_TYPE(V)
#define FOREACH_LOAD_TYPE(V)
#define MACH_TYPE(kind, log2Size, code, machineType,...)
#define FOREACH_VALUE_TYPE(V)
#define STORE_SIZE(_, __, memrep)