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

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

Issue 10832365: Rename Context::global to Context::global_object, (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed Michael's comments. Created 8 years, 4 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/ia32/builtins-ia32.cc ('k') | src/ia32/full-codegen-ia32.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 75
76 // Get the function info from the stack. 76 // Get the function info from the stack.
77 __ mov(edx, Operand(esp, 1 * kPointerSize)); 77 __ mov(edx, Operand(esp, 1 * kPointerSize));
78 78
79 int map_index = (language_mode_ == CLASSIC_MODE) 79 int map_index = (language_mode_ == CLASSIC_MODE)
80 ? Context::FUNCTION_MAP_INDEX 80 ? Context::FUNCTION_MAP_INDEX
81 : Context::STRICT_MODE_FUNCTION_MAP_INDEX; 81 : Context::STRICT_MODE_FUNCTION_MAP_INDEX;
82 82
83 // Compute the function map in the current native context and set that 83 // Compute the function map in the current native context and set that
84 // as the map of the allocated object. 84 // as the map of the allocated object.
85 __ mov(ecx, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX))); 85 __ mov(ecx, Operand(esi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
86 __ mov(ecx, FieldOperand(ecx, GlobalObject::kNativeContextOffset)); 86 __ mov(ecx, FieldOperand(ecx, GlobalObject::kNativeContextOffset));
87 __ mov(ebx, Operand(ecx, Context::SlotOffset(map_index))); 87 __ mov(ebx, Operand(ecx, Context::SlotOffset(map_index)));
88 __ mov(FieldOperand(eax, JSObject::kMapOffset), ebx); 88 __ mov(FieldOperand(eax, JSObject::kMapOffset), ebx);
89 89
90 // Initialize the rest of the function. We don't have to update the 90 // Initialize the rest of the function. We don't have to update the
91 // write barrier because the allocated object is in new space. 91 // write barrier because the allocated object is in new space.
92 Factory* factory = masm->isolate()->factory(); 92 Factory* factory = masm->isolate()->factory();
93 __ mov(ebx, Immediate(factory->empty_fixed_array())); 93 __ mov(ebx, Immediate(factory->empty_fixed_array()));
94 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), ebx); 94 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), ebx);
95 __ mov(FieldOperand(eax, JSObject::kElementsOffset), ebx); 95 __ mov(FieldOperand(eax, JSObject::kElementsOffset), ebx);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 __ mov(FieldOperand(eax, Context::kLengthOffset), 210 __ mov(FieldOperand(eax, Context::kLengthOffset),
211 Immediate(Smi::FromInt(length))); 211 Immediate(Smi::FromInt(length)));
212 212
213 // Set up the fixed slots. 213 // Set up the fixed slots.
214 __ Set(ebx, Immediate(0)); // Set to NULL. 214 __ Set(ebx, Immediate(0)); // Set to NULL.
215 __ mov(Operand(eax, Context::SlotOffset(Context::CLOSURE_INDEX)), ecx); 215 __ mov(Operand(eax, Context::SlotOffset(Context::CLOSURE_INDEX)), ecx);
216 __ mov(Operand(eax, Context::SlotOffset(Context::PREVIOUS_INDEX)), esi); 216 __ mov(Operand(eax, Context::SlotOffset(Context::PREVIOUS_INDEX)), esi);
217 __ mov(Operand(eax, Context::SlotOffset(Context::EXTENSION_INDEX)), ebx); 217 __ mov(Operand(eax, Context::SlotOffset(Context::EXTENSION_INDEX)), ebx);
218 218
219 // Copy the global object from the previous context. 219 // Copy the global object from the previous context.
220 __ mov(ebx, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX))); 220 __ mov(ebx, Operand(esi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
221 __ mov(Operand(eax, Context::SlotOffset(Context::GLOBAL_INDEX)), ebx); 221 __ mov(Operand(eax, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)), ebx);
222 222
223 // Initialize the rest of the slots to undefined. 223 // Initialize the rest of the slots to undefined.
224 __ mov(ebx, factory->undefined_value()); 224 __ mov(ebx, factory->undefined_value());
225 for (int i = Context::MIN_CONTEXT_SLOTS; i < length; i++) { 225 for (int i = Context::MIN_CONTEXT_SLOTS; i < length; i++) {
226 __ mov(Operand(eax, Context::SlotOffset(i)), ebx); 226 __ mov(Operand(eax, Context::SlotOffset(i)), ebx);
227 } 227 }
228 228
229 // Return and remove the on-stack parameter. 229 // Return and remove the on-stack parameter.
230 __ mov(esi, eax); 230 __ mov(esi, eax);
231 __ ret(1 * kPointerSize); 231 __ ret(1 * kPointerSize);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 __ mov(ecx, FieldOperand(ecx, GlobalObject::kNativeContextOffset)); 276 __ mov(ecx, FieldOperand(ecx, GlobalObject::kNativeContextOffset));
277 __ mov(ecx, ContextOperand(ecx, Context::CLOSURE_INDEX)); 277 __ mov(ecx, ContextOperand(ecx, Context::CLOSURE_INDEX));
278 __ bind(&after_sentinel); 278 __ bind(&after_sentinel);
279 279
280 // Set up the fixed slots. 280 // Set up the fixed slots.
281 __ mov(ContextOperand(eax, Context::CLOSURE_INDEX), ecx); 281 __ mov(ContextOperand(eax, Context::CLOSURE_INDEX), ecx);
282 __ mov(ContextOperand(eax, Context::PREVIOUS_INDEX), esi); 282 __ mov(ContextOperand(eax, Context::PREVIOUS_INDEX), esi);
283 __ mov(ContextOperand(eax, Context::EXTENSION_INDEX), ebx); 283 __ mov(ContextOperand(eax, Context::EXTENSION_INDEX), ebx);
284 284
285 // Copy the global object from the previous context. 285 // Copy the global object from the previous context.
286 __ mov(ebx, ContextOperand(esi, Context::GLOBAL_INDEX)); 286 __ mov(ebx, ContextOperand(esi, Context::GLOBAL_OBJECT_INDEX));
287 __ mov(ContextOperand(eax, Context::GLOBAL_INDEX), ebx); 287 __ mov(ContextOperand(eax, Context::GLOBAL_OBJECT_INDEX), ebx);
288 288
289 // Initialize the rest of the slots to the hole value. 289 // Initialize the rest of the slots to the hole value.
290 if (slots_ == 1) { 290 if (slots_ == 1) {
291 __ mov(ContextOperand(eax, Context::MIN_CONTEXT_SLOTS), 291 __ mov(ContextOperand(eax, Context::MIN_CONTEXT_SLOTS),
292 factory->the_hole_value()); 292 factory->the_hole_value());
293 } else { 293 } else {
294 __ mov(ebx, factory->the_hole_value()); 294 __ mov(ebx, factory->the_hole_value());
295 for (int i = 0; i < slots_; i++) { 295 for (int i = 0; i < slots_; i++) {
296 __ mov(ContextOperand(eax, i + Context::MIN_CONTEXT_SLOTS), ebx); 296 __ mov(ContextOperand(eax, i + Context::MIN_CONTEXT_SLOTS), ebx);
297 } 297 }
(...skipping 3129 matching lines...) Expand 10 before | Expand all | Expand 10 after
3427 __ add(ebx, Immediate(Heap::kArgumentsObjectSize)); 3427 __ add(ebx, Immediate(Heap::kArgumentsObjectSize));
3428 3428
3429 // Do the allocation of all three objects in one go. 3429 // Do the allocation of all three objects in one go.
3430 __ AllocateInNewSpace(ebx, eax, edx, edi, &runtime, TAG_OBJECT); 3430 __ AllocateInNewSpace(ebx, eax, edx, edi, &runtime, TAG_OBJECT);
3431 3431
3432 // eax = address of new object(s) (tagged) 3432 // eax = address of new object(s) (tagged)
3433 // ecx = argument count (tagged) 3433 // ecx = argument count (tagged)
3434 // esp[0] = mapped parameter count (tagged) 3434 // esp[0] = mapped parameter count (tagged)
3435 // esp[8] = parameter count (tagged) 3435 // esp[8] = parameter count (tagged)
3436 // esp[12] = address of receiver argument 3436 // esp[12] = address of receiver argument
3437 // Get the arguments boilerplate from the current (global) context into edi. 3437 // Get the arguments boilerplate from the current native context into edi.
3438 Label has_mapped_parameters, copy; 3438 Label has_mapped_parameters, copy;
3439 __ mov(edi, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX))); 3439 __ mov(edi, Operand(esi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
3440 __ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset)); 3440 __ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset));
3441 __ mov(ebx, Operand(esp, 0 * kPointerSize)); 3441 __ mov(ebx, Operand(esp, 0 * kPointerSize));
3442 __ test(ebx, ebx); 3442 __ test(ebx, ebx);
3443 __ j(not_zero, &has_mapped_parameters, Label::kNear); 3443 __ j(not_zero, &has_mapped_parameters, Label::kNear);
3444 __ mov(edi, Operand(edi, 3444 __ mov(edi, Operand(edi,
3445 Context::SlotOffset(Context::ARGUMENTS_BOILERPLATE_INDEX))); 3445 Context::SlotOffset(Context::ARGUMENTS_BOILERPLATE_INDEX)));
3446 __ jmp(&copy, Label::kNear); 3446 __ jmp(&copy, Label::kNear);
3447 3447
3448 __ bind(&has_mapped_parameters); 3448 __ bind(&has_mapped_parameters);
3449 __ mov(edi, Operand(edi, 3449 __ mov(edi, Operand(edi,
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
3620 __ bind(&try_allocate); 3620 __ bind(&try_allocate);
3621 __ test(ecx, ecx); 3621 __ test(ecx, ecx);
3622 __ j(zero, &add_arguments_object, Label::kNear); 3622 __ j(zero, &add_arguments_object, Label::kNear);
3623 __ lea(ecx, Operand(ecx, times_2, FixedArray::kHeaderSize)); 3623 __ lea(ecx, Operand(ecx, times_2, FixedArray::kHeaderSize));
3624 __ bind(&add_arguments_object); 3624 __ bind(&add_arguments_object);
3625 __ add(ecx, Immediate(Heap::kArgumentsObjectSizeStrict)); 3625 __ add(ecx, Immediate(Heap::kArgumentsObjectSizeStrict));
3626 3626
3627 // Do the allocation of both objects in one go. 3627 // Do the allocation of both objects in one go.
3628 __ AllocateInNewSpace(ecx, eax, edx, ebx, &runtime, TAG_OBJECT); 3628 __ AllocateInNewSpace(ecx, eax, edx, ebx, &runtime, TAG_OBJECT);
3629 3629
3630 // Get the arguments boilerplate from the current (global) context. 3630 // Get the arguments boilerplate from the current native context.
3631 __ mov(edi, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX))); 3631 __ mov(edi, Operand(esi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
3632 __ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset)); 3632 __ mov(edi, FieldOperand(edi, GlobalObject::kNativeContextOffset));
3633 const int offset = 3633 const int offset =
3634 Context::SlotOffset(Context::STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX); 3634 Context::SlotOffset(Context::STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX);
3635 __ mov(edi, Operand(edi, offset)); 3635 __ mov(edi, Operand(edi, offset));
3636 3636
3637 // Copy the JS object part. 3637 // Copy the JS object part.
3638 for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) { 3638 for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) {
3639 __ mov(ebx, FieldOperand(edi, i)); 3639 __ mov(ebx, FieldOperand(edi, i));
3640 __ mov(FieldOperand(eax, i), ebx); 3640 __ mov(FieldOperand(eax, i), ebx);
3641 } 3641 }
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
4135 ecx, // Out: End of allocation. 4135 ecx, // Out: End of allocation.
4136 edx, // Scratch register 4136 edx, // Scratch register
4137 &slowcase, 4137 &slowcase,
4138 TAG_OBJECT); 4138 TAG_OBJECT);
4139 // eax: Start of allocated area, object-tagged. 4139 // eax: Start of allocated area, object-tagged.
4140 4140
4141 // Set JSArray map to global.regexp_result_map(). 4141 // Set JSArray map to global.regexp_result_map().
4142 // Set empty properties FixedArray. 4142 // Set empty properties FixedArray.
4143 // Set elements to point to FixedArray allocated right after the JSArray. 4143 // Set elements to point to FixedArray allocated right after the JSArray.
4144 // Interleave operations for better latency. 4144 // Interleave operations for better latency.
4145 __ mov(edx, ContextOperand(esi, Context::GLOBAL_INDEX)); 4145 __ mov(edx, ContextOperand(esi, Context::GLOBAL_OBJECT_INDEX));
4146 Factory* factory = masm->isolate()->factory(); 4146 Factory* factory = masm->isolate()->factory();
4147 __ mov(ecx, Immediate(factory->empty_fixed_array())); 4147 __ mov(ecx, Immediate(factory->empty_fixed_array()));
4148 __ lea(ebx, Operand(eax, JSRegExpResult::kSize)); 4148 __ lea(ebx, Operand(eax, JSRegExpResult::kSize));
4149 __ mov(edx, FieldOperand(edx, GlobalObject::kNativeContextOffset)); 4149 __ mov(edx, FieldOperand(edx, GlobalObject::kNativeContextOffset));
4150 __ mov(FieldOperand(eax, JSObject::kElementsOffset), ebx); 4150 __ mov(FieldOperand(eax, JSObject::kElementsOffset), ebx);
4151 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), ecx); 4151 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), ecx);
4152 __ mov(edx, ContextOperand(edx, Context::REGEXP_RESULT_MAP_INDEX)); 4152 __ mov(edx, ContextOperand(edx, Context::REGEXP_RESULT_MAP_INDEX));
4153 __ mov(FieldOperand(eax, HeapObject::kMapOffset), edx); 4153 __ mov(FieldOperand(eax, HeapObject::kMapOffset), edx);
4154 4154
4155 // Set input, index and length fields from arguments. 4155 // Set input, index and length fields from arguments.
(...skipping 3348 matching lines...) Expand 10 before | Expand all | Expand 10 after
7504 // Restore ecx. 7504 // Restore ecx.
7505 __ pop(ecx); 7505 __ pop(ecx);
7506 __ ret(0); 7506 __ ret(0);
7507 } 7507 }
7508 7508
7509 #undef __ 7509 #undef __
7510 7510
7511 } } // namespace v8::internal 7511 } } // namespace v8::internal
7512 7512
7513 #endif // V8_TARGET_ARCH_IA32 7513 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/builtins-ia32.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698