5#ifndef V8_DEOPTIMIZER_TRANSLATION_OPCODE_H_
6#define V8_DEOPTIMIZER_TRANSLATION_OPCODE_H_
14#define TRANSLATION_JS_FRAME_OPCODE_LIST(V) \
15 V(INTERPRETED_FRAME_WITH_RETURN, 6) \
16 V(INTERPRETED_FRAME_WITHOUT_RETURN, 4) \
17 V(JAVASCRIPT_BUILTIN_CONTINUATION_FRAME, 3) \
18 V(JAVASCRIPT_BUILTIN_CONTINUATION_WITH_CATCH_FRAME, 3)
20#define TRANSLATION_FRAME_OPCODE_LIST(V) \
21 V(CONSTRUCT_CREATE_STUB_FRAME, 2) \
22 V(CONSTRUCT_INVOKE_STUB_FRAME, 1) \
23 V(BUILTIN_CONTINUATION_FRAME, 3) \
24 IF_WASM(V, JS_TO_WASM_BUILTIN_CONTINUATION_FRAME, 4) \
25 IF_WASM(V, WASM_INLINED_INTO_JS_FRAME, 3) \
26 IF_WASM(V, LIFTOFF_FRAME, 3) \
27 V(INLINED_EXTRA_ARGUMENTS, 3)
29#define TRANSLATION_OPCODE_LIST(V) \
30 TRANSLATION_JS_FRAME_OPCODE_LIST(V) \
31 TRANSLATION_FRAME_OPCODE_LIST(V) \
32 V(ARGUMENTS_ELEMENTS, 1) \
33 V(ARGUMENTS_LENGTH, 0) \
35 V(BEGIN_WITHOUT_FEEDBACK, 3) \
36 V(BEGIN_WITH_FEEDBACK, 3) \
38 V(BOOL_STACK_SLOT, 1) \
39 V(CAPTURED_OBJECT, 1) \
41 V(DOUBLE_REGISTER, 1) \
42 V(DOUBLE_STACK_SLOT, 1) \
43 V(SIMD128_STACK_SLOT, 1) \
44 V(HOLEY_DOUBLE_REGISTER, 1) \
45 V(HOLEY_DOUBLE_STACK_SLOT, 1) \
46 V(SIMD128_REGISTER, 1) \
47 V(DUPLICATED_OBJECT, 1) \
48 V(FLOAT_REGISTER, 1) \
49 V(FLOAT_STACK_SLOT, 1) \
50 V(INT32_REGISTER, 1) \
51 V(INT32_STACK_SLOT, 1) \
52 V(INT64_REGISTER, 1) \
53 V(INT64_STACK_SLOT, 1) \
54 V(SIGNED_BIGINT64_REGISTER, 1) \
55 V(SIGNED_BIGINT64_STACK_SLOT, 1) \
56 V(UNSIGNED_BIGINT64_REGISTER, 1) \
57 V(UNSIGNED_BIGINT64_STACK_SLOT, 1) \
61 V(TAGGED_STACK_SLOT, 1) \
62 V(UINT32_REGISTER, 1) \
63 V(UINT32_STACK_SLOT, 1) \
64 V(UPDATE_FEEDBACK, 2) \
65 V(MATCH_PREVIOUS_TRANSLATION, 1)
68#define CASE(name, ...) name,
73#define PLUS_ONE(...) +1
83#define CASE(name, operand_count) operand_count,
86 return counts[
static_cast<int>(o)];
90#define CASE(name, operand_count) \
91 static_assert(operand_count <= kMaxTranslationOperandCount);
96 return o == TranslationOpcode::BEGIN_WITH_FEEDBACK ||
97 o == TranslationOpcode::BEGIN_WITHOUT_FEEDBACK;
102 0 ==
static_cast<int>(TranslationOpcode::INTERPRETED_FRAME_WITH_RETURN));
110 static_cast<int>(TranslationOpcode::CONSTRUCT_CREATE_STUB_FRAME));
115 return o == TranslationOpcode::INTERPRETED_FRAME_WITH_RETURN ||
116 o == TranslationOpcode::INTERPRETED_FRAME_WITHOUT_RETURN;
121#define CASE(name, _) \
122 case TranslationOpcode::name: \
128 out <<
"BROKEN_OPCODE_" <<
static_cast<uint8_t
>(opcode);
134#undef TRANSLATION_OPCODE_LIST
135#undef TRANSLATION_FRAME_OPCODE_LIST
static constexpr int kNumTranslationJsFrameOpcodes
bool IsTranslationFrameOpcode(TranslationOpcode o)
static constexpr int kNumTranslationFrameOpcodes
bool TranslationOpcodeIsBegin(TranslationOpcode o)
bool IsTranslationInterpreterFrameOpcode(TranslationOpcode o)
int TranslationOpcodeOperandCount(TranslationOpcode o)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
static constexpr int kNumTranslationOpcodes
bool IsTranslationJsFrameOpcode(TranslationOpcode o)
constexpr int kMaxTranslationOperandCount
#define TRANSLATION_FRAME_OPCODE_LIST(V)
#define TRANSLATION_JS_FRAME_OPCODE_LIST(V)
#define TRANSLATION_OPCODE_LIST(V)