21#ifndef ZEND_VM_OPCODES_H
22#define ZEND_VM_OPCODES_H
25#define ZEND_VM_LINES 0
26#define ZEND_VM_KIND_CALL 1
27#define ZEND_VM_KIND_SWITCH 2
28#define ZEND_VM_KIND_GOTO 3
29#define ZEND_VM_KIND_HYBRID 4
31#if (defined(__GNUC__) && defined(HAVE_GCC_GLOBAL_REGS))
32# define ZEND_VM_KIND ZEND_VM_KIND_HYBRID
34# define ZEND_VM_KIND ZEND_VM_KIND_CALL
37#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) && !defined(__SANITIZE_ADDRESS__)
38# if ((defined(i386) && !defined(__PIC__)) || defined(__x86_64__) || defined(_M_X64))
39# define ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE 48
43#define ZEND_VM_OP_SPEC 0x00000001
44#define ZEND_VM_OP_CONST 0x00000002
45#define ZEND_VM_OP_TMPVAR 0x00000004
46#define ZEND_VM_OP_TMPVARCV 0x00000008
47#define ZEND_VM_OP_MASK 0x000000f0
48#define ZEND_VM_OP_NUM 0x00000010
49#define ZEND_VM_OP_JMP_ADDR 0x00000020
50#define ZEND_VM_OP_TRY_CATCH 0x00000030
51#define ZEND_VM_OP_THIS 0x00000050
52#define ZEND_VM_OP_NEXT 0x00000060
53#define ZEND_VM_OP_CLASS_FETCH 0x00000070
54#define ZEND_VM_OP_CONSTRUCTOR 0x00000080
55#define ZEND_VM_OP_CONST_FETCH 0x00000090
56#define ZEND_VM_OP_CACHE_SLOT 0x000000a0
57#define ZEND_VM_EXT_VAR_FETCH 0x00010000
58#define ZEND_VM_EXT_ISSET 0x00020000
59#define ZEND_VM_EXT_CACHE_SLOT 0x00040000
60#define ZEND_VM_EXT_ARRAY_INIT 0x00080000
61#define ZEND_VM_EXT_REF 0x00100000
62#define ZEND_VM_EXT_FETCH_REF 0x00200000
63#define ZEND_VM_EXT_DIM_WRITE 0x00400000
64#define ZEND_VM_EXT_MASK 0x0f000000
65#define ZEND_VM_EXT_NUM 0x01000000
66#define ZEND_VM_EXT_LAST_CATCH 0x02000000
67#define ZEND_VM_EXT_JMP_ADDR 0x03000000
68#define ZEND_VM_EXT_OP 0x04000000
69#define ZEND_VM_EXT_TYPE 0x07000000
70#define ZEND_VM_EXT_EVAL 0x08000000
71#define ZEND_VM_EXT_TYPE_MASK 0x09000000
72#define ZEND_VM_EXT_SRC 0x0b000000
73#define ZEND_VM_NO_CONST_CONST 0x40000000
74#define ZEND_VM_COMMUTATIVE 0x80000000
75#define ZEND_VM_OP1_FLAGS(flags) (flags & 0xff)
76#define ZEND_VM_OP2_FLAGS(flags) ((flags >> 8) & 0xff)
100#define ZEND_BOOL_NOT 14
101#define ZEND_BOOL_XOR 15
102#define ZEND_IS_IDENTICAL 16
103#define ZEND_IS_NOT_IDENTICAL 17
104#define ZEND_IS_EQUAL 18
105#define ZEND_IS_NOT_EQUAL 19
106#define ZEND_IS_SMALLER 20
107#define ZEND_IS_SMALLER_OR_EQUAL 21
108#define ZEND_ASSIGN 22
109#define ZEND_ASSIGN_DIM 23
110#define ZEND_ASSIGN_OBJ 24
111#define ZEND_ASSIGN_STATIC_PROP 25
112#define ZEND_ASSIGN_OP 26
113#define ZEND_ASSIGN_DIM_OP 27
114#define ZEND_ASSIGN_OBJ_OP 28
115#define ZEND_ASSIGN_STATIC_PROP_OP 29
116#define ZEND_ASSIGN_REF 30
117#define ZEND_QM_ASSIGN 31
118#define ZEND_ASSIGN_OBJ_REF 32
119#define ZEND_ASSIGN_STATIC_PROP_REF 33
120#define ZEND_PRE_INC 34
121#define ZEND_PRE_DEC 35
122#define ZEND_POST_INC 36
123#define ZEND_POST_DEC 37
124#define ZEND_PRE_INC_STATIC_PROP 38
125#define ZEND_PRE_DEC_STATIC_PROP 39
126#define ZEND_POST_INC_STATIC_PROP 40
127#define ZEND_POST_DEC_STATIC_PROP 41
131#define ZEND_JMPZ_EX 46
132#define ZEND_JMPNZ_EX 47
134#define ZEND_CHECK_VAR 49
135#define ZEND_SEND_VAR_NO_REF_EX 50
138#define ZEND_FAST_CONCAT 53
139#define ZEND_ROPE_INIT 54
140#define ZEND_ROPE_ADD 55
141#define ZEND_ROPE_END 56
142#define ZEND_BEGIN_SILENCE 57
143#define ZEND_END_SILENCE 58
144#define ZEND_INIT_FCALL_BY_NAME 59
145#define ZEND_DO_FCALL 60
146#define ZEND_INIT_FCALL 61
147#define ZEND_RETURN 62
149#define ZEND_RECV_INIT 64
150#define ZEND_SEND_VAL 65
151#define ZEND_SEND_VAR_EX 66
152#define ZEND_SEND_REF 67
154#define ZEND_INIT_NS_FCALL_BY_NAME 69
156#define ZEND_INIT_ARRAY 71
157#define ZEND_ADD_ARRAY_ELEMENT 72
158#define ZEND_INCLUDE_OR_EVAL 73
159#define ZEND_UNSET_VAR 74
160#define ZEND_UNSET_DIM 75
161#define ZEND_UNSET_OBJ 76
162#define ZEND_FE_RESET_R 77
163#define ZEND_FE_FETCH_R 78
164#define ZEND_FETCH_R 80
165#define ZEND_FETCH_DIM_R 81
166#define ZEND_FETCH_OBJ_R 82
167#define ZEND_FETCH_W 83
168#define ZEND_FETCH_DIM_W 84
169#define ZEND_FETCH_OBJ_W 85
170#define ZEND_FETCH_RW 86
171#define ZEND_FETCH_DIM_RW 87
172#define ZEND_FETCH_OBJ_RW 88
173#define ZEND_FETCH_IS 89
174#define ZEND_FETCH_DIM_IS 90
175#define ZEND_FETCH_OBJ_IS 91
176#define ZEND_FETCH_FUNC_ARG 92
177#define ZEND_FETCH_DIM_FUNC_ARG 93
178#define ZEND_FETCH_OBJ_FUNC_ARG 94
179#define ZEND_FETCH_UNSET 95
180#define ZEND_FETCH_DIM_UNSET 96
181#define ZEND_FETCH_OBJ_UNSET 97
182#define ZEND_FETCH_LIST_R 98
183#define ZEND_FETCH_CONSTANT 99
184#define ZEND_CHECK_FUNC_ARG 100
185#define ZEND_EXT_STMT 101
186#define ZEND_EXT_FCALL_BEGIN 102
187#define ZEND_EXT_FCALL_END 103
188#define ZEND_EXT_NOP 104
189#define ZEND_TICKS 105
190#define ZEND_SEND_VAR_NO_REF 106
191#define ZEND_CATCH 107
192#define ZEND_THROW 108
193#define ZEND_FETCH_CLASS 109
194#define ZEND_CLONE 110
195#define ZEND_RETURN_BY_REF 111
196#define ZEND_INIT_METHOD_CALL 112
197#define ZEND_INIT_STATIC_METHOD_CALL 113
198#define ZEND_ISSET_ISEMPTY_VAR 114
199#define ZEND_ISSET_ISEMPTY_DIM_OBJ 115
200#define ZEND_SEND_VAL_EX 116
201#define ZEND_SEND_VAR 117
202#define ZEND_INIT_USER_CALL 118
203#define ZEND_SEND_ARRAY 119
204#define ZEND_SEND_USER 120
205#define ZEND_STRLEN 121
206#define ZEND_DEFINED 122
207#define ZEND_TYPE_CHECK 123
208#define ZEND_VERIFY_RETURN_TYPE 124
209#define ZEND_FE_RESET_RW 125
210#define ZEND_FE_FETCH_RW 126
211#define ZEND_FE_FREE 127
212#define ZEND_INIT_DYNAMIC_CALL 128
213#define ZEND_DO_ICALL 129
214#define ZEND_DO_UCALL 130
215#define ZEND_DO_FCALL_BY_NAME 131
216#define ZEND_PRE_INC_OBJ 132
217#define ZEND_PRE_DEC_OBJ 133
218#define ZEND_POST_INC_OBJ 134
219#define ZEND_POST_DEC_OBJ 135
221#define ZEND_OP_DATA 137
222#define ZEND_INSTANCEOF 138
223#define ZEND_GENERATOR_CREATE 139
224#define ZEND_MAKE_REF 140
225#define ZEND_DECLARE_FUNCTION 141
226#define ZEND_DECLARE_LAMBDA_FUNCTION 142
227#define ZEND_DECLARE_CONST 143
228#define ZEND_DECLARE_CLASS 144
229#define ZEND_DECLARE_CLASS_DELAYED 145
230#define ZEND_DECLARE_ANON_CLASS 146
231#define ZEND_ADD_ARRAY_UNPACK 147
232#define ZEND_ISSET_ISEMPTY_PROP_OBJ 148
233#define ZEND_HANDLE_EXCEPTION 149
234#define ZEND_USER_OPCODE 150
235#define ZEND_ASSERT_CHECK 151
236#define ZEND_JMP_SET 152
237#define ZEND_UNSET_CV 153
238#define ZEND_ISSET_ISEMPTY_CV 154
239#define ZEND_FETCH_LIST_W 155
240#define ZEND_SEPARATE 156
241#define ZEND_FETCH_CLASS_NAME 157
242#define ZEND_CALL_TRAMPOLINE 158
243#define ZEND_DISCARD_EXCEPTION 159
244#define ZEND_YIELD 160
245#define ZEND_GENERATOR_RETURN 161
246#define ZEND_FAST_CALL 162
247#define ZEND_FAST_RET 163
248#define ZEND_RECV_VARIADIC 164
249#define ZEND_SEND_UNPACK 165
250#define ZEND_YIELD_FROM 166
251#define ZEND_COPY_TMP 167
252#define ZEND_BIND_GLOBAL 168
253#define ZEND_COALESCE 169
254#define ZEND_SPACESHIP 170
255#define ZEND_FUNC_NUM_ARGS 171
256#define ZEND_FUNC_GET_ARGS 172
257#define ZEND_FETCH_STATIC_PROP_R 173
258#define ZEND_FETCH_STATIC_PROP_W 174
259#define ZEND_FETCH_STATIC_PROP_RW 175
260#define ZEND_FETCH_STATIC_PROP_IS 176
261#define ZEND_FETCH_STATIC_PROP_FUNC_ARG 177
262#define ZEND_FETCH_STATIC_PROP_UNSET 178
263#define ZEND_UNSET_STATIC_PROP 179
264#define ZEND_ISSET_ISEMPTY_STATIC_PROP 180
265#define ZEND_FETCH_CLASS_CONSTANT 181
266#define ZEND_BIND_LEXICAL 182
267#define ZEND_BIND_STATIC 183
268#define ZEND_FETCH_THIS 184
269#define ZEND_SEND_FUNC_ARG 185
270#define ZEND_ISSET_ISEMPTY_THIS 186
271#define ZEND_SWITCH_LONG 187
272#define ZEND_SWITCH_STRING 188
273#define ZEND_IN_ARRAY 189
274#define ZEND_COUNT 190
275#define ZEND_GET_CLASS 191
276#define ZEND_GET_CALLED_CLASS 192
277#define ZEND_GET_TYPE 193
278#define ZEND_ARRAY_KEY_EXISTS 194
279#define ZEND_MATCH 195
280#define ZEND_CASE_STRICT 196
281#define ZEND_MATCH_ERROR 197
282#define ZEND_JMP_NULL 198
283#define ZEND_CHECK_UNDEF_ARGS 199
284#define ZEND_FETCH_GLOBALS 200
285#define ZEND_VERIFY_NEVER_TYPE 201
286#define ZEND_CALLABLE_CONVERT 202
287#define ZEND_BIND_INIT_STATIC_OR_JMP 203
288#define ZEND_FRAMELESS_ICALL_0 204
289#define ZEND_FRAMELESS_ICALL_1 205
290#define ZEND_FRAMELESS_ICALL_2 206
291#define ZEND_FRAMELESS_ICALL_3 207
292#define ZEND_JMP_FRAMELESS 208
293#define ZEND_INIT_PARENT_PROPERTY_HOOK_CALL 209
295#define ZEND_VM_LAST_OPCODE 209
ZEND_API const char *ZEND_FASTCALL zend_get_opcode_name(uint8_t opcode)
ZEND_API uint8_t zend_get_opcode_id(const char *name, size_t length)
ZEND_API uint32_t ZEND_FASTCALL zend_get_opcode_flags(uint8_t opcode)