1 /**
2 * Copyright (c) 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 #include <cassert>
17
18 #include "libabckit/include/c/abckit.h"
19 #include "libabckit/include/c/ir_core.h"
20 #include "libabckit/include/c/isa/isa_dynamic.h"
21
22 #include "libabckit/src/metadata_inspect_impl.h"
23 #include "libabckit/src/helpers_common.h"
24 #include "libabckit/src/ir_impl.h"
25 #include "libabckit/src/adapter_static/ir_static.h"
26
27 #include "libabckit/src/macros.h"
28
29 #include <iostream>
30
31 #include "isa_dynamic_impl_instr.h"
32
33 namespace libabckit {
34
35 AbckitIsaApiDynamic g_isaApiDynamicImpl = {
36 IgetModule,
37 IsetModule,
38 IgetDYNAMICConditionCode,
39 IsetDYNAMICConditionCode,
40 IgetDYNAMICOpcode,
41 IgetImportDescriptor,
42 IsetImportDescriptor,
43 IgetExportDescriptor,
44 IsetExportDescriptor,
45 IcreateDYNAMICLoadString,
46 IcreateDYNAMICLdnan,
47 IcreateDYNAMICLdinfinity,
48 IcreateDYNAMICLdundefined,
49 IcreateDYNAMICLdnull,
50 IcreateDYNAMICLdsymbol,
51 IcreateDYNAMICLdglobal,
52 IcreateDYNAMICLdtrue,
53 IcreateDYNAMICLdfalse,
54 IcreateDYNAMICLdhole,
55 IcreateDYNAMICLdnewtarget,
56 IcreateDYNAMICLdthis,
57 IcreateDYNAMICPoplexenv,
58 IcreateDYNAMICGetunmappedargs,
59 IcreateDYNAMICAsyncfunctionenter,
60 IcreateDYNAMICLdfunction,
61 IcreateDYNAMICDebugger,
62 IcreateDYNAMICGetpropiterator,
63 IcreateDYNAMICGetiterator,
64 IcreateDYNAMICGetasynciterator,
65 IcreateDYNAMICLdprivateproperty,
66 IcreateDYNAMICStprivateproperty,
67 IcreateDYNAMICTestin,
68 IcreateDYNAMICDefinefieldbyname,
69 IcreateDYNAMICDefinepropertybyname,
70 IcreateDYNAMICCreateemptyobject,
71 IcreateDYNAMICCreateemptyarray,
72 IcreateDYNAMICCreategeneratorobj,
73 IcreateDYNAMICCreateiterresultobj,
74 IcreateDYNAMICCreateobjectwithexcludedkeys,
75 IcreateDYNAMICWideCreateobjectwithexcludedkeys,
76 IcreateDYNAMICCreatearraywithbuffer,
77 IcreateDYNAMICCreateobjectwithbuffer,
78 IcreateDYNAMICNewobjapply,
79 IcreateDYNAMICNewobjrange,
80 IcreateDYNAMICWideNewobjrange,
81 IcreateDYNAMICNewlexenv,
82 IcreateDYNAMICWideNewlexenv,
83 IcreateDYNAMICNewlexenvwithname,
84 IcreateDYNAMICWideNewlexenvwithname,
85 IcreateDYNAMICCreateasyncgeneratorobj,
86 IcreateDYNAMICAsyncgeneratorresolve,
87 IcreateDYNAMICAdd2,
88 IcreateDYNAMICSub2,
89 IcreateDYNAMICMul2,
90 IcreateDYNAMICDiv2,
91 IcreateDYNAMICMod2,
92 IcreateDYNAMICEq,
93 IcreateDYNAMICNoteq,
94 IcreateDYNAMICLess,
95 IcreateDYNAMICLesseq,
96 IcreateDYNAMICGreater,
97 IcreateDYNAMICGreatereq,
98 IcreateDYNAMICShl2,
99 IcreateDYNAMICShr2,
100 IcreateDYNAMICAshr2,
101 IcreateDYNAMICAnd2,
102 IcreateDYNAMICOr2,
103 IcreateDYNAMICXor2,
104 IcreateDYNAMICExp,
105 IcreateDYNAMICTypeof,
106 IcreateDYNAMICTonumber,
107 IcreateDYNAMICTonumeric,
108 IcreateDYNAMICNeg,
109 IcreateDYNAMICNot,
110 IcreateDYNAMICInc,
111 IcreateDYNAMICDec,
112 IcreateDYNAMICIstrue,
113 IcreateDYNAMICIsfalse,
114 IcreateDYNAMICIsin,
115 IcreateDYNAMICInstanceof,
116 IcreateDYNAMICStrictnoteq,
117 IcreateDYNAMICStricteq,
118 IcreateDYNAMICCallruntimeNotifyconcurrentresult,
119 IcreateDYNAMICCallruntimeDefinefieldbyvalue,
120 IcreateDYNAMICCallruntimeDefinefieldbyindex,
121 IcreateDYNAMICCallruntimeTopropertykey,
122 IcreateDYNAMICCallruntimeCreateprivateproperty,
123 IcreateDYNAMICCallruntimeDefineprivateproperty,
124 IcreateDYNAMICCallruntimeCallinit,
125 IcreateDYNAMICCallruntimeDefinesendableclass,
126 IcreateDYNAMICCallruntimeLdsendableclass,
127 IcreateDYNAMICCallruntimeLdsendableexternalmodulevar,
128 IcreateDYNAMICCallruntimeWideldsendableexternalmodulevar,
129 IcreateDYNAMICCallruntimeNewsendableenv,
130 IcreateDYNAMICCallruntimeWidenewsendableenv,
131 IcreateDYNAMICCallruntimeStsendablevar,
132 IcreateDYNAMICCallruntimeWidestsendablevar,
133 IcreateDYNAMICCallruntimeLdsendablevar,
134 IcreateDYNAMICCallruntimeWideldsendablevar,
135 IcreateDYNAMICCallruntimeIstrue,
136 IcreateDYNAMICCallruntimeIsfalse,
137 IcreateDYNAMICThrow,
138 IcreateDYNAMICThrowNotexists,
139 IcreateDYNAMICThrowPatternnoncoercible,
140 IcreateDYNAMICThrowDeletesuperproperty,
141 IcreateDYNAMICThrowConstassignment,
142 IcreateDYNAMICThrowIfnotobject,
143 IcreateDYNAMICThrowUndefinedifhole,
144 IcreateDYNAMICThrowIfsupernotcorrectcall,
145 IcreateDYNAMICThrowUndefinedifholewithname,
146 IcreateDYNAMICCallarg0,
147 IcreateDYNAMICCallarg1,
148 IcreateDYNAMICCallargs2,
149 IcreateDYNAMICCallargs3,
150 IcreateDYNAMICCallrange,
151 IcreateDYNAMICWideCallrange,
152 IcreateDYNAMICSupercallspread,
153 IcreateDYNAMICApply,
154 IcreateDYNAMICCallthis0,
155 IcreateDYNAMICCallthis1,
156 IcreateDYNAMICCallthis2,
157 IcreateDYNAMICCallthis3,
158 IcreateDYNAMICCallthisrange,
159 IcreateDYNAMICWideCallthisrange,
160 IcreateDYNAMICSupercallthisrange,
161 IcreateDYNAMICWideSupercallthisrange,
162 IcreateDYNAMICSupercallarrowrange,
163 IcreateDYNAMICWideSupercallarrowrange,
164 IcreateDYNAMICDefinegettersetterbyvalue,
165 IcreateDYNAMICDefinefunc,
166 IcreateDYNAMICDefinemethod,
167 IcreateDYNAMICDefineclasswithbuffer,
168 IcreateDYNAMICResumegenerator,
169 IcreateDYNAMICGetresumemode,
170 IcreateDYNAMICGettemplateobject,
171 IcreateDYNAMICGetnextpropname,
172 IcreateDYNAMICDelobjprop,
173 IcreateDYNAMICSuspendgenerator,
174 IcreateDYNAMICAsyncfunctionawaituncaught,
175 IcreateDYNAMICCopydataproperties,
176 IcreateDYNAMICStarrayspread,
177 IcreateDYNAMICSetobjectwithproto,
178 IcreateDYNAMICLdobjbyvalue,
179 IcreateDYNAMICStobjbyvalue,
180 IcreateDYNAMICStownbyvalue,
181 IcreateDYNAMICLdsuperbyvalue,
182 IcreateDYNAMICStsuperbyvalue,
183 IcreateDYNAMICLdobjbyindex,
184 IcreateDYNAMICWideLdobjbyindex,
185 IcreateDYNAMICStobjbyindex,
186 IcreateDYNAMICWideStobjbyindex,
187 IcreateDYNAMICStownbyindex,
188 IcreateDYNAMICWideStownbyindex,
189 IcreateDYNAMICAsyncfunctionresolve,
190 IcreateDYNAMICAsyncfunctionreject,
191 IcreateDYNAMICCopyrestargs,
192 IcreateDYNAMICWideCopyrestargs,
193 IcreateDYNAMICLdlexvar,
194 IcreateDYNAMICWideLdlexvar,
195 IcreateDYNAMICStlexvar,
196 IcreateDYNAMICWideStlexvar,
197 IcreateDYNAMICGetmodulenamespace,
198 IcreateDYNAMICWideGetmodulenamespace,
199 IcreateDYNAMICStmodulevar,
200 IcreateDYNAMICWideStmodulevar,
201 IcreateDYNAMICTryldglobalbyname,
202 IcreateDYNAMICTrystglobalbyname,
203 IcreateDYNAMICLdglobalvar,
204 IcreateDYNAMICStglobalvar,
205 IcreateDYNAMICLdobjbyname,
206 IcreateDYNAMICStobjbyname,
207 IcreateDYNAMICStownbyname,
208 IcreateDYNAMICLdsuperbyname,
209 IcreateDYNAMICStsuperbyname,
210 IcreateDYNAMICLdlocalmodulevar,
211 IcreateDYNAMICWideLdlocalmodulevar,
212 IcreateDYNAMICLdexternalmodulevar,
213 IcreateDYNAMICWideLdexternalmodulevar,
214 IcreateDYNAMICStownbyvaluewithnameset,
215 IcreateDYNAMICStownbynamewithnameset,
216 IcreateDYNAMICLdbigint,
217 IcreateDYNAMICLdthisbyname,
218 IcreateDYNAMICStthisbyname,
219 IcreateDYNAMICLdthisbyvalue,
220 IcreateDYNAMICStthisbyvalue,
221 IcreateDYNAMICWideLdpatchvar,
222 IcreateDYNAMICWideStpatchvar,
223 IcreateDYNAMICDynamicimport,
224 IcreateDYNAMICAsyncgeneratorreject,
225 IcreateDYNAMICSetgeneratorstate,
226 IcreateDYNAMICReturn,
227 IcreateDYNAMICReturnundefined,
228 IcreateDYNAMICIf,
229 };
230
231 } // namespace libabckit
232
233 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
234 #include "./mock/abckit_mock.h"
235 #endif
236
AbckitGetIsaApiDynamicImpl(AbckitApiVersion version)237 extern "C" AbckitIsaApiDynamic const *AbckitGetIsaApiDynamicImpl(AbckitApiVersion version)
238 {
239 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
240 return AbckitGetMockIsaApiDynamicImpl(version);
241 #endif
242 switch (version) {
243 case ABCKIT_VERSION_RELEASE_1_0_0:
244 return &libabckit::g_isaApiDynamicImpl;
245 default:
246 libabckit::statuses::SetLastError(ABCKIT_STATUS_UNKNOWN_API_VERSION);
247 return nullptr;
248 }
249 }
250