blob: c6ae37e733a9b5e21c99017be1f980922d68d768 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2012 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00005#include "src/arm64/interface-descriptors-arm64.h"
Ben Murdochb8a8cc12014-11-26 15:28:44 +00006
7#if V8_TARGET_ARCH_ARM64
8
9#include "src/interface-descriptors.h"
10
11namespace v8 {
12namespace internal {
13
14const Register CallInterfaceDescriptor::ContextRegister() { return cp; }
15
16
17const Register LoadDescriptor::ReceiverRegister() { return x1; }
18const Register LoadDescriptor::NameRegister() { return x2; }
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000019const Register LoadDescriptor::SlotRegister() { return x0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000020
21
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000022const Register LoadWithVectorDescriptor::VectorRegister() { return x3; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000023
24
25const Register StoreDescriptor::ReceiverRegister() { return x1; }
26const Register StoreDescriptor::NameRegister() { return x2; }
27const Register StoreDescriptor::ValueRegister() { return x0; }
28
29
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030const Register VectorStoreICTrampolineDescriptor::SlotRegister() { return x4; }
31
32
33const Register VectorStoreICDescriptor::VectorRegister() { return x3; }
34
35
36const Register VectorStoreTransitionDescriptor::SlotRegister() { return x4; }
37const Register VectorStoreTransitionDescriptor::VectorRegister() { return x3; }
38const Register VectorStoreTransitionDescriptor::MapRegister() { return x5; }
39
40
Emily Bernierd0a1eb72015-03-24 16:35:39 -040041const Register StoreTransitionDescriptor::MapRegister() { return x3; }
42
43
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000044const Register LoadGlobalViaContextDescriptor::SlotRegister() { return x2; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000045
46
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000047const Register StoreGlobalViaContextDescriptor::SlotRegister() { return x2; }
48const Register StoreGlobalViaContextDescriptor::ValueRegister() { return x0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000049
50
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000051const Register InstanceOfDescriptor::LeftRegister() { return x1; }
52const Register InstanceOfDescriptor::RightRegister() { return x0; }
53
54
55const Register StringCompareDescriptor::LeftRegister() { return x1; }
56const Register StringCompareDescriptor::RightRegister() { return x0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000057
58
Ben Murdochb8a8cc12014-11-26 15:28:44 +000059const Register ApiGetterDescriptor::function_address() { return x2; }
60
61
62const Register MathPowTaggedDescriptor::exponent() { return x11; }
63
64
65const Register MathPowIntegerDescriptor::exponent() { return x12; }
66
67
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000068const Register GrowArrayElementsDescriptor::ObjectRegister() { return x0; }
69const Register GrowArrayElementsDescriptor::KeyRegister() { return x3; }
70
71
72void FastNewClosureDescriptor::InitializePlatformSpecific(
73 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000074 // x2: function info
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000075 Register registers[] = {x2};
76 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000077}
78
79
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000080void FastNewContextDescriptor::InitializePlatformSpecific(
81 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000082 // x1: function
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000083 Register registers[] = {x1};
84 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000085}
86
Ben Murdoch097c5b22016-05-18 11:27:45 +010087void FastNewObjectDescriptor::InitializePlatformSpecific(
88 CallInterfaceDescriptorData* data) {
89 Register registers[] = {x1, x3};
90 data->InitializePlatformSpecific(arraysize(registers), registers);
91}
92
93void FastNewRestParameterDescriptor::InitializePlatformSpecific(
94 CallInterfaceDescriptorData* data) {
95 // x1: function
96 Register registers[] = {x1};
97 data->InitializePlatformSpecific(arraysize(registers), registers);
98}
99
100
101void FastNewSloppyArgumentsDescriptor::InitializePlatformSpecific(
102 CallInterfaceDescriptorData* data) {
103 // x1: function
104 Register registers[] = {x1};
105 data->InitializePlatformSpecific(arraysize(registers), registers);
106}
107
108
109void FastNewStrictArgumentsDescriptor::InitializePlatformSpecific(
110 CallInterfaceDescriptorData* data) {
111 // x1: function
112 Register registers[] = {x1};
113 data->InitializePlatformSpecific(arraysize(registers), registers);
114}
115
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000116
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000117void ToNumberDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000118 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000119 // x0: value
120 Register registers[] = {x0};
121 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000122}
123
124
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000125// static
126const Register ToLengthDescriptor::ReceiverRegister() { return x0; }
127
128
129// static
130const Register ToStringDescriptor::ReceiverRegister() { return x0; }
131
132
133// static
Ben Murdoch097c5b22016-05-18 11:27:45 +0100134const Register ToNameDescriptor::ReceiverRegister() { return x0; }
135
136
137// static
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000138const Register ToObjectDescriptor::ReceiverRegister() { return x0; }
139
140
141void NumberToStringDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000142 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000143 // x0: value
144 Register registers[] = {x0};
145 data->InitializePlatformSpecific(arraysize(registers), registers);
146}
147
148
149void TypeofDescriptor::InitializePlatformSpecific(
150 CallInterfaceDescriptorData* data) {
151 Register registers[] = {x3};
152 data->InitializePlatformSpecific(arraysize(registers), registers);
153}
154
155
156void FastCloneRegExpDescriptor::InitializePlatformSpecific(
157 CallInterfaceDescriptorData* data) {
158 // x3: closure
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000159 // x2: object literal index
160 // x1: constant properties
161 // x0: object literal flags
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000162 Register registers[] = {x3, x2, x1, x0};
163 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000164}
165
166
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000167void FastCloneShallowArrayDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000168 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000169 // x3: closure
170 // x2: array literal index
171 // x1: constant elements
172 Register registers[] = {x3, x2, x1};
173 data->InitializePlatformSpecific(arraysize(registers), registers);
174}
175
176
177void FastCloneShallowObjectDescriptor::InitializePlatformSpecific(
178 CallInterfaceDescriptorData* data) {
179 // x3: closure
180 // x2: object literal index
181 // x1: constant properties
182 // x0: object literal flags
183 Register registers[] = {x3, x2, x1, x0};
184 data->InitializePlatformSpecific(arraysize(registers), registers);
185}
186
187
188void CreateAllocationSiteDescriptor::InitializePlatformSpecific(
189 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000190 // x2: feedback vector
191 // x3: call feedback slot
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000192 Register registers[] = {x2, x3};
193 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000194}
195
196
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000197void CreateWeakCellDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000198 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000199 // x2: feedback vector
200 // x3: call feedback slot
201 // x1: tagged value to put in the weak cell
202 Register registers[] = {x2, x3, x1};
203 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000204}
205
206
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000207void CallFunctionDescriptor::InitializePlatformSpecific(
208 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000209 // x1 function the function to call
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000210 Register registers[] = {x1};
211 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000212}
213
214
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000215void CallFunctionWithFeedbackDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000216 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000217 Register registers[] = {x1, x3};
218 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000219}
220
221
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000222void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformSpecific(
223 CallInterfaceDescriptorData* data) {
224 Register registers[] = {x1, x3, x2};
225 data->InitializePlatformSpecific(arraysize(registers), registers);
226}
227
228
229void CallConstructDescriptor::InitializePlatformSpecific(
230 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000231 // x0 : number of arguments
232 // x1 : the function to call
233 // x2 : feedback vector
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000234 // x3 : slot in feedback vector (Smi, for RecordCallTarget)
235 // x4 : new target (for IsSuperConstructorCall)
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000236 // TODO(turbofan): So far we don't gather type feedback and hence skip the
237 // slot parameter, but ArrayConstructStub needs the vector to be undefined.
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000238 Register registers[] = {x0, x1, x4, x2};
239 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000240}
241
242
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000243void CallTrampolineDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000244 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000245 // x1: target
246 // x0: number of arguments
247 Register registers[] = {x1, x0};
248 data->InitializePlatformSpecific(arraysize(registers), registers);
249}
250
251
252void ConstructStubDescriptor::InitializePlatformSpecific(
253 CallInterfaceDescriptorData* data) {
254 // x3: new target
255 // x1: target
256 // x0: number of arguments
257 // x2: allocation site or undefined
258 Register registers[] = {x1, x3, x0, x2};
259 data->InitializePlatformSpecific(arraysize(registers), registers);
260}
261
262
263void ConstructTrampolineDescriptor::InitializePlatformSpecific(
264 CallInterfaceDescriptorData* data) {
265 // x3: new target
266 // x1: target
267 // x0: number of arguments
268 Register registers[] = {x1, x3, x0};
269 data->InitializePlatformSpecific(arraysize(registers), registers);
270}
271
272
273void RegExpConstructResultDescriptor::InitializePlatformSpecific(
274 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000275 // x2: length
276 // x1: index (of last match)
277 // x0: string
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000278 Register registers[] = {x2, x1, x0};
279 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000280}
281
282
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000283void TransitionElementsKindDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000284 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000285 // x0: value (js_array)
286 // x1: to_map
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000287 Register registers[] = {x0, x1};
288 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000289}
290
291
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000292void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400293 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000294 data->InitializePlatformSpecific(0, nullptr, nullptr);
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400295}
296
297
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000298void AllocateInNewSpaceDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000299 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000300 Register registers[] = {x0};
301 data->InitializePlatformSpecific(arraysize(registers), registers);
302}
303
304
305void ArrayConstructorConstantArgCountDescriptor::InitializePlatformSpecific(
306 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000307 // x1: function
308 // x2: allocation site with elements kind
309 // x0: number of arguments to the constructor function
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000310 Register registers[] = {x1, x2};
311 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000312}
313
314
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000315void ArrayConstructorDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000316 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000317 // stack param count needs (constructor pointer, and single argument)
318 Register registers[] = {x1, x2, x0};
319 data->InitializePlatformSpecific(arraysize(registers), registers);
320}
321
322
323void InternalArrayConstructorConstantArgCountDescriptor::
324 InitializePlatformSpecific(CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000325 // x1: constructor function
326 // x0: number of arguments to the constructor function
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000327 Register registers[] = {x1};
328 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000329}
330
331
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000332void InternalArrayConstructorDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000333 CallInterfaceDescriptorData* data) {
334 // stack param count needs (constructor pointer, and single argument)
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000335 Register registers[] = {x1, x0};
336 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000337}
338
339
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000340void CompareDescriptor::InitializePlatformSpecific(
341 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000342 // x1: left operand
343 // x0: right operand
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000344 Register registers[] = {x1, x0};
345 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000346}
347
348
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000349void CompareNilDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000350 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000351 // x0: value to compare
352 Register registers[] = {x0};
353 data->InitializePlatformSpecific(arraysize(registers), registers);
354}
355
356
357void ToBooleanDescriptor::InitializePlatformSpecific(
358 CallInterfaceDescriptorData* data) {
359 // x0: value
360 Register registers[] = {x0};
361 data->InitializePlatformSpecific(arraysize(registers), registers);
362}
363
364
365void BinaryOpDescriptor::InitializePlatformSpecific(
366 CallInterfaceDescriptorData* data) {
367 // x1: left operand
368 // x0: right operand
369 Register registers[] = {x1, x0};
370 data->InitializePlatformSpecific(arraysize(registers), registers);
371}
372
373
374void BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific(
375 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000376 // x2: allocation site
377 // x1: left operand
378 // x0: right operand
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000379 Register registers[] = {x2, x1, x0};
380 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000381}
382
383
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000384void StringAddDescriptor::InitializePlatformSpecific(
385 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000386 // x1: left operand
387 // x0: right operand
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000388 Register registers[] = {x1, x0};
389 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000390}
391
392
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000393void KeyedDescriptor::InitializePlatformSpecific(
394 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000395 static PlatformInterfaceDescriptor noInlineDescriptor =
396 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS);
397
398 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000399 x2, // key
400 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000401 data->InitializePlatformSpecific(arraysize(registers), registers,
402 &noInlineDescriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000403}
404
405
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000406void NamedDescriptor::InitializePlatformSpecific(
407 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000408 static PlatformInterfaceDescriptor noInlineDescriptor =
409 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS);
410
411 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000412 x2, // name
413 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000414 data->InitializePlatformSpecific(arraysize(registers), registers,
415 &noInlineDescriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000416}
417
418
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000419void CallHandlerDescriptor::InitializePlatformSpecific(
420 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000421 static PlatformInterfaceDescriptor default_descriptor =
422 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
423
424 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000425 x0, // receiver
426 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000427 data->InitializePlatformSpecific(arraysize(registers), registers,
428 &default_descriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000429}
430
431
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000432void ArgumentAdaptorDescriptor::InitializePlatformSpecific(
433 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000434 static PlatformInterfaceDescriptor default_descriptor =
435 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
436
437 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000438 x1, // JSFunction
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000439 x3, // the new target
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000440 x0, // actual number of arguments
441 x2, // expected number of arguments
442 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000443 data->InitializePlatformSpecific(arraysize(registers), registers,
444 &default_descriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000445}
446
447
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000448void ApiFunctionDescriptor::InitializePlatformSpecific(
449 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000450 static PlatformInterfaceDescriptor default_descriptor =
451 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
452
453 Register registers[] = {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000454 x0, // callee
455 x4, // call_data
456 x2, // holder
457 x1, // api_function_address
458 x3, // actual number of arguments
459 };
460 data->InitializePlatformSpecific(arraysize(registers), registers,
461 &default_descriptor);
462}
463
464
465void ApiAccessorDescriptor::InitializePlatformSpecific(
466 CallInterfaceDescriptorData* data) {
467 static PlatformInterfaceDescriptor default_descriptor =
468 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
469
470 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000471 x0, // callee
472 x4, // call_data
473 x2, // holder
474 x1, // api_function_address
475 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000476 data->InitializePlatformSpecific(arraysize(registers), registers,
477 &default_descriptor);
478}
479
Ben Murdoch097c5b22016-05-18 11:27:45 +0100480void InterpreterDispatchDescriptor::InitializePlatformSpecific(
481 CallInterfaceDescriptorData* data) {
482 Register registers[] = {
483 kInterpreterAccumulatorRegister, kInterpreterRegisterFileRegister,
484 kInterpreterBytecodeOffsetRegister, kInterpreterBytecodeArrayRegister,
485 kInterpreterDispatchTableRegister};
486 data->InitializePlatformSpecific(arraysize(registers), registers);
487}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000488
489void InterpreterPushArgsAndCallDescriptor::InitializePlatformSpecific(
490 CallInterfaceDescriptorData* data) {
491 Register registers[] = {
492 x0, // argument count (not including receiver)
493 x2, // address of first argument
494 x1 // the target callable to be call
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000495 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000496 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000497}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000498
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000499void InterpreterPushArgsAndConstructDescriptor::InitializePlatformSpecific(
500 CallInterfaceDescriptorData* data) {
501 Register registers[] = {
502 x0, // argument count (not including receiver)
503 x3, // new target
504 x1, // constructor to call
505 x2 // address of the first argument
506 };
507 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000508}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000509
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000510void InterpreterCEntryDescriptor::InitializePlatformSpecific(
511 CallInterfaceDescriptorData* data) {
512 Register registers[] = {
513 x0, // argument count (argc)
514 x11, // address of first argument (argv)
515 x1 // the runtime function to call
516 };
517 data->InitializePlatformSpecific(arraysize(registers), registers);
518}
519
520
521} // namespace internal
522} // namespace v8
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000523
524#endif // V8_TARGET_ARCH_ARM64