1/*
2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H
16#define ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H
17
18#include <map>
19#include <string>
20#include <vector>
21
22#include "ecmascript/compiler/bytecodes.h"
23
24namespace panda::ecmascript::kungfu {
25
26#define ECMA_OPCODE_LIST(V)                                                \
27    V(LDNAN)  															   \
28    V(LDINFINITY)                                                          \
29    V(LDNEWTARGET)                                                         \
30    V(LDUNDEFINED)                                                         \
31    V(LDNULL)                                                              \
32    V(LDSYMBOL)                                                            \
33    V(LDGLOBAL)                                                            \
34    V(LDTRUE)                                                              \
35    V(LDFALSE)                                                             \
36    V(LDHOLE)                                                              \
37    V(LDTHIS)                                                              \
38    V(POPLEXENV)                                                           \
39    V(GETUNMAPPEDARGS)                                                     \
40    V(ASYNCFUNCTIONENTER)                                                  \
41    V(CREATEASYNCGENERATOROBJ_V8)                                          \
42    V(LDFUNCTION)                                                          \
43    V(DEBUGGER)                                                            \
44    V(GETPROPITERATOR)                                                     \
45    V(GETITERATOR_IMM8)                                                    \
46    V(GETITERATOR_IMM16)                                                   \
47    V(CLOSEITERATOR_IMM8_V8)                                               \
48    V(CLOSEITERATOR_IMM16_V8)                                              \
49    V(ASYNCGENERATORRESOLVE_V8_V8_V8)                                      \
50    V(CREATEEMPTYOBJECT)                                                   \
51    V(CREATEEMPTYARRAY_IMM8)                                               \
52    V(CREATEEMPTYARRAY_IMM16)                                              \
53    V(CREATEGENERATOROBJ_V8)                                               \
54    V(CREATEITERRESULTOBJ_V8_V8)                                           \
55    V(CREATEOBJECTWITHEXCLUDEDKEYS_IMM8_V8_V8)                             \
56    V(CALLTHIS0_IMM8_V8)                                                   \
57    V(CREATEARRAYWITHBUFFER_IMM8_ID16)                                     \
58    V(CREATEARRAYWITHBUFFER_IMM16_ID16)                                    \
59    V(CALLTHIS1_IMM8_V8_V8)                                                \
60    V(CALLTHIS2_IMM8_V8_V8_V8)                                             \
61    V(CREATEOBJECTWITHBUFFER_IMM8_ID16)                                    \
62    V(CREATEOBJECTWITHBUFFER_IMM16_ID16)                                   \
63    V(CREATEREGEXPWITHLITERAL_IMM8_ID16_IMM8)                              \
64    V(CREATEREGEXPWITHLITERAL_IMM16_ID16_IMM8)                             \
65    V(NEWOBJAPPLY_IMM8_V8)                                                 \
66    V(NEWOBJAPPLY_IMM16_V8)                                                \
67    V(NEWOBJRANGE_IMM8_IMM8_V8)                                            \
68    V(NEWOBJRANGE_IMM16_IMM8_V8)                                           \
69    V(WIDE_NEWOBJRANGE_PREF_IMM16_V8)                                      \
70    V(NEWLEXENV_IMM8)                                                      \
71    V(NEWLEXENVWITHNAME_IMM8_ID16)                                         \
72    V(ADD2_IMM8_V8)                                                        \
73    V(SUB2_IMM8_V8)                                                        \
74    V(MUL2_IMM8_V8)                                                        \
75    V(DIV2_IMM8_V8)                                                        \
76    V(MOD2_IMM8_V8)                                                        \
77    V(EQ_IMM8_V8)                                                          \
78    V(NOTEQ_IMM8_V8)                                                       \
79    V(LESS_IMM8_V8)                                                        \
80    V(LESSEQ_IMM8_V8)                                                      \
81    V(GREATER_IMM8_V8)                                                     \
82    V(GREATEREQ_IMM8_V8)                                                   \
83    V(SHL2_IMM8_V8)                                                        \
84    V(SHR2_IMM8_V8)                                                        \
85    V(ASHR2_IMM8_V8)                                                       \
86    V(AND2_IMM8_V8)                                                        \
87    V(OR2_IMM8_V8)                                                         \
88    V(XOR2_IMM8_V8)                                                        \
89    V(EXP_IMM8_V8)                                                         \
90    V(TYPEOF_IMM8)                                                         \
91    V(TYPEOF_IMM16)                                                        \
92    V(TONUMBER_IMM8)                                                       \
93    V(TONUMERIC_IMM8)                                                      \
94    V(NEG_IMM8)                                                            \
95    V(NOT_IMM8)                                                            \
96    V(INC_IMM8)                                                            \
97    V(DEC_IMM8)                                                            \
98    V(ISIN_IMM8_V8)                                                        \
99    V(INSTANCEOF_IMM8_V8)                                                  \
100    V(STRICTNOTEQ_IMM8_V8)                                                 \
101    V(STRICTEQ_IMM8_V8)                                                    \
102    V(ISTRUE)                                                              \
103    V(ISFALSE)                                                             \
104    V(CALLTHIS3_IMM8_V8_V8_V8_V8)                                          \
105    V(CALLTHISRANGE_IMM8_IMM8_V8)                                          \
106    V(WIDE_SUPERCALLTHISRANGE_PREF_IMM16_V8)                               \
107    V(SUPERCALLTHISRANGE_IMM8_IMM8_V8)                                     \
108    V(SUPERCALLARROWRANGE_IMM8_IMM8_V8)                                    \
109    V(CALLRUNTIME_SUPERCALLFORWARDALLARGS_PREF_V8)                         \
110    V(DEFINEFUNC_IMM8_ID16_IMM8)                                           \
111    V(DEFINEFUNC_IMM16_ID16_IMM8)                                          \
112    V(DEFINEMETHOD_IMM8_ID16_IMM8)                                         \
113    V(DEFINEMETHOD_IMM16_ID16_IMM8)                                        \
114    V(CALLARG0_IMM8)                                                       \
115    V(SUPERCALLSPREAD_IMM8_V8)                                             \
116    V(APPLY_IMM8_V8_V8)                                                    \
117    V(CALLARGS2_IMM8_V8_V8)                                                \
118    V(CALLARGS3_IMM8_V8_V8_V8)                                             \
119    V(CALLRANGE_IMM8_IMM8_V8)                                              \
120    V(LDEXTERNALMODULEVAR_IMM8)                                            \
121    V(LDTHISBYNAME_IMM8_ID16)                                              \
122    V(LDTHISBYNAME_IMM16_ID16)                                             \
123    V(LDOBJBYNAME_IMM8_ID16)                                               \
124    V(LDOBJBYNAME_IMM16_ID16)                                              \
125    V(DEFINEGETTERSETTERBYVALUE_V8_V8_V8_V8)                               \
126    V(STTHISBYNAME_IMM8_ID16)                                              \
127    V(STTHISBYNAME_IMM16_ID16)                                             \
128    V(STOBJBYNAME_IMM8_ID16_V8)                                            \
129    V(STOBJBYNAME_IMM16_ID16_V8)                                           \
130    V(DEFINEFIELDBYNAME_IMM8_ID16_V8)                                      \
131    V(DEFINEPROPERTYBYNAME_IMM8_ID16_V8)                                   \
132    V(LDTHISBYVALUE_IMM8)                                                  \
133    V(LDTHISBYVALUE_IMM16)                                                 \
134    V(LDOBJBYVALUE_IMM8_V8)                                                \
135    V(LDOBJBYVALUE_IMM16_V8)                                               \
136    V(STTHISBYVALUE_IMM8_V8)                                               \
137    V(STTHISBYVALUE_IMM16_V8)                                              \
138    V(DYNAMICIMPORT)                                                       \
139    V(DEFINECLASSWITHBUFFER_IMM8_ID16_ID16_IMM16_V8)                       \
140    V(DEFINECLASSWITHBUFFER_IMM16_ID16_ID16_IMM16_V8)                      \
141    V(RESUMEGENERATOR)                                                     \
142    V(GETRESUMEMODE)                                                       \
143    V(GETTEMPLATEOBJECT_IMM8)                                              \
144    V(GETTEMPLATEOBJECT_IMM16)                                             \
145    V(GETNEXTPROPNAME_V8)                                                  \
146    V(JEQZ_IMM8)                                                           \
147    V(JEQZ_IMM16)                                                          \
148    V(JEQZ_IMM32)                                                          \
149    V(SETOBJECTWITHPROTO_IMM8_V8)                                          \
150    V(DELOBJPROP_V8)                                                       \
151    V(SUSPENDGENERATOR_V8)                                                 \
152    V(ASYNCFUNCTIONAWAITUNCAUGHT_V8)                                       \
153    V(COPYDATAPROPERTIES_V8)                                               \
154    V(STARRAYSPREAD_V8_V8)                                                 \
155    V(SETOBJECTWITHPROTO_IMM16_V8)                                         \
156    V(STOBJBYVALUE_IMM8_V8_V8)                                             \
157    V(STOBJBYVALUE_IMM16_V8_V8)                                            \
158    V(STOWNBYVALUE_IMM8_V8_V8)                                             \
159    V(STOWNBYVALUE_IMM16_V8_V8)                                            \
160    V(LDSUPERBYVALUE_IMM8_V8)                                              \
161    V(LDSUPERBYVALUE_IMM16_V8)                                             \
162    V(STSUPERBYVALUE_IMM8_V8_V8)                                           \
163    V(STSUPERBYVALUE_IMM16_V8_V8)                                          \
164    V(LDOBJBYINDEX_IMM8_IMM16)                                             \
165    V(LDOBJBYINDEX_IMM16_IMM16)                                            \
166    V(WIDE_LDOBJBYINDEX_PREF_IMM32)                                        \
167    V(STOBJBYINDEX_IMM8_V8_IMM16)                                          \
168    V(STOBJBYINDEX_IMM16_V8_IMM16)                                         \
169    V(WIDE_STOBJBYINDEX_PREF_V8_IMM32)                                     \
170    V(STOWNBYINDEX_IMM8_V8_IMM16)                                          \
171    V(STOWNBYINDEX_IMM16_V8_IMM16)                                         \
172    V(ASYNCFUNCTIONRESOLVE_V8)                                             \
173    V(ASYNCFUNCTIONREJECT_V8)                                              \
174    V(COPYRESTARGS_IMM8)                                                   \
175    V(LDLEXVAR_IMM4_IMM4)                                                  \
176    V(STLEXVAR_IMM4_IMM4)                                                  \
177    V(GETMODULENAMESPACE_IMM8)                                             \
178    V(STMODULEVAR_IMM8)                                                    \
179    V(TRYLDGLOBALBYNAME_IMM8_ID16)                                         \
180    V(TRYLDGLOBALBYNAME_IMM16_ID16)                                        \
181    V(TRYSTGLOBALBYNAME_IMM8_ID16)                                         \
182    V(TRYSTGLOBALBYNAME_IMM16_ID16)                                        \
183    V(LDGLOBALVAR_IMM16_ID16)                                              \
184    V(STGLOBALVAR_IMM16_ID16)                                              \
185    V(STOWNBYNAME_IMM8_ID16_V8)                                            \
186    V(STOWNBYNAME_IMM16_ID16_V8)                                           \
187    V(LDSUPERBYNAME_IMM8_ID16)                                             \
188    V(LDSUPERBYNAME_IMM16_ID16)                                            \
189    V(STSUPERBYNAME_IMM8_ID16_V8)                                          \
190    V(STSUPERBYNAME_IMM16_ID16_V8)                                         \
191    V(LDLOCALMODULEVAR_IMM8)                                               \
192    V(STCONSTTOGLOBALRECORD_IMM16_ID16)                                    \
193    V(STTOGLOBALRECORD_IMM16_ID16)                                         \
194    V(JNEZ_IMM8)                                                           \
195    V(JNEZ_IMM16)                                                          \
196    V(JNEZ_IMM32)                                                          \
197    V(STOWNBYVALUEWITHNAMESET_IMM8_V8_V8)                                  \
198    V(STOWNBYVALUEWITHNAMESET_IMM16_V8_V8)                                 \
199    V(STOWNBYNAMEWITHNAMESET_IMM8_ID16_V8)                                 \
200    V(STOWNBYNAMEWITHNAMESET_IMM16_ID16_V8)                                \
201    V(LDBIGINT_ID16)                                                       \
202    V(LDA_STR_ID16)                                                        \
203    V(JMP_IMM8)                                                            \
204    V(JMP_IMM16)                                                           \
205    V(JMP_IMM32)                                                           \
206    V(JSTRICTEQZ_IMM8)                                                     \
207    V(JSTRICTEQZ_IMM16)                                                    \
208    V(JNSTRICTEQZ_IMM8)                                                    \
209    V(JNSTRICTEQZ_IMM16)                                                   \
210    V(JEQNULL_IMM8)                                                        \
211    V(JEQNULL_IMM16)                                                       \
212    V(LDA_V8)                                                              \
213    V(STA_V8)                                                              \
214    V(LDAI_IMM32)                                                          \
215    V(FLDAI_IMM64)                                                         \
216    V(RETURN)                                                              \
217    V(RETURNUNDEFINED)                                                     \
218    V(LDLEXVAR_IMM8_IMM8)                                                  \
219    V(JNENULL_IMM8)                                                        \
220    V(STLEXVAR_IMM8_IMM8)                                                  \
221    V(JNENULL_IMM16)                                                       \
222    V(CALLARG1_IMM8_V8)                                                    \
223    V(JSTRICTEQNULL_IMM8)                                                  \
224    V(JSTRICTEQNULL_IMM16)                                                 \
225    V(JNSTRICTEQNULL_IMM8)                                                 \
226    V(JNSTRICTEQNULL_IMM16)                                                \
227    V(JEQUNDEFINED_IMM8)                                                   \
228    V(JEQUNDEFINED_IMM16)                                                  \
229    V(JNEUNDEFINED_IMM8)                                                   \
230    V(JNEUNDEFINED_IMM16)                                                  \
231    V(JSTRICTEQUNDEFINED_IMM8)                                             \
232    V(JSTRICTEQUNDEFINED_IMM16)                                            \
233    V(JNSTRICTEQUNDEFINED_IMM8)                                            \
234    V(JNSTRICTEQUNDEFINED_IMM16)                                           \
235    V(JEQ_V8_IMM8)                                                         \
236    V(JEQ_V8_IMM16)                                                        \
237    V(JNE_V8_IMM8)                                                         \
238    V(JNE_V8_IMM16)                                                        \
239    V(JSTRICTEQ_V8_IMM8)                                                   \
240    V(JSTRICTEQ_V8_IMM16)                                                  \
241    V(JNSTRICTEQ_V8_IMM8)                                                  \
242    V(JNSTRICTEQ_V8_IMM16)                                                 \
243    V(MOV_V4_V4)                                                           \
244    V(MOV_V8_V8)                                                           \
245    V(MOV_V16_V16)                                                         \
246    V(ASYNCGENERATORREJECT_V8)                                             \
247    V(NOP)                                                                 \
248    V(SETGENERATORSTATE_IMM8)                                              \
249    V(GETASYNCITERATOR_IMM8)                                               \
250    V(LDPRIVATEPROPERTY_IMM8_IMM16_IMM16)                                  \
251    V(STPRIVATEPROPERTY_IMM8_IMM16_IMM16_V8)                               \
252    V(TESTIN_IMM8_IMM16_IMM16)                                             \
253    V(DEPRECATED_LDLEXENV_PREF_NONE)                                       \
254    V(WIDE_CREATEOBJECTWITHEXCLUDEDKEYS_PREF_IMM16_V8_V8)                  \
255    V(THROW_PREF_NONE)                                                     \
256    V(DEPRECATED_POPLEXENV_PREF_NONE)                                      \
257    V(THROW_NOTEXISTS_PREF_NONE)                                           \
258    V(DEPRECATED_GETITERATORNEXT_PREF_V8_V8)                               \
259    V(WIDE_NEWLEXENV_PREF_IMM16)                                           \
260    V(THROW_PATTERNNONCOERCIBLE_PREF_NONE)                                 \
261    V(DEPRECATED_CREATEARRAYWITHBUFFER_PREF_IMM16)                         \
262    V(WIDE_NEWLEXENVWITHNAME_PREF_IMM16_ID16)                              \
263    V(THROW_DELETESUPERPROPERTY_PREF_NONE)                                 \
264    V(DEPRECATED_CREATEOBJECTWITHBUFFER_PREF_IMM16)                        \
265    V(WIDE_CALLRANGE_PREF_IMM16_V8)                                        \
266    V(THROW_CONSTASSIGNMENT_PREF_V8)                                       \
267    V(DEPRECATED_TONUMBER_PREF_V8)                                         \
268    V(WIDE_CALLTHISRANGE_PREF_IMM16_V8)                                    \
269    V(THROW_IFNOTOBJECT_PREF_V8)                                           \
270    V(DEPRECATED_TONUMERIC_PREF_V8)                                        \
271    V(THROW_UNDEFINEDIFHOLE_PREF_V8_V8)                                    \
272    V(THROW_UNDEFINEDIFHOLEWITHNAME_PREF_ID16)                             \
273    V(DEPRECATED_NEG_PREF_V8)                                              \
274    V(WIDE_SUPERCALLARROWRANGE_PREF_IMM16_V8)                              \
275    V(THROW_IFSUPERNOTCORRECTCALL_PREF_IMM8)                               \
276    V(DEPRECATED_NOT_PREF_V8)                                              \
277    V(THROW_IFSUPERNOTCORRECTCALL_PREF_IMM16)                              \
278    V(DEPRECATED_INC_PREF_V8)                                              \
279    V(DEPRECATED_DEC_PREF_V8)                                              \
280    V(WIDE_STOWNBYINDEX_PREF_V8_IMM32)                                     \
281    V(DEPRECATED_CALLARG0_PREF_V8)                                         \
282    V(WIDE_COPYRESTARGS_PREF_IMM16)                                        \
283    V(DEPRECATED_CALLARG1_PREF_V8_V8)                                      \
284    V(WIDE_LDLEXVAR_PREF_IMM16_IMM16)                                      \
285    V(DEPRECATED_CALLARGS2_PREF_V8_V8_V8)                                  \
286    V(WIDE_STLEXVAR_PREF_IMM16_IMM16)                                      \
287    V(DEPRECATED_CALLARGS3_PREF_V8_V8_V8_V8)                               \
288    V(WIDE_GETMODULENAMESPACE_PREF_IMM16)                                  \
289    V(DEPRECATED_CALLRANGE_PREF_IMM16_V8)                                  \
290    V(WIDE_STMODULEVAR_PREF_IMM16)                                         \
291    V(DEPRECATED_CALLSPREAD_PREF_V8_V8_V8)                                 \
292    V(WIDE_LDLOCALMODULEVAR_PREF_IMM16)                                    \
293    V(DEPRECATED_CALLTHISRANGE_PREF_IMM16_V8)                              \
294    V(WIDE_LDEXTERNALMODULEVAR_PREF_IMM16)                                 \
295    V(DEPRECATED_DEFINECLASSWITHBUFFER_PREF_ID16_IMM16_IMM16_V8_V8)        \
296    V(WIDE_LDPATCHVAR_PREF_IMM16)                                          \
297    V(DEPRECATED_RESUMEGENERATOR_PREF_V8)                                  \
298    V(WIDE_STPATCHVAR_PREF_IMM16)                                          \
299    V(DEPRECATED_GETRESUMEMODE_PREF_V8)                                    \
300    V(DEPRECATED_GETTEMPLATEOBJECT_PREF_V8)                                \
301    V(DEPRECATED_DELOBJPROP_PREF_V8_V8)                                    \
302    V(DEPRECATED_SUSPENDGENERATOR_PREF_V8_V8)                              \
303    V(DEPRECATED_ASYNCFUNCTIONAWAITUNCAUGHT_PREF_V8_V8)                    \
304    V(DEPRECATED_COPYDATAPROPERTIES_PREF_V8_V8)                            \
305    V(DEPRECATED_SETOBJECTWITHPROTO_PREF_V8_V8)                            \
306    V(DEPRECATED_LDOBJBYVALUE_PREF_V8_V8)                                  \
307    V(DEPRECATED_LDSUPERBYVALUE_PREF_V8_V8)                                \
308    V(DEPRECATED_LDOBJBYINDEX_PREF_V8_IMM32)                               \
309    V(DEPRECATED_ASYNCFUNCTIONRESOLVE_PREF_V8_V8_V8)                       \
310    V(DEPRECATED_ASYNCFUNCTIONREJECT_PREF_V8_V8_V8)                        \
311    V(DEPRECATED_STLEXVAR_PREF_IMM4_IMM4_V8)                               \
312    V(DEPRECATED_STLEXVAR_PREF_IMM8_IMM8_V8)                               \
313    V(DEPRECATED_STLEXVAR_PREF_IMM16_IMM16_V8)                             \
314    V(DEPRECATED_GETMODULENAMESPACE_PREF_ID32)                             \
315    V(DEPRECATED_STMODULEVAR_PREF_ID32)                                    \
316    V(DEPRECATED_LDOBJBYNAME_PREF_ID32_V8)                                 \
317    V(DEPRECATED_LDSUPERBYNAME_PREF_ID32_V8)                               \
318    V(DEPRECATED_LDMODULEVAR_PREF_ID32_IMM8)                               \
319    V(DEPRECATED_STCONSTTOGLOBALRECORD_PREF_ID32)                          \
320    V(DEPRECATED_STLETTOGLOBALRECORD_PREF_ID32)                            \
321    V(DEPRECATED_STCLASSTOGLOBALRECORD_PREF_ID32)                          \
322    V(DEPRECATED_LDHOMEOBJECT_PREF_NONE)                                   \
323    V(DEPRECATED_CREATEOBJECTHAVINGMETHOD_PREF_IMM16)                      \
324    V(DEPRECATED_DYNAMICIMPORT_PREF_V8)                                    \
325    V(CALLRUNTIME_NOTIFYCONCURRENTRESULT_PREF_NONE)                        \
326    V(CALLRUNTIME_DEFINEFIELDBYVALUE_PREF_IMM8_V8_V8)                      \
327    V(CALLRUNTIME_DEFINEFIELDBYINDEX_PREF_IMM8_IMM32_V8)                   \
328    V(CALLRUNTIME_TOPROPERTYKEY_PREF_NONE)                                 \
329    V(CALLRUNTIME_CREATEPRIVATEPROPERTY_PREF_IMM16_ID16)                   \
330    V(CALLRUNTIME_DEFINEPRIVATEPROPERTY_PREF_IMM8_IMM16_IMM16_V8)          \
331    V(CALLRUNTIME_CALLINIT_PREF_IMM8_V8)                                   \
332    V(CALLRUNTIME_DEFINESENDABLECLASS_PREF_IMM16_ID16_ID16_IMM16_V8)       \
333    V(CALLRUNTIME_LDSENDABLECLASS_PREF_IMM16)                              \
334    V(CALLRUNTIME_LDSENDABLEEXTERNALMODULEVAR_PREF_IMM8)                   \
335    V(CALLRUNTIME_WIDELDSENDABLEEXTERNALMODULEVAR_PREF_IMM16)              \
336    V(CALLRUNTIME_NEWSENDABLEENV_PREF_IMM8)                                \
337    V(CALLRUNTIME_WIDENEWSENDABLEENV_PREF_IMM16)                           \
338    V(CALLRUNTIME_STSENDABLEVAR_PREF_IMM4_IMM4)                            \
339    V(CALLRUNTIME_STSENDABLEVAR_PREF_IMM8_IMM8)                            \
340    V(CALLRUNTIME_WIDESTSENDABLEVAR_PREF_IMM16_IMM16)                      \
341    V(CALLRUNTIME_LDSENDABLEVAR_PREF_IMM4_IMM4)                            \
342    V(CALLRUNTIME_LDSENDABLEVAR_PREF_IMM8_IMM8)                            \
343    V(CALLRUNTIME_WIDELDSENDABLEVAR_PREF_IMM16_IMM16)                      \
344    V(CALLRUNTIME_ISTRUE_PREF_IMM8)                                        \
345    V(CALLRUNTIME_ISFALSE_PREF_IMM8)                                       \
346    V(CALLRUNTIME_LDLAZYMODULEVAR_PREF_IMM8)                               \
347    V(CALLRUNTIME_WIDELDLAZYMODULEVAR_PREF_IMM16)                          \
348    V(CALLRUNTIME_LDLAZYSENDABLEMODULEVAR_PREF_IMM8)                       \
349    V(CALLRUNTIME_WIDELDLAZYSENDABLEMODULEVAR_PREF_IMM16)                  \
350
351inline std::string GetEcmaOpcodeStr(EcmaOpcode opcode)
352{
353    const std::map<EcmaOpcode, const char *> strMap = {
354#define BYTECODE_NAME_MAP(name) { EcmaOpcode::name, #name },
355        ECMA_OPCODE_LIST(BYTECODE_NAME_MAP)
356#undef BYTECODE_NAME_MAP
357    };
358    if (strMap.count(opcode) > 0) {
359        return strMap.at(opcode);
360    }
361    return "bytecode-" + std::to_string(static_cast<uint16_t>(opcode));
362}
363
364inline std::vector<EcmaOpcode> GetEcmaCodeListForRange()
365{
366    std::vector<EcmaOpcode> lorwingOpCodeList = {
367#define BYTECODE_NAME_VECTOR(name) EcmaOpcode::name,
368        ECMA_OPCODE_LIST(BYTECODE_NAME_VECTOR)
369#undef BYTECODE_NAME_VECTOR
370    };
371    return lorwingOpCodeList;
372}
373
374inline std::string GetHelpForEcmaCodeListForRange()
375{
376    int32_t i = 0;
377    std::vector<EcmaOpcode> lorwingOpCodeList = GetEcmaCodeListForRange();
378    std::string optBCRangeStr;
379    optBCRangeStr.append(" bytecode for list: \n");
380    for (auto ecmaOpCode : lorwingOpCodeList) {
381        optBCRangeStr.append(" index:" + std::to_string(i) + "     ecmaOpCode:" + GetEcmaOpcodeStr(ecmaOpCode) + "\n");
382        i++;
383    }
384    return optBCRangeStr;
385}
386}  // namespace panda::ecmascript::kungfu
387#endif  // ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H_
388