v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
access-builder.h
Go to the documentation of this file.
1// Copyright 2024 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_COMPILER_TURBOSHAFT_ACCESS_BUILDER_H_
6#define V8_COMPILER_TURBOSHAFT_ACCESS_BUILDER_H_
7
13
15
16class AccessBuilderTS;
17
18// TODO(nicohartmann): Rename this to `FieldAccess` and rely on proper
19// namespaces.
20template <typename Class, typename T>
22 using type = T;
23
24 private:
25 friend class AccessBuilderTS;
27 : compiler::FieldAccess(base) {}
28};
29
30// TODO(nicohartmann): Rename this to `ElementAccess` and rely on proper
31// namespaces.
32template <typename Class, typename T>
45
46// TODO(nicohartmann): Rename this to `AccessBuilder` and rely on proper
47// namespaces.
48class AccessBuilderTS : public AllStatic {
49 public:
50 template <typename Class>
51 static constexpr bool is_array_buffer_v = std::is_same_v<Class, ArrayBuffer>;
52
53#define TF_FIELD_ACCESS(Class, T, name) \
54 static FieldAccessTS<Class, T> name() { \
55 return FieldAccessTS<Class, T>(compiler::AccessBuilder::name()); \
56 }
57 TF_FIELD_ACCESS(String, Word32, ForStringLength)
58 TF_FIELD_ACCESS(Name, Word32, ForNameRawHashField)
59 TF_FIELD_ACCESS(HeapNumber, Float64, ForHeapNumberValue)
60 TF_FIELD_ACCESS(HeapNumber, Word32, ForHeapInt32Value)
63 ForHeapNumberOrOddballOrHoleValue)
64#undef TF_ACCESS
76
77#define TF_ELEMENT_ACCESS(Class, T, name) \
78 static ElementAccessTS<Class, T> name() { \
79 return ElementAccessTS<Class, T>{compiler::AccessBuilder::name(), false}; \
80 }
81 TF_ELEMENT_ACCESS(SeqOneByteString, Word32, ForSeqOneByteStringCharacter)
82 TF_ELEMENT_ACCESS(SeqTwoByteString, Word32, ForSeqTwoByteStringCharacter)
83 TF_ELEMENT_ACCESS(Object, Object, ForOrderedHashMapEntryValue)
84#undef TF_ELEMENT_ACCESS
85
86 template <IsTagged T>
92};
93
94} // namespace v8::internal::compiler::turboshaft
95
96#endif // V8_COMPILER_TURBOSHAFT_ACCESS_BUILDER_H_
#define T
static constexpr MachineType Int32()
static ElementAccess ForFixedArrayElement()
static FieldAccess ForMap(WriteBarrierKind write_barrier=kMapWriteBarrier)
static TypeCache const * Get()
Map ForMap(WriteBarrierKind write_barrier=kMapWriteBarrier)
static FieldAccessTS< FeedbackVector, Word32 > ForFeedbackVectorLength()
static ElementAccessTS< FixedArray, T > ForFixedArrayElement()
WordWithBits< 32 > Word32
Definition index.h:223
FloatWithBits< 64 > Float64
Definition index.h:234
Local< T > Handle
ElementAccessTS(const compiler::ElementAccess &base, bool is_array_buffer_load)
FieldAccessTS(const compiler::FieldAccess &base)
#define TF_FIELD_ACCESS(Class, T, name)
#define TF_ELEMENT_ACCESS(Class, T, name)