• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #ifndef ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H
17 #define ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H
18 
19 #include "ecmascript/base/config.h"
20 #include "ecmascript/compiler/call_signature.h"
21 
22 namespace panda::ecmascript::kungfu {
23 #define IGNORE_BC_STUB(...)
24 #define ASM_UNUSED_BC_STUB_LIST(T)                      \
25     T(HandleOverflowDD)                                 \
26     T(HandleOverflowDE)                                 \
27     T(HandleOverflowDF)                                 \
28     T(HandleOverflowE0)                                 \
29     T(HandleOverflowE1)                                 \
30     T(HandleOverflowE2)                                 \
31     T(HandleOverflowE3)                                 \
32     T(HandleOverflowE4)                                 \
33     T(HandleOverflowE5)                                 \
34     T(HandleOverflowE6)                                 \
35     T(HandleOverflowE7)                                 \
36     T(HandleOverflowE8)                                 \
37     T(HandleOverflowE9)                                 \
38     T(HandleOverflowEA)                                 \
39     T(HandleOverflowEB)                                 \
40     T(HandleOverflowEC)                                 \
41     T(HandleOverflowED)                                 \
42     T(HandleOverflowEE)                                 \
43     T(HandleOverflowEF)                                 \
44     T(HandleOverflowF0)                                 \
45     T(HandleOverflowF1)                                 \
46     T(HandleOverflowF2)                                 \
47     T(HandleOverflowF3)                                 \
48     T(HandleOverflowF4)                                 \
49     T(HandleOverflowF5)                                 \
50     T(HandleOverflowF6)                                 \
51     T(HandleOverflowF7)                                 \
52     T(HandleOverflowF8)                                 \
53     T(HandleOverflowF9)                                 \
54     T(HandleOverflowFA)                                 \
55 
56 
57 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging
58 #define ASM_INTERPRETER_BC_STUB_LIST(V, T, D)                             \
59     T(HandleLdundefined)                                                  \
60     T(HandleLdnull)                                                       \
61     T(HandleLdtrue)                                                       \
62     T(HandleLdfalse)                                                      \
63     T(HandleCreateemptyobject)                                            \
64     T(HandleCreateemptyarrayImm8)                                         \
65     T(HandleCreatearraywithbufferImm8Id16)                                \
66     T(HandleCreateobjectwithbufferImm8Id16)                               \
67     T(HandleNewobjrangeImm8Imm8V8)                                        \
68     T(HandleNewlexenvImm8)                                                \
69     T(HandleAdd2Imm8V8)                                                   \
70     T(HandleSub2Imm8V8)                                                   \
71     T(HandleMul2Imm8V8)                                                   \
72     T(HandleDiv2Imm8V8)                                                   \
73     T(HandleMod2Imm8V8)                                                   \
74     T(HandleEqImm8V8)                                                     \
75     T(HandleNoteqImm8V8)                                                  \
76     T(HandleLessImm8V8)                                                   \
77     T(HandleLesseqImm8V8)                                                 \
78     T(HandleGreaterImm8V8)                                                \
79     T(HandleGreatereqImm8V8)                                              \
80     T(HandleShl2Imm8V8)                                                   \
81     T(HandleShr2Imm8V8)                                                   \
82     T(HandleAshr2Imm8V8)                                                  \
83     T(HandleAnd2Imm8V8)                                                   \
84     T(HandleOr2Imm8V8)                                                    \
85     T(HandleXor2Imm8V8)                                                   \
86     T(HandleExpImm8V8)                                                    \
87     T(HandleTypeofImm8)                                                   \
88     T(HandleTonumberImm8)                                                 \
89     T(HandleTonumericImm8)                                                \
90     T(HandleNegImm8)                                                      \
91     T(HandleNotImm8)                                                      \
92     T(HandleIncImm8)                                                      \
93     T(HandleDecImm8)                                                      \
94     T(HandleIstrue)                                                       \
95     T(HandleIsfalse)                                                      \
96     T(HandleIsinImm8V8)                                                   \
97     T(HandleInstanceofImm8V8)                                             \
98     T(HandleStrictnoteqImm8V8)                                            \
99     T(HandleStricteqImm8V8)                                               \
100     D(HandleCallarg0Imm8)                                                 \
101     D(HandleCallarg1Imm8V8)                                               \
102     D(HandleCallargs2Imm8V8V8)                                            \
103     D(HandleCallargs3Imm8V8V8V8)                                          \
104     D(HandleCallthis0Imm8V8)                                              \
105     D(HandleCallthis1Imm8V8V8)                                            \
106     D(HandleCallthis2Imm8V8V8V8)                                          \
107     D(HandleCallthis3Imm8V8V8V8V8)                                        \
108     D(HandleCallthisrangeImm8Imm8V8)                                      \
109     T(HandleSupercallthisrangeImm8Imm8V8)                                 \
110     T(HandleDefinefuncImm8Id16Imm8)                                       \
111     T(HandleDefinemethodImm8Id16Imm8)                                     \
112     T(HandleDefineclasswithbufferImm8Id16Id16Imm16V8)                     \
113     T(HandleGetnextpropnameV8)                                            \
114     T(HandleLdobjbyvalueImm8V8)                                           \
115     T(HandleStobjbyvalueImm8V8V8)                                         \
116     T(HandleLdsuperbyvalueImm8V8)                                         \
117     T(HandleLdobjbyindexImm8Imm16)                                        \
118     T(HandleStobjbyindexImm8V8Imm16)                                      \
119     T(HandleLdlexvarImm4Imm4)                                             \
120     T(HandleStlexvarImm4Imm4)                                             \
121     T(HandleLdaStrId16)                                                   \
122     T(HandleTryldglobalbynameImm8Id16)                                    \
123     T(HandleTrystglobalbynameImm8Id16)                                    \
124     T(HandleLdglobalvarImm16Id16)                                         \
125     T(HandleLdobjbynameImm8Id16)                                          \
126     T(HandleStobjbynameImm8Id16V8)                                        \
127     T(HandleMovV4V4)                                                      \
128     T(HandleMovV8V8)                                                      \
129     T(HandleLdsuperbynameImm8Id16)                                        \
130     T(HandleStconsttoglobalrecordImm16Id16)                               \
131     T(HandleSttoglobalrecordImm16Id16)                                    \
132     T(HandleLdthisbynameImm8Id16)                                         \
133     T(HandleStthisbynameImm8Id16)                                         \
134     T(HandleLdthisbyvalueImm8)                                            \
135     T(HandleStthisbyvalueImm8V8)                                          \
136     T(HandleJmpImm8)                                                      \
137     T(HandleJmpImm16)                                                     \
138     T(HandleJeqzImm8)                                                     \
139     T(HandleJeqzImm16)                                                    \
140     T(HandleJnezImm8)                                                     \
141     T(HandleJstricteqzImm8)                                               \
142     T(HandleJnstricteqzImm8)                                              \
143     T(HandleJeqnullImm8)                                                  \
144     T(HandleJnenullImm8)                                                  \
145     T(HandleJstricteqnullImm8)                                            \
146     T(HandleJnstricteqnullImm8)                                           \
147     T(HandleJequndefinedImm8)                                             \
148     T(HandleJneundefinedImm8)                                             \
149     T(HandleJstrictequndefinedImm8)                                       \
150     T(HandleJnstrictequndefinedImm8)                                      \
151     T(HandleJeqV8Imm8)                                                    \
152     T(HandleJneV8Imm8)                                                    \
153     T(HandleJstricteqV8Imm8)                                              \
154     T(HandleJnstricteqV8Imm8)                                             \
155     T(HandleLdaV8)                                                        \
156     T(HandleStaV8)                                                        \
157     T(HandleLdaiImm32)                                                    \
158     T(HandleFldaiImm64)                                                   \
159     T(HandleReturn)                                                       \
160     T(HandleReturnundefined)                                              \
161     T(HandleGetpropiterator)                                              \
162     T(HandleGetiteratorImm8)                                              \
163     T(HandleCloseiteratorImm8V8)                                          \
164     T(HandlePoplexenv)                                                    \
165     T(HandleLdnan)                                                        \
166     T(HandleLdinfinity)                                                   \
167     T(HandleGetunmappedargs)                                              \
168     T(HandleLdglobal)                                                     \
169     T(HandleLdnewtarget)                                                  \
170     T(HandleLdthis)                                                       \
171     T(HandleLdhole)                                                       \
172     T(HandleCreateregexpwithliteralImm8Id16Imm8)                          \
173     T(HandleCreateregexpwithliteralImm16Id16Imm8)                         \
174     D(HandleCallrangeImm8Imm8V8)                                          \
175     T(HandleDefinefuncImm16Id16Imm8)                                      \
176     T(HandleDefineclasswithbufferImm16Id16Id16Imm16V8)                    \
177     T(HandleGettemplateobjectImm8)                                        \
178     T(HandleSetobjectwithprotoImm8V8)                                     \
179     T(HandleStownbyvalueImm8V8V8)                                         \
180     T(HandleStownbyindexImm8V8Imm16)                                      \
181     T(HandleStownbynameImm8Id16V8)                                        \
182     T(HandleGetmodulenamespaceImm8)                                       \
183     T(HandleStmodulevarImm8)                                              \
184     T(HandleLdlocalmodulevarImm8)                                         \
185     T(HandleLdexternalmodulevarImm8)                                      \
186     T(HandleStglobalvarImm16Id16)                                         \
187     T(HandleCreateemptyarrayImm16)                                        \
188     T(HandleCreatearraywithbufferImm16Id16)                               \
189     T(HandleCreateobjectwithbufferImm16Id16)                              \
190     T(HandleNewobjrangeImm16Imm8V8)                                       \
191     T(HandleTypeofImm16)                                                  \
192     T(HandleLdobjbyvalueImm16V8)                                          \
193     T(HandleStobjbyvalueImm16V8V8)                                        \
194     T(HandleLdsuperbyvalueImm16V8)                                        \
195     T(HandleLdobjbyindexImm16Imm16)                                       \
196     T(HandleStobjbyindexImm16V8Imm16)                                     \
197     T(HandleLdlexvarImm8Imm8)                                             \
198     T(HandleStlexvarImm8Imm8)                                             \
199     T(HandleTryldglobalbynameImm16Id16)                                   \
200     T(HandleTrystglobalbynameImm16Id16)                                   \
201     T(HandleStownbynamewithnamesetImm8Id16V8)                             \
202     T(HandleMovV16V16)                                                    \
203     T(HandleLdobjbynameImm16Id16)                                         \
204     T(HandleStobjbynameImm16Id16V8)                                       \
205     T(HandleLdsuperbynameImm16Id16)                                       \
206     T(HandleLdthisbynameImm16Id16)                                        \
207     T(HandleStthisbynameImm16Id16)                                        \
208     T(HandleLdthisbyvalueImm16)                                           \
209     T(HandleStthisbyvalueImm16V8)                                         \
210     T(HandleAsyncgeneratorrejectV8)                                       \
211     T(HandleJmpImm32)                                                     \
212     T(HandleStownbyvaluewithnamesetImm8V8V8)                              \
213     T(HandleJeqzImm32)                                                    \
214     T(HandleJnezImm16)                                                    \
215     T(HandleJnezImm32)                                                    \
216     T(HandleJstricteqzImm16)                                              \
217     T(HandleJnstricteqzImm16)                                             \
218     T(HandleJeqnullImm16)                                                 \
219     T(HandleJnenullImm16)                                                 \
220     T(HandleJstricteqnullImm16)                                           \
221     T(HandleJnstricteqnullImm16)                                          \
222     T(HandleJequndefinedImm16)                                            \
223     T(HandleJneundefinedImm16)                                            \
224     T(HandleJstrictequndefinedImm16)                                      \
225     T(HandleJnstrictequndefinedImm16)                                     \
226     T(HandleJeqV8Imm16)                                                   \
227     T(HandleJneV8Imm16)                                                   \
228     T(HandleJstricteqV8Imm16)                                             \
229     T(HandleJnstricteqV8Imm16)                                            \
230     T(HandleGetiteratorImm16)                                             \
231     T(HandleCloseiteratorImm16V8)                                         \
232     T(HandleLdsymbol)                                                     \
233     T(HandleAsyncfunctionenter)                                           \
234     T(HandleLdfunction)                                                   \
235     T(HandleDebugger)                                                     \
236     T(HandleCreategeneratorobjV8)                                         \
237     T(HandleCreateiterresultobjV8V8)                                      \
238     T(HandleCreateobjectwithexcludedkeysImm8V8V8)                         \
239     T(HandleNewobjapplyImm8V8)                                            \
240     T(HandleNewobjapplyImm16V8)                                           \
241     T(HandleNewlexenvwithnameImm8Id16)                                    \
242     T(HandleCreateasyncgeneratorobjV8)                                    \
243     T(HandleAsyncgeneratorresolveV8V8V8)                                  \
244     T(HandleSupercallspreadImm8V8)                                        \
245     T(HandleApplyImm8V8V8)                                                \
246     T(HandleSupercallarrowrangeImm8Imm8V8)                                \
247     T(HandleDefinegettersetterbyvalueV8V8V8V8)                            \
248     T(HandleDynamicimport)                                                \
249     T(HandleDefinemethodImm16Id16Imm8)                                    \
250     T(HandleResumegenerator)                                              \
251     T(HandleGetresumemode)                                                \
252     T(HandleGettemplateobjectImm16)                                       \
253     T(HandleDelobjpropV8)                                                 \
254     T(HandleSuspendgeneratorV8)                                           \
255     T(HandleAsyncfunctionawaituncaughtV8)                                 \
256     T(HandleCopydatapropertiesV8)                                         \
257     T(HandleStarrayspreadV8V8)                                            \
258     T(HandleSetobjectwithprotoImm16V8)                                    \
259     T(HandleStownbyvalueImm16V8V8)                                        \
260     T(HandleStsuperbyvalueImm8V8V8)                                       \
261     T(HandleStsuperbyvalueImm16V8V8)                                      \
262     T(HandleStownbyindexImm16V8Imm16)                                     \
263     T(HandleStownbynameImm16Id16V8)                                       \
264     T(HandleAsyncfunctionresolveV8)                                       \
265     T(HandleAsyncfunctionrejectV8)                                        \
266     T(HandleCopyrestargsImm8)                                             \
267     T(HandleStsuperbynameImm8Id16V8)                                      \
268     T(HandleStsuperbynameImm16Id16V8)                                     \
269     T(HandleStownbyvaluewithnamesetImm16V8V8)                             \
270     T(HandleLdbigintId16)                                                 \
271     T(HandleStownbynamewithnamesetImm16Id16V8)                            \
272     T(HandleNop)                                                          \
273     T(HandleSetgeneratorstateImm8)                                        \
274     T(HandleGetasynciteratorImm8)                                         \
275     T(HandleLdPrivatePropertyImm8Imm16Imm16)                              \
276     T(HandleStPrivatePropertyImm8Imm16Imm16V8)                            \
277     T(HandleTestInImm8Imm16Imm16)                                         \
278     T(HandleDefineFieldByNameImm8Id16V8)                                  \
279     T(HandleDefinePropertyByNameImm8Id16V8)                               \
280     ASM_UNUSED_BC_STUB_LIST(T)                                            \
281     T(HandleCallRuntime)                                                  \
282     T(HandleDeprecated)                                                   \
283     T(HandleWide)                                                         \
284     T(HandleThrow)                                                        \
285     D(ExceptionHandler)
286 
287 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging
288 #define ASM_INTERPRETER_DEPRECATED_STUB_LIST(V, T, D)                     \
289     T(HandleDeprecatedLdlexenvPrefNone)                                   \
290     T(HandleDeprecatedPoplexenvPrefNone)                                  \
291     T(HandleDeprecatedGetiteratornextPrefV8V8)                            \
292     T(HandleDeprecatedCreatearraywithbufferPrefImm16)                     \
293     T(HandleDeprecatedCreateobjectwithbufferPrefImm16)                    \
294     T(HandleDeprecatedTonumberPrefV8)                                     \
295     T(HandleDeprecatedTonumericPrefV8)                                    \
296     T(HandleDeprecatedNegPrefV8)                                          \
297     T(HandleDeprecatedNotPrefV8)                                          \
298     T(HandleDeprecatedIncPrefV8)                                          \
299     T(HandleDeprecatedDecPrefV8)                                          \
300     D(HandleDeprecatedCallarg0PrefV8)                                     \
301     D(HandleDeprecatedCallarg1PrefV8V8)                                   \
302     D(HandleDeprecatedCallargs2PrefV8V8V8)                                \
303     D(HandleDeprecatedCallargs3PrefV8V8V8V8)                              \
304     D(HandleDeprecatedCallrangePrefImm16V8)                               \
305     D(HandleDeprecatedCallspreadPrefV8V8V8)                               \
306     D(HandleDeprecatedCallthisrangePrefImm16V8)                           \
307     T(HandleDeprecatedDefineclasswithbufferPrefId16Imm16Imm16V8V8)        \
308     T(HandleDeprecatedResumegeneratorPrefV8)                              \
309     T(HandleDeprecatedGetresumemodePrefV8)                                \
310     T(HandleDeprecatedGettemplateobjectPrefV8)                            \
311     T(HandleDeprecatedDelobjpropPrefV8V8)                                 \
312     T(HandleDeprecatedSuspendgeneratorPrefV8V8)                           \
313     T(HandleDeprecatedAsyncfunctionawaituncaughtPrefV8V8)                 \
314     T(HandleDeprecatedCopydatapropertiesPrefV8V8)                         \
315     T(HandleDeprecatedSetobjectwithprotoPrefV8V8)                         \
316     T(HandleDeprecatedLdobjbyvaluePrefV8V8)                               \
317     T(HandleDeprecatedLdsuperbyvaluePrefV8V8)                             \
318     T(HandleDeprecatedLdobjbyindexPrefV8Imm32)                            \
319     T(HandleDeprecatedAsyncfunctionresolvePrefV8V8V8)                     \
320     T(HandleDeprecatedAsyncfunctionrejectPrefV8V8V8)                      \
321     T(HandleDeprecatedStlexvarPrefImm4Imm4V8)                             \
322     T(HandleDeprecatedStlexvarPrefImm8Imm8V8)                             \
323     T(HandleDeprecatedStlexvarPrefImm16Imm16V8)                           \
324     T(HandleDeprecatedGetmodulenamespacePrefId32)                         \
325     T(HandleDeprecatedStmodulevarPrefId32)                                \
326     T(HandleDeprecatedLdobjbynamePrefId32V8)                              \
327     T(HandleDeprecatedLdsuperbynamePrefId32V8)                            \
328     T(HandleDeprecatedLdmodulevarPrefId32Imm8)                            \
329     T(HandleDeprecatedStconsttoglobalrecordPrefId32)                      \
330     T(HandleDeprecatedStlettoglobalrecordPrefId32)                        \
331     T(HandleDeprecatedStclasstoglobalrecordPrefId32)                      \
332     T(HandleDeprecatedLdhomeobjectPrefNone)                               \
333     T(HandleDeprecatedCreateobjecthavingmethodPrefImm16)                  \
334     T(HandleDeprecatedDynamicimportPrefV8)                                \
335     T(HandleDeprecatedAsyncgeneratorrejectPrefV8V8)
336 
337 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging
338 #define ASM_INTERPRETER_WIDE_STUB_LIST(V, T, D)                           \
339     T(HandleWideCreateobjectwithexcludedkeysPrefImm16V8V8)                \
340     T(HandleWideNewobjrangePrefImm16V8)                                   \
341     T(HandleWideNewlexenvPrefImm16)                                       \
342     T(HandleWideNewlexenvwithnamePrefImm16Id16)                           \
343     D(HandleWideCallrangePrefImm16V8)                                     \
344     D(HandleWideCallthisrangePrefImm16V8)                                 \
345     T(HandleWideSupercallthisrangePrefImm16V8)                            \
346     T(HandleWideSupercallarrowrangePrefImm16V8)                           \
347     T(HandleWideLdobjbyindexPrefImm32)                                    \
348     T(HandleWideStobjbyindexPrefV8Imm32)                                  \
349     T(HandleWideStownbyindexPrefV8Imm32)                                  \
350     T(HandleWideCopyrestargsPrefImm16)                                    \
351     T(HandleWideLdlexvarPrefImm16Imm16)                                   \
352     T(HandleWideStlexvarPrefImm16Imm16)                                   \
353     T(HandleWideGetmodulenamespacePrefImm16)                              \
354     T(HandleWideStmodulevarPrefImm16)                                     \
355     T(HandleWideLdlocalmodulevarPrefImm16)                                \
356     T(HandleWideLdexternalmodulevarPrefImm16)                             \
357     T(HandleWideLdpatchvarPrefImm16)                                      \
358     T(HandleWideStpatchvarPrefImm16)
359 
360 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging
361 #define ASM_INTERPRETER_THROW_STUB_LIST(V, T, D)                          \
362     T(HandleThrowPrefNone)                                                \
363     T(HandleThrowNotexistsPrefNone)                                       \
364     T(HandleThrowPatternnoncoerciblePrefNone)                             \
365     T(HandleThrowDeletesuperpropertyPrefNone)                             \
366     T(HandleThrowConstassignmentPrefV8)                                   \
367     T(HandleThrowIfnotobjectPrefV8)                                       \
368     T(HandleThrowUndefinedifholePrefV8V8)                                 \
369     T(HandleThrowIfsupernotcorrectcallPrefImm8)                           \
370     T(HandleThrowIfsupernotcorrectcallPrefImm16)                          \
371     T(HandleThrowUndefinedifholewithnamePrefId16)
372 
373 // V: Not Enabled, T: Enabled, D: Always Disable SingleStepDebugging
374 #define ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(V, T, D)                    \
375     T(HandleCallRuntimeNotifyConcurrentResultPrefNone)                    \
376     T(HandleCallRuntimeDefineFieldByValuePrefImm8V8V8)                    \
377     T(HandleCallRuntimeDefineFieldByIndexPrefImm8Imm32V8)                 \
378     T(HandleCallRuntimeToPropertyKeyPrefNone)                             \
379     T(HandleCallRuntimeCreatePrivatePropertyPrefImm16Id16)                \
380     T(HandleCallRuntimeDefinePrivatePropertyPrefImm8Imm16Imm16V8)         \
381     T(HandleCallRuntimeCallInitPrefImm8V8)                                \
382     T(HandleCallRuntimeDefineSendableClassPrefImm16Id16Id16Imm16V8)       \
383     T(HandleCallRuntimeLdSendableClassPrefImm16)                          \
384     T(HandleCallRuntimeLdsendableexternalmodulevarImm8)                   \
385     T(HandleCallRuntimeWideLdsendableexternalmodulevarPrefImm16)          \
386     T(HandleCallRuntimeNewSendableEnvImm8)                                \
387     T(HandleCallRuntimeNewSendableEnvImm16)                               \
388     T(HandleCallRuntimeStSendableVarImm4Imm4)                             \
389     T(HandleCallRuntimeStSendableVarImm8Imm8)                             \
390     T(HandleCallRuntimeStSendableVarImm16Imm16)                           \
391     T(HandleCallRuntimeLdSendableVarImm4Imm4)                             \
392     T(HandleCallRuntimeLdSendableVarImm8Imm8)                             \
393     T(HandleCallRuntimeLdSendableVarImm16Imm16)                           \
394     T(HandleCallRuntimeIstruePrefImm8)                                    \
395     T(HandleCallRuntimeIsfalsePrefImm8)                                   \
396     T(HandleCallRuntimeLdLazyModuleVarPrefImm8)                           \
397     T(HandleCallRuntimeWideLdLazyModuleVarPrefImm16)                      \
398     T(HandleCallRuntimeLdLazySendableModuleVarPrefImm8)                   \
399     T(HandleCallRuntimeWideLdLazySendableModuleVarPrefImm16)              \
400     T(HandleCallRuntimeSuperCallForwardAllArgsV8)                         \
401     T(HandleCallRuntimeLdsendablelocalmodulevarImm8)                      \
402     T(HandleCallRuntimeWideLdsendablelocalmodulevarPrefImm16)
403 
404 #define ASM_INTERPRETER_BC_HELPER_STUB_LIST(V)          \
405     V(SingleStepDebugging)                              \
406     V(BCDebuggerEntry)                                  \
407     V(BCDebuggerExceptionEntry)                         \
408     V(NewObjectRangeThrowException)                     \
409     V(ThrowStackOverflowException)                      \
410     V(HandleDefinefuncImm8Id16Imm8ColdReload)           \
411     V(HandleDefinefuncImm16Id16Imm8ColdReload)
412 
413 #define APPEND_JIT_SUFFIX(name, V) \
414     V(name##WithJitProf, name, SlotIDFormat::IMM8)
415 
416 #define APPEND_JIT_SUFFIX_IMM16(name, V) \
417     V(name##WithJitProf, name, SlotIDFormat::IMM16)
418 
419 #define ASM_INTERPRETER_BC_JIT_PROFILER_STUB_LIST(V)          \
420     ASM_INTERPRETER_BC_FUNC_HOT_JIT_PROFILER_STUB_LIST(V)     \
421 
422 #define ASM_INTERPRETER_BC_FUNC_HOT_JIT_PROFILER_STUB_LIST(V) \
423     APPEND_JIT_SUFFIX(HandleJmpImm8, V)                       \
424     APPEND_JIT_SUFFIX_IMM16(HandleJmpImm16, V)                \
425     APPEND_JIT_SUFFIX(HandleJmpImm32, V)                      \
426     APPEND_JIT_SUFFIX(HandleJeqzImm8, V)                      \
427     APPEND_JIT_SUFFIX_IMM16(HandleJeqzImm16, V)               \
428     APPEND_JIT_SUFFIX(HandleJeqzImm32, V)                     \
429     APPEND_JIT_SUFFIX(HandleJnezImm8, V)                      \
430     APPEND_JIT_SUFFIX_IMM16(HandleJnezImm16, V)               \
431     APPEND_JIT_SUFFIX(HandleJnezImm32, V)                     \
432     APPEND_JIT_SUFFIX(HandleReturn, V)                        \
433     APPEND_JIT_SUFFIX(HandleReturnundefined, V)               \
434     APPEND_JIT_SUFFIX(HandleSuspendgeneratorV8, V)            \
435     APPEND_JIT_SUFFIX(HandleAsyncgeneratorresolveV8V8V8, V)
436 
437 #define APPEND_SUFFIX(name, V) \
438     V(name##WithProf, name, SlotIDFormat::IMM8)
439 
440 #define APPEND_SUFFIX_IMM8_SECONDBC(name, V) \
441     V(name##WithProf, name, SlotIDFormat::PREF_IMM8)
442 
443 #define APPEND_SUFFIX_IMM16(name, V) \
444     V(name##WithProf, name, SlotIDFormat::IMM16)
445 
446 #define ASM_INTERPRETER_BC_PROFILER_STUB_LIST(V)          \
447     ASM_INTERPRETER_BC_TYPE_PROFILER_STUB_LIST(V)         \
448     ASM_INTERPRETER_BC_LAYOUT_PROFILER_STUB_LIST(V)       \
449     ASM_INTERPRETER_BC_FUNC_HOT_PROFILER_STUB_LIST(V)     \
450     ASM_INTERPRETER_BC_FUNC_COUNT_PROFILER_STUB_LIST(V)   \
451 
452 #define ASM_INTERPRETER_BC_TYPE_PROFILER_STUB_LIST(V) \
453     APPEND_SUFFIX(HandleAdd2Imm8V8, V)                \
454     APPEND_SUFFIX(HandleSub2Imm8V8, V)                \
455     APPEND_SUFFIX(HandleMul2Imm8V8, V)                \
456     APPEND_SUFFIX(HandleDiv2Imm8V8, V)                \
457     APPEND_SUFFIX(HandleMod2Imm8V8, V)                \
458     APPEND_SUFFIX(HandleShl2Imm8V8, V)                \
459     APPEND_SUFFIX(HandleShr2Imm8V8, V)                \
460     APPEND_SUFFIX(HandleAnd2Imm8V8, V)                \
461     APPEND_SUFFIX(HandleOr2Imm8V8, V)                 \
462     APPEND_SUFFIX(HandleXor2Imm8V8, V)                \
463     APPEND_SUFFIX(HandleAshr2Imm8V8, V)               \
464     APPEND_SUFFIX(HandleExpImm8V8, V)                 \
465     APPEND_SUFFIX(HandleNegImm8, V)                   \
466     APPEND_SUFFIX(HandleNotImm8, V)                   \
467     APPEND_SUFFIX(HandleEqImm8V8, V)                  \
468     APPEND_SUFFIX(HandleIncImm8, V)                   \
469     APPEND_SUFFIX(HandleDecImm8, V)                   \
470     APPEND_SUFFIX(HandleNoteqImm8V8, V)               \
471     APPEND_SUFFIX(HandleLessImm8V8, V)                \
472     APPEND_SUFFIX(HandleLesseqImm8V8, V)              \
473     APPEND_SUFFIX(HandleGreaterImm8V8, V)             \
474     APPEND_SUFFIX(HandleGreatereqImm8V8, V)           \
475     APPEND_SUFFIX(HandleStrictnoteqImm8V8, V)         \
476     APPEND_SUFFIX(HandleStricteqImm8V8, V)            \
477     APPEND_SUFFIX(HandleTonumericImm8, V)             \
478     APPEND_SUFFIX_IMM8_SECONDBC(HandleCallRuntimeIstruePrefImm8, V)       \
479     APPEND_SUFFIX_IMM8_SECONDBC(HandleCallRuntimeIsfalsePrefImm8, V)      \
480 
481 #define ASM_INTERPRETER_BC_FUNC_HOT_PROFILER_STUB_LIST(V) \
482     APPEND_SUFFIX(HandleJmpImm8, V)                       \
483     APPEND_SUFFIX_IMM16(HandleJmpImm16, V)                \
484     APPEND_SUFFIX(HandleJmpImm32, V)                      \
485     APPEND_SUFFIX(HandleJeqzImm8, V)                      \
486     APPEND_SUFFIX_IMM16(HandleJeqzImm16, V)               \
487     APPEND_SUFFIX(HandleJeqzImm32, V)                     \
488     APPEND_SUFFIX(HandleJnezImm8, V)                      \
489     APPEND_SUFFIX_IMM16(HandleJnezImm16, V)               \
490     APPEND_SUFFIX(HandleJnezImm32, V)                     \
491     APPEND_SUFFIX(HandleReturn, V)                        \
492     APPEND_SUFFIX(HandleReturnundefined, V)               \
493     APPEND_SUFFIX(HandleSuspendgeneratorV8, V)            \
494     APPEND_SUFFIX(HandleAsyncgeneratorresolveV8V8V8, V)
495 
496 #define ASM_INTERPRETER_BC_FUNC_COUNT_PROFILER_STUB_LIST(V)    \
497     APPEND_SUFFIX(HandleCallarg0Imm8, V)                       \
498     APPEND_SUFFIX(HandleCallarg1Imm8V8, V)                     \
499     APPEND_SUFFIX(HandleCallargs2Imm8V8V8, V)                  \
500     APPEND_SUFFIX(HandleCallargs3Imm8V8V8V8, V)                \
501     APPEND_SUFFIX(HandleCallrangeImm8Imm8V8, V)                \
502     APPEND_SUFFIX_IMM16(HandleWideCallrangePrefImm16V8, V)     \
503     APPEND_SUFFIX(HandleCallthisrangeImm8Imm8V8, V)            \
504     APPEND_SUFFIX_IMM16(HandleWideCallthisrangePrefImm16V8, V) \
505     APPEND_SUFFIX(HandleCallthis0Imm8V8, V)                    \
506     APPEND_SUFFIX(HandleCallthis1Imm8V8V8, V)                  \
507     APPEND_SUFFIX(HandleCallthis2Imm8V8V8V8, V)                \
508     APPEND_SUFFIX(HandleCallthis3Imm8V8V8V8V8, V)              \
509     APPEND_SUFFIX_IMM8_SECONDBC(HandleCallRuntimeCallInitPrefImm8V8, V)  \
510     APPEND_SUFFIX(HandleNewobjrangeImm8Imm8V8, V)              \
511     APPEND_SUFFIX_IMM16(HandleNewobjrangeImm16Imm8V8, V)       \
512     APPEND_SUFFIX_IMM16(HandleWideNewobjrangePrefImm16V8, V)   \
513     APPEND_SUFFIX(HandleInstanceofImm8V8, V)                   \
514     APPEND_SUFFIX(HandleGetiteratorImm8, V)                    \
515     APPEND_SUFFIX_IMM16(HandleGetiteratorImm16, V)             \
516     APPEND_SUFFIX(HandleTryldglobalbynameImm8Id16, V)          \
517     APPEND_SUFFIX_IMM16(HandleTryldglobalbynameImm16Id16, V)   \
518     APPEND_SUFFIX(HandleTrystglobalbynameImm8Id16, V)          \
519     APPEND_SUFFIX_IMM16(HandleTrystglobalbynameImm16Id16, V)   \
520     APPEND_SUFFIX_IMM16(HandleLdglobalvarImm16Id16, V)         \
521     APPEND_SUFFIX(HandleSupercallthisrangeImm8Imm8V8, V)
522 
523 #define ASM_INTERPRETER_BC_LAYOUT_PROFILER_STUB_LIST(V)                     \
524     APPEND_SUFFIX(HandleDefineclasswithbufferImm8Id16Id16Imm16V8, V)        \
525     APPEND_SUFFIX_IMM16(HandleDefineclasswithbufferImm16Id16Id16Imm16V8, V) \
526     APPEND_SUFFIX(HandleDefinefuncImm8Id16Imm8, V)                          \
527     APPEND_SUFFIX_IMM16(HandleDefinefuncImm16Id16Imm8, V)                   \
528     APPEND_SUFFIX(HandleDefinegettersetterbyvalueV8V8V8V8, V)               \
529     APPEND_SUFFIX(HandleCreateobjectwithbufferImm8Id16, V)                  \
530     APPEND_SUFFIX_IMM16(HandleCreateobjectwithbufferImm16Id16, V)           \
531     APPEND_SUFFIX(HandleCreatearraywithbufferImm8Id16, V)                   \
532     APPEND_SUFFIX_IMM16(HandleCreatearraywithbufferImm16Id16, V)            \
533     APPEND_SUFFIX(HandleCreateemptyobject, V)                               \
534     APPEND_SUFFIX(HandleCreateemptyarrayImm8, V)                            \
535     APPEND_SUFFIX_IMM16(HandleCreateemptyarrayImm16, V)                     \
536     APPEND_SUFFIX(HandleLdobjbynameImm8Id16, V)                             \
537     APPEND_SUFFIX_IMM16(HandleLdobjbynameImm16Id16, V)                      \
538     APPEND_SUFFIX_IMM16(HandleLdthisbynameImm16Id16, V)                     \
539     APPEND_SUFFIX(HandleLdthisbynameImm8Id16, V)                            \
540     APPEND_SUFFIX(HandleStthisbynameImm8Id16, V)                            \
541     APPEND_SUFFIX_IMM16(HandleStthisbynameImm16Id16, V)                     \
542     APPEND_SUFFIX(HandleStthisbyvalueImm8V8, V)                             \
543     APPEND_SUFFIX_IMM16(HandleStthisbyvalueImm16V8, V)                      \
544     APPEND_SUFFIX_IMM16(HandleStobjbyvalueImm16V8V8, V)                     \
545     APPEND_SUFFIX(HandleStobjbynameImm8Id16V8, V)                           \
546     APPEND_SUFFIX_IMM16(HandleStobjbynameImm16Id16V8, V)                    \
547     APPEND_SUFFIX(HandleDefineFieldByNameImm8Id16V8, V)                     \
548     APPEND_SUFFIX(HandleDefinePropertyByNameImm8Id16V8, V)                  \
549     APPEND_SUFFIX(HandleLdPrivatePropertyImm8Imm16Imm16, V)                 \
550     APPEND_SUFFIX(HandleStPrivatePropertyImm8Imm16Imm16V8, V)               \
551     APPEND_SUFFIX(HandleStobjbyvalueImm8V8V8, V)                            \
552     APPEND_SUFFIX(HandleStobjbyindexImm8V8Imm16, V)                         \
553     APPEND_SUFFIX_IMM16(HandleStobjbyindexImm16V8Imm16, V)                  \
554     APPEND_SUFFIX(HandleLdobjbyvalueImm8V8, V)                              \
555     APPEND_SUFFIX_IMM16(HandleLdobjbyvalueImm16V8, V)                       \
556     APPEND_SUFFIX_IMM16(HandleLdthisbyvalueImm16, V)                        \
557     APPEND_SUFFIX(HandleLdthisbyvalueImm8, V)                               \
558     APPEND_SUFFIX(HandleLdobjbyindexImm8Imm16, V)                           \
559     APPEND_SUFFIX_IMM16(HandleLdobjbyindexImm16Imm16, V)                    \
560     APPEND_SUFFIX(HandleWideLdobjbyindexPrefImm32, V)                       \
561     APPEND_SUFFIX(HandleWideStobjbyindexPrefV8Imm32, V)                     \
562     APPEND_SUFFIX_IMM16(HandleStownbyindexImm16V8Imm16, V)                  \
563     APPEND_SUFFIX(HandleStownbyindexImm8V8Imm16, V)                         \
564     APPEND_SUFFIX(HandleWideStownbyindexPrefV8Imm32, V)                     \
565     APPEND_SUFFIX_IMM16(HandleStownbyvaluewithnamesetImm16V8V8, V)          \
566     APPEND_SUFFIX(HandleStownbyvaluewithnamesetImm8V8V8, V)                 \
567     APPEND_SUFFIX(HandleStownbyvalueImm8V8V8, V)                            \
568     APPEND_SUFFIX_IMM16(HandleStownbyvalueImm16V8V8, V)                     \
569     APPEND_SUFFIX_IMM16(HandleStownbynamewithnamesetImm16Id16V8, V)         \
570     APPEND_SUFFIX(HandleStownbynamewithnamesetImm8Id16V8, V)                \
571     APPEND_SUFFIX_IMM16(HandleStownbynameImm16Id16V8, V)                    \
572     APPEND_SUFFIX(HandleStownbynameImm8Id16V8, V)
573 
574 #define INTERPRETER_DISABLE_SINGLE_STEP_DEBUGGING_BC_STUB_LIST(V)             \
575     ASM_INTERPRETER_BC_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V)           \
576     ASM_INTERPRETER_DEPRECATED_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V)   \
577     ASM_INTERPRETER_WIDE_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V)         \
578     ASM_INTERPRETER_THROW_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V)        \
579     ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(IGNORE_BC_STUB, IGNORE_BC_STUB, V)
580 
581 #define INTERPRETER_BC_STUB_LIST(V)                              \
582     ASM_INTERPRETER_BC_STUB_LIST(IGNORE_BC_STUB, V, V)           \
583     ASM_INTERPRETER_DEPRECATED_STUB_LIST(IGNORE_BC_STUB, V, V)   \
584     ASM_INTERPRETER_WIDE_STUB_LIST(IGNORE_BC_STUB, V, V)         \
585     ASM_INTERPRETER_THROW_STUB_LIST(IGNORE_BC_STUB, V, V)        \
586     ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(IGNORE_BC_STUB, V, V)
587 
588 #define ASM_INTERPRETER_BC_STUB_ID_LIST(V) \
589     ASM_INTERPRETER_BC_STUB_LIST(V, V, V)
590 
591 #define ASM_INTERPRETER_SECOND_BC_STUB_ID_LIST(V)   \
592     ASM_INTERPRETER_WIDE_STUB_LIST(V, V, V)         \
593     ASM_INTERPRETER_THROW_STUB_LIST(V, V, V)        \
594     ASM_INTERPRETER_DEPRECATED_STUB_LIST(V, V, V)   \
595     ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(V, V, V)
596 
597 #define ASM_INTERPRETER_BC_STW_COPY_STUB_LIST(V) \
598     INTERPRETER_BC_STUB_LIST(V)
599 
600 class BytecodeStubCSigns {
601 public:
602     // is uint8 max
603     static constexpr size_t LAST_VALID_OPCODE = 0xFF;
604     // all valid stub, include normal and helper stub
605     enum ValidID {
606 #define DEF_VALID_BC_STUB_ID(name) name,
607         INTERPRETER_BC_STUB_LIST(DEF_VALID_BC_STUB_ID)
608         ASM_INTERPRETER_BC_HELPER_STUB_LIST(DEF_VALID_BC_STUB_ID)
609 #undef DEF_VALID_BC_STUB_ID
610 #define DEF_VALID_BC_STUB_ID(name, ...) name,
611         ASM_INTERPRETER_BC_PROFILER_STUB_LIST(DEF_VALID_BC_STUB_ID)
612 #undef DEF_VALID_BC_STUB_ID
613 #define DEF_VALID_BC_STUB_ID(name, ...) name,
614         ASM_INTERPRETER_BC_JIT_PROFILER_STUB_LIST(DEF_VALID_BC_STUB_ID)
615 #undef DEF_VALID_BC_STUB_ID
616 #define DEF_VALID_BC_STUB_ID(name) name##StwCopy,
617         ASM_INTERPRETER_BC_STW_COPY_STUB_LIST(DEF_VALID_BC_STUB_ID)
618 #undef DEF_VALID_BC_STUB_ID
619         NUM_OF_VALID_STUBS,
620         VID_STW_COPY_START = HandleLdundefinedStwCopy,
621         VID_STW_COPY_END = NUM_OF_VALID_STUBS,
622         VID_NORMAL_START = 0,
623         VID_NORMAL_END = VID_STW_COPY_START
624     };
625 
626 #define DEF_BC_STUB_ID(name) PREF_ID_##name,
627     enum WideID {
628         ASM_INTERPRETER_WIDE_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID)
629         NUM_OF_WIDE_STUBS
630     };
631     enum ThrowID {
632         ASM_INTERPRETER_THROW_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID)
633         NUM_OF_THROW_STUBS
634     };
635     enum DeprecatedID {
636         ASM_INTERPRETER_DEPRECATED_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID)
637         NUM_OF_DEPRECATED_STUBS
638     };
639     enum CallRuntimeID {
640         ASM_INTERPRETER_CALLRUNTIME_STUB_LIST(DEF_BC_STUB_ID, DEF_BC_STUB_ID, DEF_BC_STUB_ID)
641         NUM_OF_CALLRUNTIME_STUBS
642     };
643 #undef DEF_BC_STUB_ID
644 
645 #define DEF_BC_STUB_ID(name) ID_##name,
646     enum ID {
647         ASM_INTERPRETER_BC_STUB_ID_LIST(DEF_BC_STUB_ID)
648         NUM_OF_ALL_NORMAL_STUBS,
649         lastOpcode = LAST_VALID_OPCODE, // last Opcode is max opcode size
650         ASM_INTERPRETER_SECOND_BC_STUB_ID_LIST(DEF_BC_STUB_ID)
651         ASM_INTERPRETER_BC_HELPER_STUB_LIST(DEF_BC_STUB_ID)
652 #undef DEF_BC_STUB_ID
653 #define DEF_BC_STUB_ID(name, ...) ID_##name,
654         ASM_INTERPRETER_BC_PROFILER_STUB_LIST(DEF_BC_STUB_ID)
655 #undef DEF_BC_STUB_ID
656 #define DEF_BC_STUB_ID(name, ...) ID_##name,
657         ASM_INTERPRETER_BC_JIT_PROFILER_STUB_LIST(DEF_BC_STUB_ID)
658 #undef DEF_BC_STUB_ID
659 #define DEF_BC_STUB_ID(name) ID_##name##StwCopy,
660         ASM_INTERPRETER_BC_STW_COPY_STUB_LIST(DEF_BC_STUB_ID)
661         NUM_OF_STUBS,
662         ID_Wide_Start = lastOpcode + 1,
663         ID_Throw_Start = ID_Wide_Start + NUM_OF_WIDE_STUBS,
664         ID_Deprecated_Start = ID_Throw_Start + NUM_OF_THROW_STUBS,
665         ID_CallRuntime_Start = ID_Deprecated_Start + NUM_OF_DEPRECATED_STUBS
666     };
667 #undef DEF_BC_STUB_ID
668 
669     static void Initialize();
670 
671     static void GetCSigns(std::vector<const CallSignature*>& outCSigns);
672     static void GetNormalCSigns(std::vector<const CallSignature*>& outCSigns);
673     static void GetStwCopyCSigns(std::vector<const CallSignature*>& outCSigns);
674 
Get(size_t index)675     static const CallSignature* Get(size_t index)
676     {
677         ASSERT(index < NUM_OF_VALID_STUBS);
678         return &callSigns_[index];
679     }
680 
BCDebuggerHandler()681     static const CallSignature* BCDebuggerHandler()
682     {
683         return &bcDebuggerHandlerCSign_;
684     }
685 
BCHandler()686     static const CallSignature* BCHandler()
687     {
688         return &bcHandlerCSign_;
689     }
690 
691 private:
692     static CallSignature callSigns_[NUM_OF_VALID_STUBS];
693     static CallSignature bcHandlerCSign_;
694     static CallSignature bcDebuggerHandlerCSign_;
695 };
696 
697 enum class InterpreterHandlerInputs : size_t {
698     GLUE = 0,
699     SP,
700     PC,
701     CONSTPOOL,
702     PROFILE_TYPE_INFO,
703     ACC,
704     HOTNESS_COUNTER,
705     NUM_OF_INPUTS
706 };
707 
708 enum class CallDispatchInputs : size_t {
709     GLUE = 0,
710     SP,
711     CALL_TARGET,
712     METHOD,
713     CALL_FIELD,
714     ARG0,
715     ARG1,
716     ARG2,
717     ARG3,
718     NUM_OF_INPUTS,
719 
720     ARGC = ARG0,
721     ARGV = ARG1,
722 };
723 
724 #define BYTECODE_STUB_END_ID BytecodeStubCSigns::ID_ExceptionHandler
725 #define BCSTUB_ID(name) kungfu::BytecodeStubCSigns::ID_##name
726 }  // namespace panda::ecmascript::kungfu
727 #endif  // ECMASCRIPT_COMPILER_BC_CALL_SIGNATURE_H
728