• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "ecmascript/compiler/trampoline/x64/common_call.h"
17 
18 namespace panda::ecmascript::x64 {
19 #define __ assembler->
20 
21 /* other->baseline */
CallArg0AndCheckToBaseline(ExtendedAssembler * assembler)22 void BaselineCall::CallArg0AndCheckToBaseline(ExtendedAssembler *assembler)
23 {
24     __ BindAssemblerStub(RTSTUB_ID(CallArg0AndCheckToBaseline));
25     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG0,
26                                           FrameTransitionType::OTHER_TO_BASELINE_CHECK);
27 }
28 
CallArg1AndCheckToBaseline(ExtendedAssembler * assembler)29 void BaselineCall::CallArg1AndCheckToBaseline(ExtendedAssembler *assembler)
30 {
31     __ BindAssemblerStub(RTSTUB_ID(CallArg1AndCheckToBaseline));
32     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG1,
33                                           FrameTransitionType::OTHER_TO_BASELINE_CHECK);
34 }
35 
CallArgs2AndCheckToBaseline(ExtendedAssembler * assembler)36 void BaselineCall::CallArgs2AndCheckToBaseline(ExtendedAssembler *assembler)
37 {
38     __ BindAssemblerStub(RTSTUB_ID(CallArgs2AndCheckToBaseline));
39     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG2,
40                                           FrameTransitionType::OTHER_TO_BASELINE_CHECK);
41 }
42 
CallArgs3AndCheckToBaseline(ExtendedAssembler * assembler)43 void BaselineCall::CallArgs3AndCheckToBaseline(ExtendedAssembler *assembler)
44 {
45     __ BindAssemblerStub(RTSTUB_ID(CallArgs3AndCheckToBaseline));
46     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG3,
47                                           FrameTransitionType::OTHER_TO_BASELINE_CHECK);
48 }
49 
CallThisArg0AndCheckToBaseline(ExtendedAssembler * assembler)50 void BaselineCall::CallThisArg0AndCheckToBaseline(ExtendedAssembler *assembler)
51 {
52     __ BindAssemblerStub(RTSTUB_ID(CallThisArg0AndCheckToBaseline));
53     AsmInterpreterCall::JSCallCommonEntry(
54         assembler, JSCallMode::CALL_THIS_ARG0, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
55 }
56 
CallThisArg1AndCheckToBaseline(ExtendedAssembler * assembler)57 void BaselineCall::CallThisArg1AndCheckToBaseline(ExtendedAssembler *assembler)
58 {
59     __ BindAssemblerStub(RTSTUB_ID(CallThisArg1AndCheckToBaseline));
60     AsmInterpreterCall::JSCallCommonEntry(
61         assembler, JSCallMode::CALL_THIS_ARG1, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
62 }
63 
CallThisArgs2AndCheckToBaseline(ExtendedAssembler * assembler)64 void BaselineCall::CallThisArgs2AndCheckToBaseline(ExtendedAssembler *assembler)
65 {
66     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs2AndCheckToBaseline));
67     AsmInterpreterCall::JSCallCommonEntry(
68         assembler, JSCallMode::CALL_THIS_ARG2, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
69 }
70 
CallThisArgs3AndCheckToBaseline(ExtendedAssembler * assembler)71 void BaselineCall::CallThisArgs3AndCheckToBaseline(ExtendedAssembler *assembler)
72 {
73     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs3AndCheckToBaseline));
74     AsmInterpreterCall::JSCallCommonEntry(
75         assembler, JSCallMode::CALL_THIS_ARG3, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
76 }
77 
CallRangeAndCheckToBaseline(ExtendedAssembler * assembler)78 void BaselineCall::CallRangeAndCheckToBaseline(ExtendedAssembler *assembler)
79 {
80     __ BindAssemblerStub(RTSTUB_ID(CallRangeAndCheckToBaseline));
81     AsmInterpreterCall::JSCallCommonEntry(
82         assembler, JSCallMode::CALL_WITH_ARGV, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
83 }
84 
CallNewAndCheckToBaseline(ExtendedAssembler * assembler)85 void BaselineCall::CallNewAndCheckToBaseline(ExtendedAssembler *assembler)
86 {
87     __ BindAssemblerStub(RTSTUB_ID(CallNewAndCheckToBaseline));
88     AsmInterpreterCall::JSCallCommonEntry(
89         assembler, JSCallMode::CALL_CONSTRUCTOR_WITH_ARGV, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
90 }
91 
SuperCallAndCheckToBaseline(ExtendedAssembler * assembler)92 void BaselineCall::SuperCallAndCheckToBaseline(ExtendedAssembler *assembler)
93 {
94     __ BindAssemblerStub(RTSTUB_ID(SuperCallAndCheckToBaseline));
95     AsmInterpreterCall::JSCallCommonEntry(
96         assembler, JSCallMode::SUPER_CALL_WITH_ARGV, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
97 }
98 
CallThisRangeAndCheckToBaseline(ExtendedAssembler * assembler)99 void BaselineCall::CallThisRangeAndCheckToBaseline(ExtendedAssembler *assembler)
100 {
101     __ BindAssemblerStub(RTSTUB_ID(CallThisRangeAndCheckToBaseline));
102     AsmInterpreterCall::JSCallCommonEntry(
103         assembler, JSCallMode::CALL_THIS_WITH_ARGV, FrameTransitionType::OTHER_TO_BASELINE_CHECK);
104 }
105 
106 /* baseline->other */
CallArg0AndDispatchFromBaseline(ExtendedAssembler * assembler)107 void BaselineCall::CallArg0AndDispatchFromBaseline(ExtendedAssembler *assembler)
108 {
109     __ BindAssemblerStub(RTSTUB_ID(CallArg0AndDispatchFromBaseline));
110     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG0, FrameTransitionType::BASELINE_TO_OTHER);
111 }
112 
CallArg1AndDispatchFromBaseline(ExtendedAssembler * assembler)113 void BaselineCall::CallArg1AndDispatchFromBaseline(ExtendedAssembler *assembler)
114 {
115     __ BindAssemblerStub(RTSTUB_ID(CallArg1AndDispatchFromBaseline));
116     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG1, FrameTransitionType::BASELINE_TO_OTHER);
117 }
118 
CallArgs2AndDispatchFromBaseline(ExtendedAssembler * assembler)119 void BaselineCall::CallArgs2AndDispatchFromBaseline(ExtendedAssembler *assembler)
120 {
121     __ BindAssemblerStub(RTSTUB_ID(CallArgs2AndDispatchFromBaseline));
122     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG2, FrameTransitionType::BASELINE_TO_OTHER);
123 }
124 
CallArgs3AndDispatchFromBaseline(ExtendedAssembler * assembler)125 void BaselineCall::CallArgs3AndDispatchFromBaseline(ExtendedAssembler *assembler)
126 {
127     __ BindAssemblerStub(RTSTUB_ID(CallArgs3AndDispatchFromBaseline));
128     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG3, FrameTransitionType::BASELINE_TO_OTHER);
129 }
130 
CallThisArg0AndDispatchFromBaseline(ExtendedAssembler * assembler)131 void BaselineCall::CallThisArg0AndDispatchFromBaseline(ExtendedAssembler *assembler)
132 {
133     __ BindAssemblerStub(RTSTUB_ID(CallThisArg0AndDispatchFromBaseline));
134     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG0,
135                                           FrameTransitionType::BASELINE_TO_OTHER);
136 }
137 
CallThisArg1AndDispatchFromBaseline(ExtendedAssembler * assembler)138 void BaselineCall::CallThisArg1AndDispatchFromBaseline(ExtendedAssembler *assembler)
139 {
140     __ BindAssemblerStub(RTSTUB_ID(CallThisArg1AndDispatchFromBaseline));
141     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG1,
142                                           FrameTransitionType::BASELINE_TO_OTHER);
143 }
144 
CallThisArgs2AndDispatchFromBaseline(ExtendedAssembler * assembler)145 void BaselineCall::CallThisArgs2AndDispatchFromBaseline(ExtendedAssembler *assembler)
146 {
147     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs2AndDispatchFromBaseline));
148     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG2,
149                                           FrameTransitionType::BASELINE_TO_OTHER);
150 }
151 
CallThisArgs3AndDispatchFromBaseline(ExtendedAssembler * assembler)152 void BaselineCall::CallThisArgs3AndDispatchFromBaseline(ExtendedAssembler *assembler)
153 {
154     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs3AndDispatchFromBaseline));
155     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG3,
156                                           FrameTransitionType::BASELINE_TO_OTHER);
157 }
158 
CallRangeAndDispatchFromBaseline(ExtendedAssembler * assembler)159 void BaselineCall::CallRangeAndDispatchFromBaseline(ExtendedAssembler *assembler)
160 {
161     __ BindAssemblerStub(RTSTUB_ID(CallRangeAndDispatchFromBaseline));
162     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_WITH_ARGV,
163                                           FrameTransitionType::BASELINE_TO_OTHER);
164 }
165 
CallNewAndDispatchFromBaseline(ExtendedAssembler * assembler)166 void BaselineCall::CallNewAndDispatchFromBaseline(ExtendedAssembler *assembler)
167 {
168     __ BindAssemblerStub(RTSTUB_ID(CallNewAndDispatchFromBaseline));
169     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_CONSTRUCTOR_WITH_ARGV,
170                                           FrameTransitionType::BASELINE_TO_OTHER);
171 }
172 
SuperCallAndDispatchFromBaseline(ExtendedAssembler * assembler)173 void BaselineCall::SuperCallAndDispatchFromBaseline(ExtendedAssembler *assembler)
174 {
175     __ BindAssemblerStub(RTSTUB_ID(SuperCallAndDispatchFromBaseline));
176     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::SUPER_CALL_WITH_ARGV,
177                                           FrameTransitionType::BASELINE_TO_OTHER);
178 }
179 
CallThisRangeAndDispatchFromBaseline(ExtendedAssembler * assembler)180 void BaselineCall::CallThisRangeAndDispatchFromBaseline(ExtendedAssembler *assembler)
181 {
182     __ BindAssemblerStub(RTSTUB_ID(CallThisRangeAndDispatchFromBaseline));
183     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_WITH_ARGV,
184                                           FrameTransitionType::BASELINE_TO_OTHER);
185 }
186 
187 /* baseline->baseline */
CallArg0AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)188 void BaselineCall::CallArg0AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
189 {
190     __ BindAssemblerStub(RTSTUB_ID(CallArg0AndCheckToBaselineFromBaseline));
191     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG0,
192                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
193 }
194 
CallArg1AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)195 void BaselineCall::CallArg1AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
196 {
197     __ BindAssemblerStub(RTSTUB_ID(CallArg1AndCheckToBaselineFromBaseline));
198     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG1,
199                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
200 }
201 
CallArgs2AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)202 void BaselineCall::CallArgs2AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
203 {
204     __ BindAssemblerStub(RTSTUB_ID(CallArgs2AndCheckToBaselineFromBaseline));
205     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG2,
206                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
207 }
208 
CallArgs3AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)209 void BaselineCall::CallArgs3AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
210 {
211     __ BindAssemblerStub(RTSTUB_ID(CallArgs3AndCheckToBaselineFromBaseline));
212     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_ARG3,
213                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
214 }
215 
CallRangeAndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)216 void BaselineCall::CallRangeAndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
217 {
218     __ BindAssemblerStub(RTSTUB_ID(CallRangeAndCheckToBaselineFromBaseline));
219     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_WITH_ARGV,
220                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
221 }
222 
CallThisRangeAndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)223 void BaselineCall::CallThisRangeAndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
224 {
225     __ BindAssemblerStub(RTSTUB_ID(CallThisRangeAndCheckToBaselineFromBaseline));
226     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_WITH_ARGV,
227                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
228 }
229 
CallThisArg0AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)230 void BaselineCall::CallThisArg0AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
231 {
232     __ BindAssemblerStub(RTSTUB_ID(CallThisArg0AndCheckToBaselineFromBaseline));
233     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG0,
234                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
235 }
236 
CallThisArg1AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)237 void BaselineCall::CallThisArg1AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
238 {
239     __ BindAssemblerStub(RTSTUB_ID(CallThisArg1AndCheckToBaselineFromBaseline));
240     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG1,
241                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
242 }
243 
CallThisArgs2AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)244 void BaselineCall::CallThisArgs2AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
245 {
246     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs2AndCheckToBaselineFromBaseline));
247     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG2,
248                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
249 }
250 
CallThisArgs3AndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)251 void BaselineCall::CallThisArgs3AndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
252 {
253     __ BindAssemblerStub(RTSTUB_ID(CallThisArgs3AndCheckToBaselineFromBaseline));
254     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_THIS_ARG3,
255                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
256 }
257 
CallNewAndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)258 void BaselineCall::CallNewAndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
259 {
260     __ BindAssemblerStub(RTSTUB_ID(CallNewAndCheckToBaselineFromBaseline));
261     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::CALL_CONSTRUCTOR_WITH_ARGV,
262                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
263 }
264 
SuperCallAndCheckToBaselineFromBaseline(ExtendedAssembler * assembler)265 void BaselineCall::SuperCallAndCheckToBaselineFromBaseline(ExtendedAssembler *assembler)
266 {
267     __ BindAssemblerStub(RTSTUB_ID(SuperCallAndCheckToBaselineFromBaseline));
268     AsmInterpreterCall::JSCallCommonEntry(assembler, JSCallMode::SUPER_CALL_WITH_ARGV,
269                                           FrameTransitionType::BASELINE_TO_BASELINE_CHECK);
270 }
271 
GetBaselineBuiltinFp(ExtendedAssembler * assembler)272 void BaselineCall::GetBaselineBuiltinFp(ExtendedAssembler *assembler)
273 {
274     __ BindAssemblerStub(RTSTUB_ID(GetBaselineBuiltinFp));
275     __ Movq(rbp, rax);
276     __ Ret();
277 }
278 #undef __
279 }  // namespace panda::ecmascript::x64