blob: 4e8c95cd6dc44dabb5a4ba591418740c43780af2 [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/arm/interface-descriptors-arm.h"
Ben Murdochb8a8cc12014-11-26 15:28:44 +00006
7#if V8_TARGET_ARCH_ARM
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 r1; }
18const Register LoadDescriptor::NameRegister() { return r2; }
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000019const Register LoadDescriptor::SlotRegister() { return r0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000020
21
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000022const Register LoadWithVectorDescriptor::VectorRegister() { return r3; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000023
24
25const Register StoreDescriptor::ReceiverRegister() { return r1; }
26const Register StoreDescriptor::NameRegister() { return r2; }
27const Register StoreDescriptor::ValueRegister() { return r0; }
28
29
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030const Register VectorStoreICTrampolineDescriptor::SlotRegister() { return r4; }
31
32
33const Register VectorStoreICDescriptor::VectorRegister() { return r3; }
34
35
36const Register VectorStoreTransitionDescriptor::SlotRegister() { return r4; }
37const Register VectorStoreTransitionDescriptor::VectorRegister() { return r3; }
38const Register VectorStoreTransitionDescriptor::MapRegister() { return r5; }
39
40
Emily Bernierd0a1eb72015-03-24 16:35:39 -040041const Register StoreTransitionDescriptor::MapRegister() { return r3; }
42
43
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000044const Register LoadGlobalViaContextDescriptor::SlotRegister() { return r2; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000045
46
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000047const Register StoreGlobalViaContextDescriptor::SlotRegister() { return r2; }
48const Register StoreGlobalViaContextDescriptor::ValueRegister() { return r0; }
49
50
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000051const Register StringCompareDescriptor::LeftRegister() { return r1; }
52const Register StringCompareDescriptor::RightRegister() { return r0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000053
Ben Murdochc5610432016-08-08 18:44:38 +010054const Register ApiGetterDescriptor::HolderRegister() { return r0; }
55const Register ApiGetterDescriptor::CallbackRegister() { return r3; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000056
57const Register MathPowTaggedDescriptor::exponent() { return r2; }
58
59
60const Register MathPowIntegerDescriptor::exponent() {
61 return MathPowTaggedDescriptor::exponent();
62}
63
64
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000065const Register GrowArrayElementsDescriptor::ObjectRegister() { return r0; }
66const Register GrowArrayElementsDescriptor::KeyRegister() { return r3; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000067
Ben Murdochc5610432016-08-08 18:44:38 +010068const Register HasPropertyDescriptor::ObjectRegister() { return r0; }
69const Register HasPropertyDescriptor::KeyRegister() { return r3; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000070
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000071void FastNewClosureDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +000072 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000073 Register registers[] = {r2};
74 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000075}
76
77
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000078void FastNewContextDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +000079 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000080 Register registers[] = {r1};
81 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000082}
83
Ben Murdoch097c5b22016-05-18 11:27:45 +010084void FastNewObjectDescriptor::InitializePlatformSpecific(
85 CallInterfaceDescriptorData* data) {
86 Register registers[] = {r1, r3};
87 data->InitializePlatformSpecific(arraysize(registers), registers);
88}
89
90void FastNewRestParameterDescriptor::InitializePlatformSpecific(
91 CallInterfaceDescriptorData* data) {
92 Register registers[] = {r1};
93 data->InitializePlatformSpecific(arraysize(registers), registers);
94}
95
96
97void FastNewSloppyArgumentsDescriptor::InitializePlatformSpecific(
98 CallInterfaceDescriptorData* data) {
99 Register registers[] = {r1};
100 data->InitializePlatformSpecific(arraysize(registers), registers);
101}
102
103
104void FastNewStrictArgumentsDescriptor::InitializePlatformSpecific(
105 CallInterfaceDescriptorData* data) {
106 Register registers[] = {r1};
107 data->InitializePlatformSpecific(arraysize(registers), registers);
108}
109
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000110
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000111// static
Ben Murdochda12d292016-06-02 14:46:10 +0100112const Register TypeConversionDescriptor::ArgumentRegister() { return r0; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000113
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000114void TypeofDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000115 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000116 Register registers[] = {r3};
117 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000118}
119
120
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000121void FastCloneRegExpDescriptor::InitializePlatformSpecific(
122 CallInterfaceDescriptorData* data) {
123 Register registers[] = {r3, r2, r1, r0};
124 data->InitializePlatformSpecific(arraysize(registers), registers);
125}
126
127
128void FastCloneShallowArrayDescriptor::InitializePlatformSpecific(
129 CallInterfaceDescriptorData* data) {
130 Register registers[] = {r3, r2, r1};
131 data->InitializePlatformSpecific(arraysize(registers), registers);
132}
133
134
135void FastCloneShallowObjectDescriptor::InitializePlatformSpecific(
136 CallInterfaceDescriptorData* data) {
137 Register registers[] = {r3, r2, r1, r0};
138 data->InitializePlatformSpecific(arraysize(registers), registers);
139}
140
141
142void CreateAllocationSiteDescriptor::InitializePlatformSpecific(
143 CallInterfaceDescriptorData* data) {
144 Register registers[] = {r2, r3};
145 data->InitializePlatformSpecific(arraysize(registers), registers);
146}
147
148
149void CreateWeakCellDescriptor::InitializePlatformSpecific(
150 CallInterfaceDescriptorData* data) {
151 Register registers[] = {r2, r3, r1};
152 data->InitializePlatformSpecific(arraysize(registers), registers);
153}
154
155
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000156void CallFunctionDescriptor::InitializePlatformSpecific(
157 CallInterfaceDescriptorData* data) {
158 Register registers[] = {r1};
159 data->InitializePlatformSpecific(arraysize(registers), registers);
160}
161
162
163void CallFunctionWithFeedbackDescriptor::InitializePlatformSpecific(
164 CallInterfaceDescriptorData* data) {
165 Register registers[] = {r1, r3};
166 data->InitializePlatformSpecific(arraysize(registers), registers);
167}
168
169
170void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformSpecific(
171 CallInterfaceDescriptorData* data) {
172 Register registers[] = {r1, r3, r2};
173 data->InitializePlatformSpecific(arraysize(registers), registers);
174}
175
176
177void CallConstructDescriptor::InitializePlatformSpecific(
178 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000179 // r0 : number of arguments
180 // r1 : the function to call
181 // r2 : feedback vector
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000182 // r3 : slot in feedback vector (Smi, for RecordCallTarget)
183 // r4 : new target (for IsSuperConstructorCall)
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000184 // TODO(turbofan): So far we don't gather type feedback and hence skip the
185 // slot parameter, but ArrayConstructStub needs the vector to be undefined.
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000186 Register registers[] = {r0, r1, r4, r2};
187 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000188}
189
190
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000191void CallTrampolineDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000192 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000193 // r0 : number of arguments
194 // r1 : the target to call
195 Register registers[] = {r1, r0};
196 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000197}
198
199
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000200void ConstructStubDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000201 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000202 // r0 : number of arguments
203 // r1 : the target to call
204 // r3 : the new target
205 // r2 : allocation site or undefined
206 Register registers[] = {r1, r3, r0, r2};
207 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000208}
209
210
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000211void ConstructTrampolineDescriptor::InitializePlatformSpecific(
212 CallInterfaceDescriptorData* data) {
213 // r0 : number of arguments
214 // r1 : the target to call
215 // r3 : the new target
216 Register registers[] = {r1, r3, r0};
217 data->InitializePlatformSpecific(arraysize(registers), registers);
218}
219
220
221void RegExpConstructResultDescriptor::InitializePlatformSpecific(
222 CallInterfaceDescriptorData* data) {
223 Register registers[] = {r2, r1, r0};
224 data->InitializePlatformSpecific(arraysize(registers), registers);
225}
226
227
228void TransitionElementsKindDescriptor::InitializePlatformSpecific(
229 CallInterfaceDescriptorData* data) {
230 Register registers[] = {r0, r1};
231 data->InitializePlatformSpecific(arraysize(registers), registers);
232}
233
234
235void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
236 CallInterfaceDescriptorData* data) {
237 data->InitializePlatformSpecific(0, nullptr, nullptr);
238}
239
Ben Murdochda12d292016-06-02 14:46:10 +0100240#define SIMD128_ALLOC_DESC(TYPE, Type, type, lane_count, lane_type) \
241 void Allocate##Type##Descriptor::InitializePlatformSpecific( \
242 CallInterfaceDescriptorData* data) { \
243 data->InitializePlatformSpecific(0, nullptr, nullptr); \
244 }
245SIMD128_TYPES(SIMD128_ALLOC_DESC)
246#undef SIMD128_ALLOC_DESC
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000247
Ben Murdochc5610432016-08-08 18:44:38 +0100248void ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific(
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000249 CallInterfaceDescriptorData* data) {
Ben Murdochc5610432016-08-08 18:44:38 +0100250 // register state
251 // r0 -- number of arguments
252 // r1 -- function
253 // r2 -- allocation site with elements kind
254 Register registers[] = {r1, r2, r0};
255 data->InitializePlatformSpecific(arraysize(registers), registers, NULL);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000256}
257
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000258void ArrayConstructorConstantArgCountDescriptor::InitializePlatformSpecific(
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400259 CallInterfaceDescriptorData* data) {
260 // register state
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000261 // r0 -- number of arguments
262 // r1 -- function
263 // r2 -- allocation site with elements kind
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000264 Register registers[] = {r1, r2};
265 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000266}
267
268
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000269void ArrayConstructorDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000270 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000271 // stack param count needs (constructor pointer, and single argument)
272 Register registers[] = {r1, r2, r0};
273 data->InitializePlatformSpecific(arraysize(registers), registers);
274}
275
276
277void InternalArrayConstructorConstantArgCountDescriptor::
278 InitializePlatformSpecific(CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000279 // register state
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000280 // r0 -- number of arguments
281 // r1 -- constructor function
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000282 Register registers[] = {r1};
283 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000284}
285
286
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000287void InternalArrayConstructorDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000288 CallInterfaceDescriptorData* data) {
289 // stack param count needs (constructor pointer, and single argument)
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000290 Register registers[] = {r1, r0};
291 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000292}
293
Ben Murdochda12d292016-06-02 14:46:10 +0100294void FastArrayPushDescriptor::InitializePlatformSpecific(
295 CallInterfaceDescriptorData* data) {
296 // stack param count needs (arg count)
297 Register registers[] = {r0};
298 data->InitializePlatformSpecific(arraysize(registers), registers);
299}
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000300
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000301void CompareDescriptor::InitializePlatformSpecific(
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000302 CallInterfaceDescriptorData* data) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000303 Register registers[] = {r1, r0};
304 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000305}
306
307
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000308void BinaryOpDescriptor::InitializePlatformSpecific(
309 CallInterfaceDescriptorData* data) {
310 Register registers[] = {r1, r0};
311 data->InitializePlatformSpecific(arraysize(registers), registers);
312}
313
314
315void BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific(
316 CallInterfaceDescriptorData* data) {
317 Register registers[] = {r2, r1, r0};
318 data->InitializePlatformSpecific(arraysize(registers), registers);
319}
320
Ben Murdochc5610432016-08-08 18:44:38 +0100321void CountOpDescriptor::InitializePlatformSpecific(
322 CallInterfaceDescriptorData* data) {
323 Register registers[] = {r1};
324 data->InitializePlatformSpecific(arraysize(registers), registers);
325}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000326
327void StringAddDescriptor::InitializePlatformSpecific(
328 CallInterfaceDescriptorData* data) {
329 Register registers[] = {r1, r0};
330 data->InitializePlatformSpecific(arraysize(registers), registers);
331}
332
333
334void KeyedDescriptor::InitializePlatformSpecific(
335 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000336 static PlatformInterfaceDescriptor noInlineDescriptor =
337 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS);
338
339 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000340 r2, // key
341 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000342 data->InitializePlatformSpecific(arraysize(registers), registers,
343 &noInlineDescriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000344}
345
346
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000347void NamedDescriptor::InitializePlatformSpecific(
348 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000349 static PlatformInterfaceDescriptor noInlineDescriptor =
350 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS);
351
352 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000353 r2, // name
354 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000355 data->InitializePlatformSpecific(arraysize(registers), registers,
356 &noInlineDescriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000357}
358
359
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000360void CallHandlerDescriptor::InitializePlatformSpecific(
361 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000362 static PlatformInterfaceDescriptor default_descriptor =
363 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
364
365 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000366 r0, // receiver
367 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000368 data->InitializePlatformSpecific(arraysize(registers), registers,
369 &default_descriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000370}
371
372
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000373void ArgumentAdaptorDescriptor::InitializePlatformSpecific(
374 CallInterfaceDescriptorData* data) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000375 static PlatformInterfaceDescriptor default_descriptor =
376 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
377
378 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000379 r1, // JSFunction
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000380 r3, // the new target
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000381 r0, // actual number of arguments
382 r2, // expected number of arguments
383 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000384 data->InitializePlatformSpecific(arraysize(registers), registers,
385 &default_descriptor);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000386}
387
Ben Murdochda12d292016-06-02 14:46:10 +0100388void ApiCallbackDescriptorBase::InitializePlatformSpecific(
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000389 CallInterfaceDescriptorData* data) {
390 static PlatformInterfaceDescriptor default_descriptor =
391 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
392
393 Register registers[] = {
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000394 r0, // callee
395 r4, // call_data
396 r2, // holder
397 r1, // api_function_address
398 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000399 data->InitializePlatformSpecific(arraysize(registers), registers,
400 &default_descriptor);
401}
402
Ben Murdoch097c5b22016-05-18 11:27:45 +0100403void InterpreterDispatchDescriptor::InitializePlatformSpecific(
404 CallInterfaceDescriptorData* data) {
405 Register registers[] = {
Ben Murdochc5610432016-08-08 18:44:38 +0100406 kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
407 kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
Ben Murdoch097c5b22016-05-18 11:27:45 +0100408 data->InitializePlatformSpecific(arraysize(registers), registers);
409}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000410
411void InterpreterPushArgsAndCallDescriptor::InitializePlatformSpecific(
412 CallInterfaceDescriptorData* data) {
413 Register registers[] = {
414 r0, // argument count (not including receiver)
415 r2, // address of first argument
416 r1 // the target callable to be call
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000417 };
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000418 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000419}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000420
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000421void InterpreterPushArgsAndConstructDescriptor::InitializePlatformSpecific(
422 CallInterfaceDescriptorData* data) {
423 Register registers[] = {
424 r0, // argument count (not including receiver)
425 r3, // new target
426 r1, // constructor to call
427 r2 // address of the first argument
428 };
429 data->InitializePlatformSpecific(arraysize(registers), registers);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000430}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000431
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000432void InterpreterCEntryDescriptor::InitializePlatformSpecific(
433 CallInterfaceDescriptorData* data) {
434 Register registers[] = {
435 r0, // argument count (argc)
436 r2, // address of first argument (argv)
437 r1 // the runtime function to call
438 };
439 data->InitializePlatformSpecific(arraysize(registers), registers);
440}
441
Ben Murdochc5610432016-08-08 18:44:38 +0100442void ResumeGeneratorDescriptor::InitializePlatformSpecific(
443 CallInterfaceDescriptorData* data) {
444 Register registers[] = {
445 r0, // the value to pass to the generator
446 r1, // the JSGeneratorObject to resume
447 r2 // the resume mode (tagged)
448 };
449 data->InitializePlatformSpecific(arraysize(registers), registers);
450}
451
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000452} // namespace internal
453} // namespace v8
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000454
455#endif // V8_TARGET_ARCH_ARM