Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: src/arm64/code-stubs-arm64.cc

Issue 384403002: StubCallInterfaceDescriptor takes a context register. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Code comments and ports. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/arm64/code-stubs-arm64.h ('k') | src/arm64/lithium-arm64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM64 7 #if V8_TARGET_ARCH_ARM64
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
11 #include "src/regexp-macro-assembler.h" 11 #include "src/regexp-macro-assembler.h"
12 #include "src/stub-cache.h" 12 #include "src/stub-cache.h"
13 13
14 namespace v8 { 14 namespace v8 {
15 namespace internal { 15 namespace internal {
16 16
17 void FastNewClosureStub::InitializeInterfaceDescriptor( 17 void FastNewClosureStub::InitializeInterfaceDescriptor(
18 CodeStubInterfaceDescriptor* descriptor) { 18 CodeStubInterfaceDescriptor* descriptor) {
19 // cp: context
19 // x2: function info 20 // x2: function info
20 Register registers[] = { x2 }; 21 Register registers[] = { cp, x2 };
21 descriptor->Initialize( 22 descriptor->Initialize(
22 ARRAY_SIZE(registers), registers, 23 ARRAY_SIZE(registers), registers,
23 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); 24 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry);
24 } 25 }
25 26
26 27
27 void FastNewContextStub::InitializeInterfaceDescriptor( 28 void FastNewContextStub::InitializeInterfaceDescriptor(
28 CodeStubInterfaceDescriptor* descriptor) { 29 CodeStubInterfaceDescriptor* descriptor) {
30 // cp: context
29 // x1: function 31 // x1: function
30 Register registers[] = { x1 }; 32 Register registers[] = { cp, x1 };
31 descriptor->Initialize(ARRAY_SIZE(registers), registers); 33 descriptor->Initialize(ARRAY_SIZE(registers), registers);
32 } 34 }
33 35
34 36
35 void ToNumberStub::InitializeInterfaceDescriptor( 37 void ToNumberStub::InitializeInterfaceDescriptor(
36 CodeStubInterfaceDescriptor* descriptor) { 38 CodeStubInterfaceDescriptor* descriptor) {
39 // cp: context
37 // x0: value 40 // x0: value
38 Register registers[] = { x0 }; 41 Register registers[] = { cp, x0 };
39 descriptor->Initialize(ARRAY_SIZE(registers), registers); 42 descriptor->Initialize(ARRAY_SIZE(registers), registers);
40 } 43 }
41 44
42 45
43 void NumberToStringStub::InitializeInterfaceDescriptor( 46 void NumberToStringStub::InitializeInterfaceDescriptor(
44 CodeStubInterfaceDescriptor* descriptor) { 47 CodeStubInterfaceDescriptor* descriptor) {
48 // cp: context
45 // x0: value 49 // x0: value
46 Register registers[] = { x0 }; 50 Register registers[] = { cp, x0 };
47 descriptor->Initialize( 51 descriptor->Initialize(
48 ARRAY_SIZE(registers), registers, 52 ARRAY_SIZE(registers), registers,
49 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); 53 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry);
50 } 54 }
51 55
52 56
53 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( 57 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
54 CodeStubInterfaceDescriptor* descriptor) { 58 CodeStubInterfaceDescriptor* descriptor) {
59 // cp: context
55 // x3: array literals array 60 // x3: array literals array
56 // x2: array literal index 61 // x2: array literal index
57 // x1: constant elements 62 // x1: constant elements
58 Register registers[] = { x3, x2, x1 }; 63 Register registers[] = { cp, x3, x2, x1 };
59 Representation representations[] = { 64 Representation representations[] = {
60 Representation::Tagged(), 65 Representation::Tagged(),
66 Representation::Tagged(),
61 Representation::Smi(), 67 Representation::Smi(),
62 Representation::Tagged() }; 68 Representation::Tagged() };
63 descriptor->Initialize( 69 descriptor->Initialize(
64 ARRAY_SIZE(registers), registers, 70 ARRAY_SIZE(registers), registers,
65 Runtime::FunctionForId( 71 Runtime::FunctionForId(
66 Runtime::kCreateArrayLiteralStubBailout)->entry, 72 Runtime::kCreateArrayLiteralStubBailout)->entry,
67 representations); 73 representations);
68 } 74 }
69 75
70 76
71 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( 77 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
72 CodeStubInterfaceDescriptor* descriptor) { 78 CodeStubInterfaceDescriptor* descriptor) {
79 // cp: context
73 // x3: object literals array 80 // x3: object literals array
74 // x2: object literal index 81 // x2: object literal index
75 // x1: constant properties 82 // x1: constant properties
76 // x0: object literal flags 83 // x0: object literal flags
77 Register registers[] = { x3, x2, x1, x0 }; 84 Register registers[] = { cp, x3, x2, x1, x0 };
78 descriptor->Initialize( 85 descriptor->Initialize(
79 ARRAY_SIZE(registers), registers, 86 ARRAY_SIZE(registers), registers,
80 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); 87 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry);
81 } 88 }
82 89
83 90
84 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( 91 void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
85 CodeStubInterfaceDescriptor* descriptor) { 92 CodeStubInterfaceDescriptor* descriptor) {
93 // cp: context
86 // x2: feedback vector 94 // x2: feedback vector
87 // x3: call feedback slot 95 // x3: call feedback slot
88 Register registers[] = { x2, x3 }; 96 Register registers[] = { cp, x2, x3 };
89 descriptor->Initialize(ARRAY_SIZE(registers), registers); 97 descriptor->Initialize(ARRAY_SIZE(registers), registers);
90 } 98 }
91 99
92 100
93 void RegExpConstructResultStub::InitializeInterfaceDescriptor( 101 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
94 CodeStubInterfaceDescriptor* descriptor) { 102 CodeStubInterfaceDescriptor* descriptor) {
103 // cp: context
95 // x2: length 104 // x2: length
96 // x1: index (of last match) 105 // x1: index (of last match)
97 // x0: string 106 // x0: string
98 Register registers[] = { x2, x1, x0 }; 107 Register registers[] = { cp, x2, x1, x0 };
99 descriptor->Initialize( 108 descriptor->Initialize(
100 ARRAY_SIZE(registers), registers, 109 ARRAY_SIZE(registers), registers,
101 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); 110 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
102 } 111 }
103 112
104 113
105 void TransitionElementsKindStub::InitializeInterfaceDescriptor( 114 void TransitionElementsKindStub::InitializeInterfaceDescriptor(
106 CodeStubInterfaceDescriptor* descriptor) { 115 CodeStubInterfaceDescriptor* descriptor) {
116 // cp: context
107 // x0: value (js_array) 117 // x0: value (js_array)
108 // x1: to_map 118 // x1: to_map
109 Register registers[] = { x0, x1 }; 119 Register registers[] = { cp, x0, x1 };
110 Address entry = 120 Address entry =
111 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; 121 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry;
112 descriptor->Initialize(ARRAY_SIZE(registers), registers, 122 descriptor->Initialize(ARRAY_SIZE(registers), registers,
113 FUNCTION_ADDR(entry)); 123 FUNCTION_ADDR(entry));
114 } 124 }
115 125
116 126
117 void CompareNilICStub::InitializeInterfaceDescriptor( 127 void CompareNilICStub::InitializeInterfaceDescriptor(
118 CodeStubInterfaceDescriptor* descriptor) { 128 CodeStubInterfaceDescriptor* descriptor) {
129 // cp: context
119 // x0: value to compare 130 // x0: value to compare
120 Register registers[] = { x0 }; 131 Register registers[] = { cp, x0 };
121 descriptor->Initialize(ARRAY_SIZE(registers), registers, 132 descriptor->Initialize(ARRAY_SIZE(registers), registers,
122 FUNCTION_ADDR(CompareNilIC_Miss)); 133 FUNCTION_ADDR(CompareNilIC_Miss));
123 descriptor->SetMissHandler( 134 descriptor->SetMissHandler(
124 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); 135 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate()));
125 } 136 }
126 137
127 138
139 const Register InterfaceDescriptor::ContextRegister() { return cp; }
140
141
128 static void InitializeArrayConstructorDescriptor( 142 static void InitializeArrayConstructorDescriptor(
129 CodeStubInterfaceDescriptor* descriptor, 143 CodeStubInterfaceDescriptor* descriptor,
130 int constant_stack_parameter_count) { 144 int constant_stack_parameter_count) {
145 // cp: context
131 // x1: function 146 // x1: function
132 // x2: allocation site with elements kind 147 // x2: allocation site with elements kind
133 // x0: number of arguments to the constructor function 148 // x0: number of arguments to the constructor function
134 Address deopt_handler = Runtime::FunctionForId( 149 Address deopt_handler = Runtime::FunctionForId(
135 Runtime::kArrayConstructor)->entry; 150 Runtime::kArrayConstructor)->entry;
136 151
137 if (constant_stack_parameter_count == 0) { 152 if (constant_stack_parameter_count == 0) {
138 Register registers[] = { x1, x2 }; 153 Register registers[] = { cp, x1, x2 };
139 descriptor->Initialize(ARRAY_SIZE(registers), registers, 154 descriptor->Initialize(ARRAY_SIZE(registers), registers,
140 deopt_handler, 155 deopt_handler,
141 NULL, 156 NULL,
142 constant_stack_parameter_count, 157 constant_stack_parameter_count,
143 JS_FUNCTION_STUB_MODE); 158 JS_FUNCTION_STUB_MODE);
144 } else { 159 } else {
145 // stack param count needs (constructor pointer, and single argument) 160 // stack param count needs (constructor pointer, and single argument)
146 Register registers[] = { x1, x2, x0 }; 161 Register registers[] = { cp, x1, x2, x0 };
147 Representation representations[] = { 162 Representation representations[] = {
148 Representation::Tagged(), 163 Representation::Tagged(),
149 Representation::Tagged(), 164 Representation::Tagged(),
165 Representation::Tagged(),
150 Representation::Integer32() }; 166 Representation::Integer32() };
151 descriptor->Initialize(ARRAY_SIZE(registers), registers, 167 descriptor->Initialize(ARRAY_SIZE(registers), registers,
152 x0, 168 x0,
153 deopt_handler, 169 deopt_handler,
154 representations, 170 representations,
155 constant_stack_parameter_count, 171 constant_stack_parameter_count,
156 JS_FUNCTION_STUB_MODE, 172 JS_FUNCTION_STUB_MODE,
157 PASS_ARGUMENTS); 173 PASS_ARGUMENTS);
158 } 174 }
159 } 175 }
(...skipping 13 matching lines...) Expand all
173 189
174 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( 190 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
175 CodeStubInterfaceDescriptor* descriptor) { 191 CodeStubInterfaceDescriptor* descriptor) {
176 InitializeArrayConstructorDescriptor(descriptor, -1); 192 InitializeArrayConstructorDescriptor(descriptor, -1);
177 } 193 }
178 194
179 195
180 static void InitializeInternalArrayConstructorDescriptor( 196 static void InitializeInternalArrayConstructorDescriptor(
181 CodeStubInterfaceDescriptor* descriptor, 197 CodeStubInterfaceDescriptor* descriptor,
182 int constant_stack_parameter_count) { 198 int constant_stack_parameter_count) {
199 // cp: context
183 // x1: constructor function 200 // x1: constructor function
184 // x0: number of arguments to the constructor function 201 // x0: number of arguments to the constructor function
185 Address deopt_handler = Runtime::FunctionForId( 202 Address deopt_handler = Runtime::FunctionForId(
186 Runtime::kInternalArrayConstructor)->entry; 203 Runtime::kInternalArrayConstructor)->entry;
187 204
188 if (constant_stack_parameter_count == 0) { 205 if (constant_stack_parameter_count == 0) {
189 Register registers[] = { x1 }; 206 Register registers[] = { cp, x1 };
190 descriptor->Initialize(ARRAY_SIZE(registers), registers, 207 descriptor->Initialize(ARRAY_SIZE(registers), registers,
191 deopt_handler, 208 deopt_handler,
192 NULL, 209 NULL,
193 constant_stack_parameter_count, 210 constant_stack_parameter_count,
194 JS_FUNCTION_STUB_MODE); 211 JS_FUNCTION_STUB_MODE);
195 } else { 212 } else {
196 // stack param count needs (constructor pointer, and single argument) 213 // stack param count needs (constructor pointer, and single argument)
197 Register registers[] = { x1, x0 }; 214 Register registers[] = { cp, x1, x0 };
198 Representation representations[] = { 215 Representation representations[] = {
199 Representation::Tagged(), 216 Representation::Tagged(),
217 Representation::Tagged(),
200 Representation::Integer32() }; 218 Representation::Integer32() };
201 descriptor->Initialize(ARRAY_SIZE(registers), registers, 219 descriptor->Initialize(ARRAY_SIZE(registers), registers,
202 x0, 220 x0,
203 deopt_handler, 221 deopt_handler,
204 representations, 222 representations,
205 constant_stack_parameter_count, 223 constant_stack_parameter_count,
206 JS_FUNCTION_STUB_MODE, 224 JS_FUNCTION_STUB_MODE,
207 PASS_ARGUMENTS); 225 PASS_ARGUMENTS);
208 } 226 }
209 } 227 }
(...skipping 12 matching lines...) Expand all
222 240
223 241
224 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( 242 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
225 CodeStubInterfaceDescriptor* descriptor) { 243 CodeStubInterfaceDescriptor* descriptor) {
226 InitializeInternalArrayConstructorDescriptor(descriptor, -1); 244 InitializeInternalArrayConstructorDescriptor(descriptor, -1);
227 } 245 }
228 246
229 247
230 void ToBooleanStub::InitializeInterfaceDescriptor( 248 void ToBooleanStub::InitializeInterfaceDescriptor(
231 CodeStubInterfaceDescriptor* descriptor) { 249 CodeStubInterfaceDescriptor* descriptor) {
250 // cp: context
232 // x0: value 251 // x0: value
233 Register registers[] = { x0 }; 252 Register registers[] = { cp, x0 };
234 descriptor->Initialize(ARRAY_SIZE(registers), registers, 253 descriptor->Initialize(ARRAY_SIZE(registers), registers,
235 FUNCTION_ADDR(ToBooleanIC_Miss)); 254 FUNCTION_ADDR(ToBooleanIC_Miss));
236 descriptor->SetMissHandler( 255 descriptor->SetMissHandler(
237 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); 256 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
238 } 257 }
239 258
240 259
241 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( 260 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
242 CodeStubInterfaceDescriptor* descriptor) { 261 CodeStubInterfaceDescriptor* descriptor) {
262 // cp: context
243 // x0: value 263 // x0: value
244 // x3: target map 264 // x3: target map
245 // x1: key 265 // x1: key
246 // x2: receiver 266 // x2: receiver
247 Register registers[] = { x0, x3, x1, x2 }; 267 Register registers[] = { cp, x0, x3, x1, x2 };
248 descriptor->Initialize(ARRAY_SIZE(registers), registers, 268 descriptor->Initialize(ARRAY_SIZE(registers), registers,
249 FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); 269 FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
250 } 270 }
251 271
252 272
253 void BinaryOpICStub::InitializeInterfaceDescriptor( 273 void BinaryOpICStub::InitializeInterfaceDescriptor(
254 CodeStubInterfaceDescriptor* descriptor) { 274 CodeStubInterfaceDescriptor* descriptor) {
275 // cp: context
255 // x1: left operand 276 // x1: left operand
256 // x0: right operand 277 // x0: right operand
257 Register registers[] = { x1, x0 }; 278 Register registers[] = { cp, x1, x0 };
258 descriptor->Initialize(ARRAY_SIZE(registers), registers, 279 descriptor->Initialize(ARRAY_SIZE(registers), registers,
259 FUNCTION_ADDR(BinaryOpIC_Miss)); 280 FUNCTION_ADDR(BinaryOpIC_Miss));
260 descriptor->SetMissHandler( 281 descriptor->SetMissHandler(
261 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); 282 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate()));
262 } 283 }
263 284
264 285
265 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( 286 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor(
266 CodeStubInterfaceDescriptor* descriptor) { 287 CodeStubInterfaceDescriptor* descriptor) {
288 // cp: context
267 // x2: allocation site 289 // x2: allocation site
268 // x1: left operand 290 // x1: left operand
269 // x0: right operand 291 // x0: right operand
270 Register registers[] = { x2, x1, x0 }; 292 Register registers[] = { cp, x2, x1, x0 };
271 descriptor->Initialize(ARRAY_SIZE(registers), registers, 293 descriptor->Initialize(ARRAY_SIZE(registers), registers,
272 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); 294 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite));
273 } 295 }
274 296
275 297
276 void StringAddStub::InitializeInterfaceDescriptor( 298 void StringAddStub::InitializeInterfaceDescriptor(
277 CodeStubInterfaceDescriptor* descriptor) { 299 CodeStubInterfaceDescriptor* descriptor) {
300 // cp: context
278 // x1: left operand 301 // x1: left operand
279 // x0: right operand 302 // x0: right operand
280 Register registers[] = { x1, x0 }; 303 Register registers[] = { cp, x1, x0 };
281 descriptor->Initialize( 304 descriptor->Initialize(
282 ARRAY_SIZE(registers), registers, 305 ARRAY_SIZE(registers), registers,
283 Runtime::FunctionForId(Runtime::kStringAdd)->entry); 306 Runtime::FunctionForId(Runtime::kStringAdd)->entry);
284 } 307 }
285 308
286 309
287 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { 310 void CallDescriptors::InitializeForIsolate(Isolate* isolate) {
288 static PlatformCallInterfaceDescriptor default_descriptor = 311 static PlatformInterfaceDescriptor default_descriptor =
289 PlatformCallInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS); 312 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS);
290 313
291 static PlatformCallInterfaceDescriptor noInlineDescriptor = 314 static PlatformInterfaceDescriptor noInlineDescriptor =
292 PlatformCallInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS); 315 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS);
293 316
294 { 317 {
295 CallInterfaceDescriptor* descriptor = 318 CallInterfaceDescriptor* descriptor =
296 isolate->call_descriptor(Isolate::ArgumentAdaptorCall); 319 isolate->call_descriptor(Isolate::ArgumentAdaptorCall);
297 Register registers[] = { x1, // JSFunction 320 Register registers[] = { cp, // context
298 cp, // context 321 x1, // JSFunction
299 x0, // actual number of arguments 322 x0, // actual number of arguments
300 x2, // expected number of arguments 323 x2, // expected number of arguments
301 }; 324 };
302 Representation representations[] = { 325 Representation representations[] = {
326 Representation::Tagged(), // context
303 Representation::Tagged(), // JSFunction 327 Representation::Tagged(), // JSFunction
304 Representation::Tagged(), // context
305 Representation::Integer32(), // actual number of arguments 328 Representation::Integer32(), // actual number of arguments
306 Representation::Integer32(), // expected number of arguments 329 Representation::Integer32(), // expected number of arguments
307 }; 330 };
308 descriptor->Initialize(ARRAY_SIZE(registers), registers, 331 descriptor->Initialize(ARRAY_SIZE(registers), registers,
309 representations, &default_descriptor); 332 representations, &default_descriptor);
310 } 333 }
311 { 334 {
312 CallInterfaceDescriptor* descriptor = 335 CallInterfaceDescriptor* descriptor =
313 isolate->call_descriptor(Isolate::KeyedCall); 336 isolate->call_descriptor(Isolate::KeyedCall);
314 Register registers[] = { cp, // context 337 Register registers[] = { cp, // context
(...skipping 28 matching lines...) Expand all
343 Representation representations[] = { 366 Representation representations[] = {
344 Representation::Tagged(), // context 367 Representation::Tagged(), // context
345 Representation::Tagged(), // receiver 368 Representation::Tagged(), // receiver
346 }; 369 };
347 descriptor->Initialize(ARRAY_SIZE(registers), registers, 370 descriptor->Initialize(ARRAY_SIZE(registers), registers,
348 representations, &default_descriptor); 371 representations, &default_descriptor);
349 } 372 }
350 { 373 {
351 CallInterfaceDescriptor* descriptor = 374 CallInterfaceDescriptor* descriptor =
352 isolate->call_descriptor(Isolate::ApiFunctionCall); 375 isolate->call_descriptor(Isolate::ApiFunctionCall);
353 Register registers[] = { x0, // callee 376 Register registers[] = { cp, // context
377 x0, // callee
354 x4, // call_data 378 x4, // call_data
355 x2, // holder 379 x2, // holder
356 x1, // api_function_address 380 x1, // api_function_address
357 cp, // context
358 }; 381 };
359 Representation representations[] = { 382 Representation representations[] = {
383 Representation::Tagged(), // context
360 Representation::Tagged(), // callee 384 Representation::Tagged(), // callee
361 Representation::Tagged(), // call_data 385 Representation::Tagged(), // call_data
362 Representation::Tagged(), // holder 386 Representation::Tagged(), // holder
363 Representation::External(), // api_function_address 387 Representation::External(), // api_function_address
364 Representation::Tagged(), // context
365 }; 388 };
366 descriptor->Initialize(ARRAY_SIZE(registers), registers, 389 descriptor->Initialize(ARRAY_SIZE(registers), registers,
367 representations, &default_descriptor); 390 representations, &default_descriptor);
368 } 391 }
369 } 392 }
370 393
371 394
372 #define __ ACCESS_MASM(masm) 395 #define __ ACCESS_MASM(masm)
373 396
374 397
375 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { 398 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
376 // Update the static counter each time a new code stub is generated. 399 // Update the static counter each time a new code stub is generated.
377 isolate()->counters()->code_stubs()->Increment(); 400 isolate()->counters()->code_stubs()->Increment();
378 401
379 CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor(); 402 CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor();
380 int param_count = descriptor->register_param_count(); 403 int param_count = descriptor->GetEnvironmentParameterCount();
381 { 404 {
382 // Call the runtime system in a fresh internal frame. 405 // Call the runtime system in a fresh internal frame.
383 FrameScope scope(masm, StackFrame::INTERNAL); 406 FrameScope scope(masm, StackFrame::INTERNAL);
384 ASSERT((descriptor->register_param_count() == 0) || 407 ASSERT((param_count == 0) ||
385 x0.Is(descriptor->GetParameterRegister(param_count - 1))); 408 x0.Is(descriptor->GetEnvironmentParameterRegister(param_count - 1)));
386 409
387 // Push arguments 410 // Push arguments
388 MacroAssembler::PushPopQueue queue(masm); 411 MacroAssembler::PushPopQueue queue(masm);
389 for (int i = 0; i < param_count; ++i) { 412 for (int i = 0; i < param_count; ++i) {
390 queue.Queue(descriptor->GetParameterRegister(i)); 413 queue.Queue(descriptor->GetEnvironmentParameterRegister(i));
391 } 414 }
392 queue.PushQueued(); 415 queue.PushQueued();
393 416
394 ExternalReference miss = descriptor->miss_handler(); 417 ExternalReference miss = descriptor->miss_handler();
395 __ CallExternalReference(miss, descriptor->register_param_count()); 418 __ CallExternalReference(miss, param_count);
396 } 419 }
397 420
398 __ Ret(); 421 __ Ret();
399 } 422 }
400 423
401 424
402 void DoubleToIStub::Generate(MacroAssembler* masm) { 425 void DoubleToIStub::Generate(MacroAssembler* masm) {
403 Label done; 426 Label done;
404 Register input = source(); 427 Register input = source();
405 Register result = destination(); 428 Register result = destination();
(...skipping 4997 matching lines...) Expand 10 before | Expand all | Expand 10 after
5403 MemOperand(fp, 6 * kPointerSize), 5426 MemOperand(fp, 6 * kPointerSize),
5404 NULL); 5427 NULL);
5405 } 5428 }
5406 5429
5407 5430
5408 #undef __ 5431 #undef __
5409 5432
5410 } } // namespace v8::internal 5433 } } // namespace v8::internal
5411 5434
5412 #endif // V8_TARGET_ARCH_ARM64 5435 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm64/code-stubs-arm64.h ('k') | src/arm64/lithium-arm64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698