OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // 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 | 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_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 | 94 |
95 void TransitionElementsKindStub::InitializeInterfaceDescriptor( | 95 void TransitionElementsKindStub::InitializeInterfaceDescriptor( |
96 CodeStubInterfaceDescriptor* descriptor) { | 96 CodeStubInterfaceDescriptor* descriptor) { |
97 Register registers[] = { eax, ebx }; | 97 Register registers[] = { eax, ebx }; |
98 descriptor->Initialize( | 98 descriptor->Initialize( |
99 ARRAY_SIZE(registers), registers, | 99 ARRAY_SIZE(registers), registers, |
100 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); | 100 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); |
101 } | 101 } |
102 | 102 |
103 | 103 |
| 104 const Register InterfaceDescriptor::ContextRegister() { return esi; } |
| 105 |
| 106 |
104 static void InitializeArrayConstructorDescriptor( | 107 static void InitializeArrayConstructorDescriptor( |
105 Isolate* isolate, | 108 Isolate* isolate, |
106 CodeStubInterfaceDescriptor* descriptor, | 109 CodeStubInterfaceDescriptor* descriptor, |
107 int constant_stack_parameter_count) { | 110 int constant_stack_parameter_count) { |
108 // register state | 111 // register state |
109 // eax -- number of arguments | 112 // eax -- number of arguments |
110 // edi -- function | 113 // edi -- function |
111 // ebx -- allocation site with elements kind | 114 // ebx -- allocation site with elements kind |
112 Address deopt_handler = Runtime::FunctionForId( | 115 Address deopt_handler = Runtime::FunctionForId( |
113 Runtime::kArrayConstructor)->entry; | 116 Runtime::kArrayConstructor)->entry; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 ARRAY_SIZE(registers), registers, | 261 ARRAY_SIZE(registers), registers, |
259 Runtime::FunctionForId(Runtime::kStringAdd)->entry); | 262 Runtime::FunctionForId(Runtime::kStringAdd)->entry); |
260 } | 263 } |
261 | 264 |
262 | 265 |
263 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { | 266 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { |
264 { | 267 { |
265 CallInterfaceDescriptor* descriptor = | 268 CallInterfaceDescriptor* descriptor = |
266 isolate->call_descriptor(Isolate::ArgumentAdaptorCall); | 269 isolate->call_descriptor(Isolate::ArgumentAdaptorCall); |
267 Register registers[] = { edi, // JSFunction | 270 Register registers[] = { edi, // JSFunction |
268 esi, // context | |
269 eax, // actual number of arguments | 271 eax, // actual number of arguments |
270 ebx, // expected number of arguments | 272 ebx, // expected number of arguments |
271 }; | 273 }; |
272 Representation representations[] = { | 274 Representation representations[] = { |
273 Representation::Tagged(), // JSFunction | 275 Representation::Tagged(), // JSFunction |
274 Representation::Tagged(), // context | |
275 Representation::Integer32(), // actual number of arguments | 276 Representation::Integer32(), // actual number of arguments |
276 Representation::Integer32(), // expected number of arguments | 277 Representation::Integer32(), // expected number of arguments |
277 }; | 278 }; |
278 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); | 279 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); |
279 } | 280 } |
280 { | 281 { |
281 CallInterfaceDescriptor* descriptor = | 282 CallInterfaceDescriptor* descriptor = |
282 isolate->call_descriptor(Isolate::KeyedCall); | 283 isolate->call_descriptor(Isolate::KeyedCall); |
283 Register registers[] = { esi, // context | 284 Register registers[] = { ecx }; // key |
284 ecx, // key | |
285 }; | |
286 Representation representations[] = { | 285 Representation representations[] = { |
287 Representation::Tagged(), // context | 286 Representation::Tagged() // key |
288 Representation::Tagged(), // key | |
289 }; | 287 }; |
290 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); | 288 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); |
291 } | 289 } |
292 { | 290 { |
293 CallInterfaceDescriptor* descriptor = | 291 CallInterfaceDescriptor* descriptor = |
294 isolate->call_descriptor(Isolate::NamedCall); | 292 isolate->call_descriptor(Isolate::NamedCall); |
295 Register registers[] = { esi, // context | 293 Register registers[] = { ecx }; // name |
296 ecx, // name | |
297 }; | |
298 Representation representations[] = { | 294 Representation representations[] = { |
299 Representation::Tagged(), // context | 295 Representation::Tagged() // name |
300 Representation::Tagged(), // name | |
301 }; | 296 }; |
302 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); | 297 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); |
303 } | 298 } |
304 { | 299 { |
305 CallInterfaceDescriptor* descriptor = | 300 CallInterfaceDescriptor* descriptor = |
306 isolate->call_descriptor(Isolate::CallHandler); | 301 isolate->call_descriptor(Isolate::CallHandler); |
307 Register registers[] = { esi, // context | 302 Register registers[] = { edx }; // receiver |
308 edx, // receiver | |
309 }; | |
310 Representation representations[] = { | 303 Representation representations[] = { |
311 Representation::Tagged(), // context | 304 Representation::Tagged() // receiver |
312 Representation::Tagged(), // receiver | |
313 }; | 305 }; |
314 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); | 306 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); |
315 } | 307 } |
316 { | 308 { |
317 CallInterfaceDescriptor* descriptor = | 309 CallInterfaceDescriptor* descriptor = |
318 isolate->call_descriptor(Isolate::ApiFunctionCall); | 310 isolate->call_descriptor(Isolate::ApiFunctionCall); |
319 Register registers[] = { eax, // callee | 311 Register registers[] = { eax, // callee |
320 ebx, // call_data | 312 ebx, // call_data |
321 ecx, // holder | 313 ecx, // holder |
322 edx, // api_function_address | 314 edx // api_function_address |
323 esi, // context | |
324 }; | 315 }; |
325 Representation representations[] = { | 316 Representation representations[] = { |
326 Representation::Tagged(), // callee | 317 Representation::Tagged(), // callee |
327 Representation::Tagged(), // call_data | 318 Representation::Tagged(), // call_data |
328 Representation::Tagged(), // holder | 319 Representation::Tagged(), // holder |
329 Representation::External(), // api_function_address | 320 Representation::External() // api_function_address |
330 Representation::Tagged(), // context | |
331 }; | 321 }; |
332 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); | 322 descriptor->Initialize(ARRAY_SIZE(registers), registers, representations); |
333 } | 323 } |
334 } | 324 } |
335 | 325 |
336 | 326 |
337 #define __ ACCESS_MASM(masm) | 327 #define __ ACCESS_MASM(masm) |
338 | 328 |
339 | 329 |
340 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { | 330 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { |
(...skipping 4635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4976 Operand(ebp, 7 * kPointerSize), | 4966 Operand(ebp, 7 * kPointerSize), |
4977 NULL); | 4967 NULL); |
4978 } | 4968 } |
4979 | 4969 |
4980 | 4970 |
4981 #undef __ | 4971 #undef __ |
4982 | 4972 |
4983 } } // namespace v8::internal | 4973 } } // namespace v8::internal |
4984 | 4974 |
4985 #endif // V8_TARGET_ARCH_IA32 | 4975 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |