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 
24 namespace 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 
GetEcmaOpcodeStr(EcmaOpcode opcode)351 inline 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 
GetEcmaCodeListForRange()364 inline 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 
GetHelpForEcmaCodeListForRange()374 inline 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