5#ifndef V8_COMPILER_BACKEND_INSTRUCTION_CODES_H_
6#define V8_COMPILER_BACKEND_INSTRUCTION_CODES_H_
12#elif V8_TARGET_ARCH_ARM64
14#elif V8_TARGET_ARCH_IA32
16#elif V8_TARGET_ARCH_MIPS64
18#elif V8_TARGET_ARCH_LOONG64
20#elif V8_TARGET_ARCH_X64
22#elif V8_TARGET_ARCH_PPC64
24#elif V8_TARGET_ARCH_S390X
26#elif V8_TARGET_ARCH_RISCV32 || V8_TARGET_ARCH_RISCV64
29#define TARGET_ARCH_OPCODE_LIST(V)
30#define TARGET_ADDRESSING_MODE_LIST(V)
51 switch (write_barrier_kind) {
70#define COMMON_ARCH_OPCODE_WITH_MEMORY_ACCESS_MODE_LIST(V) \
71 V(AtomicExchangeInt8) \
72 V(AtomicExchangeUint8) \
73 V(AtomicExchangeInt16) \
74 V(AtomicExchangeUint16) \
75 V(AtomicExchangeWord32) \
76 V(AtomicCompareExchangeInt8) \
77 V(AtomicCompareExchangeUint8) \
78 V(AtomicCompareExchangeInt16) \
79 V(AtomicCompareExchangeUint16) \
80 V(AtomicCompareExchangeWord32) \
106 V(ArchStoreWithWriteBarrier) \
107 V(ArchAtomicStoreWithWriteBarrier) \
108 V(ArchStoreIndirectWithWriteBarrier) \
112 V(AtomicLoadUint16) \
113 V(AtomicLoadWord32) \
114 V(AtomicStoreWord8) \
115 V(AtomicStoreWord16) \
120#define COMMON_ARCH_OPCODE_LIST(V) \
124 V(ArchTailCallCodeObject) \
125 V(ArchTailCallAddress) \
126 IF_WASM(V, ArchTailCallWasm) \
127 IF_WASM(V, ArchTailCallWasmIndirect) \
130 V(ArchCallCodeObject) \
131 V(ArchCallJSFunction) \
132 IF_WASM(V, ArchCallWasmFunction) \
133 IF_WASM(V, ArchCallWasmFunctionIndirect) \
134 V(ArchCallBuiltinPointer) \
137 V(ArchPrepareCallCFunction) \
138 V(ArchSaveCallerRegisters) \
139 V(ArchRestoreCallerRegisters) \
140 V(ArchCallCFunction) \
141 V(ArchCallCFunctionWithFrameState) \
142 V(ArchPrepareTailCall) \
144 V(ArchBinarySearchSwitch) \
147 V(ArchAbortCSADcheck) \
150 V(ArchThrowTerminator) \
153 V(ArchFramePointer) \
154 IF_WASM(V, ArchStackPointer) \
155 IF_WASM(V, ArchSetStackPointer) \
156 V(ArchParentFramePointer) \
157 V(ArchTruncateDoubleToI) \
159 V(ArchStackPointerGreaterThan) \
160 V(ArchStackCheckOffset) \
161 V(Ieee754Float64Acos) \
162 V(Ieee754Float64Acosh) \
163 V(Ieee754Float64Asin) \
164 V(Ieee754Float64Asinh) \
165 V(Ieee754Float64Atan) \
166 V(Ieee754Float64Atanh) \
167 V(Ieee754Float64Atan2) \
168 V(Ieee754Float64Cbrt) \
169 V(Ieee754Float64Cos) \
170 V(Ieee754Float64Cosh) \
171 V(Ieee754Float64Exp) \
172 V(Ieee754Float64Expm1) \
173 V(Ieee754Float64Log) \
174 V(Ieee754Float64Log1p) \
175 V(Ieee754Float64Log10) \
176 V(Ieee754Float64Log2) \
177 V(Ieee754Float64Pow) \
178 V(Ieee754Float64Sin) \
179 V(Ieee754Float64Sinh) \
180 V(Ieee754Float64Tan) \
181 V(Ieee754Float64Tanh) \
182 COMMON_ARCH_OPCODE_WITH_MEMORY_ACCESS_MODE_LIST(V)
184#define ARCH_OPCODE_LIST(V) \
185 COMMON_ARCH_OPCODE_LIST(V) \
186 TARGET_ARCH_OPCODE_LIST(V)
189#define DECLARE_ARCH_OPCODE(Name) k##Name,
191#undef DECLARE_ARCH_OPCODE
192#define COUNT_ARCH_OPCODE(Name) +1
194#undef COUNT_ARCH_OPCODE
204#define ADDRESSING_MODE_LIST(V) \
206 TARGET_ADDRESSING_MODE_LIST(V)
209#define DECLARE_ADDRESSING_MODE(Name) kMode_##Name,
211#undef DECLARE_ADDRESSING_MODE
212#define COUNT_ADDRESSING_MODE(Name) +1
214#undef COUNT_ADDRESSING_MODE
330 "All opcodes must fit in the 9-bit ArchOpcodeField.");
334 "All addressing modes must fit in the 5-bit AddressingModeField.");
354#ifdef V8_TARGET_ARCH_X64
355enum LaneSize { kL8 = 0, kL16 = 1, kL32 = 2, kL64 = 3 };
356enum VectorLength { kV128 = 0, kV256 = 1, kV512 = 3 };
372#ifdef V8_TARGET_ARCH_X64
374 VectorLengthField::kLastUsedBit);
388#if defined(TARGET_ARCH_OPCODE_WITH_MEMORY_ACCESS_MODE_LIST)
429 "We are running close to the number of available opcodes.");
static constexpr int kLastUsedBit
BitField< T2, kShift+kSize, size2, U > Next
static constexpr bool is_valid(T value)
#define TARGET_ARCH_OPCODE_WITH_MEMORY_ACCESS_MODE_LIST(V)
#define COUNT_ARCH_OPCODE(Name)
#define COUNT_ADDRESSING_MODE(Name)
#define ARCH_OPCODE_LIST(V)
#define DECLARE_ADDRESSING_MODE(Name)
#define DECLARE_ARCH_OPCODE(Name)
#define COMMON_ARCH_OPCODE_WITH_MEMORY_ACCESS_MODE_LIST(V)
#define ADDRESSING_MODE_LIST(V)
@ kValueIsIndirectPointer
@ kIndirectPointerWriteBarrier
@ kEphemeronKeyWriteBarrier
bool HasMemoryAccessMode(ArchOpcode opcode)
FlagsConditionField::Next< int, 8 > LaneSizeField
size_t AtomicWidthSize(AtomicWidth width)
FlagsCondition CommuteFlagsCondition(FlagsCondition condition)
@ kSignedGreaterThanOrEqual
@ kFloatGreaterThanOrEqualOrUnordered
@ kUnsignedLessThanOrEqual
@ kFloatLessThanOrEqualOrUnordered
@ kFloatGreaterThanOrUnordered
@ kFloatGreaterThanOrEqual
@ kUnsignedGreaterThanOrEqual
@ kFloatLessThanOrUnordered
RecordWriteMode WriteBarrierKindToRecordWriteMode(WriteBarrierKind write_barrier_kind)
FlagsCondition NegateFlagsCondition(FlagsCondition condition)
static constexpr int kLazyDeoptOnThrowSentinel
static constexpr FlagsCondition kStackPointerGreaterThanCondition
@ kMemoryAccessProtectedMemOutOfBounds
@ kMemoryAccessProtectedNullDereference
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
@ kFlags_conditional_branch
#define V8_EXPORT_PRIVATE