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

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

Issue 137403009: Adding a type vector to replace type cells. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed feedback. Created 6 years, 10 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/heap.cc ('k') | src/ia32/debug-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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 descriptor->register_param_count_ = 4; 103 descriptor->register_param_count_ = 4;
104 descriptor->register_params_ = registers; 104 descriptor->register_params_ = registers;
105 descriptor->deoptimization_handler_ = 105 descriptor->deoptimization_handler_ =
106 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry; 106 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry;
107 } 107 }
108 108
109 109
110 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( 110 void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
111 Isolate* isolate, 111 Isolate* isolate,
112 CodeStubInterfaceDescriptor* descriptor) { 112 CodeStubInterfaceDescriptor* descriptor) {
113 static Register registers[] = { ebx }; 113 static Register registers[] = { ebx, edx };
114 descriptor->register_param_count_ = 1; 114 descriptor->register_param_count_ = 2;
115 descriptor->register_params_ = registers; 115 descriptor->register_params_ = registers;
116 descriptor->deoptimization_handler_ = NULL; 116 descriptor->deoptimization_handler_ = NULL;
117 } 117 }
118 118
119 119
120 void KeyedLoadFastElementStub::InitializeInterfaceDescriptor( 120 void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
121 Isolate* isolate, 121 Isolate* isolate,
122 CodeStubInterfaceDescriptor* descriptor) { 122 CodeStubInterfaceDescriptor* descriptor) {
123 static Register registers[] = { edx, ecx }; 123 static Register registers[] = { edx, ecx };
124 descriptor->register_param_count_ = 2; 124 descriptor->register_param_count_ = 2;
(...skipping 2190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2315 // Call the native; it returns -1 (less), 0 (equal), or 1 (greater) 2315 // Call the native; it returns -1 (less), 0 (equal), or 1 (greater)
2316 // tagged as a small integer. 2316 // tagged as a small integer.
2317 __ InvokeBuiltin(builtin, JUMP_FUNCTION); 2317 __ InvokeBuiltin(builtin, JUMP_FUNCTION);
2318 2318
2319 __ bind(&miss); 2319 __ bind(&miss);
2320 GenerateMiss(masm); 2320 GenerateMiss(masm);
2321 } 2321 }
2322 2322
2323 2323
2324 static void GenerateRecordCallTarget(MacroAssembler* masm) { 2324 static void GenerateRecordCallTarget(MacroAssembler* masm) {
2325 // Cache the called function in a global property cell. Cache states 2325 // Cache the called function in a feedback vector slot. Cache states
2326 // are uninitialized, monomorphic (indicated by a JSFunction), and 2326 // are uninitialized, monomorphic (indicated by a JSFunction), and
2327 // megamorphic. 2327 // megamorphic.
2328 // eax : number of arguments to the construct function 2328 // eax : number of arguments to the construct function
2329 // ebx : cache cell for call target 2329 // ebx : Feedback vector
2330 // edx : slot in feedback vector (Smi)
2330 // edi : the function to call 2331 // edi : the function to call
2331 Isolate* isolate = masm->isolate(); 2332 Isolate* isolate = masm->isolate();
2332 Label initialize, done, miss, megamorphic, not_array_function; 2333 Label initialize, done, miss, megamorphic, not_array_function;
2333 2334
2334 // Load the cache state into ecx. 2335 // Load the cache state into ecx.
2335 __ mov(ecx, FieldOperand(ebx, Cell::kValueOffset)); 2336 __ mov(ecx, FieldOperand(ebx, edx, times_half_pointer_size,
2337 FixedArray::kHeaderSize));
2336 2338
2337 // A monomorphic cache hit or an already megamorphic state: invoke the 2339 // A monomorphic cache hit or an already megamorphic state: invoke the
2338 // function without changing the state. 2340 // function without changing the state.
2339 __ cmp(ecx, edi); 2341 __ cmp(ecx, edi);
2340 __ j(equal, &done); 2342 __ j(equal, &done, Label::kFar);
2341 __ cmp(ecx, Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate))); 2343 __ cmp(ecx, Immediate(TypeFeedbackInfo::MegamorphicSentinel(isolate)));
2342 __ j(equal, &done); 2344 __ j(equal, &done, Label::kFar);
2343 2345
2344 // If we came here, we need to see if we are the array function. 2346 // If we came here, we need to see if we are the array function.
2345 // If we didn't have a matching function, and we didn't find the megamorph 2347 // If we didn't have a matching function, and we didn't find the megamorph
2346 // sentinel, then we have in the cell either some other function or an 2348 // sentinel, then we have in the slot either some other function or an
2347 // AllocationSite. Do a map check on the object in ecx. 2349 // AllocationSite. Do a map check on the object in ecx.
2348 Handle<Map> allocation_site_map = 2350 Handle<Map> allocation_site_map =
2349 masm->isolate()->factory()->allocation_site_map(); 2351 masm->isolate()->factory()->allocation_site_map();
2350 __ cmp(FieldOperand(ecx, 0), Immediate(allocation_site_map)); 2352 __ cmp(FieldOperand(ecx, 0), Immediate(allocation_site_map));
2351 __ j(not_equal, &miss); 2353 __ j(not_equal, &miss);
2352 2354
2353 // Load the global or builtins object from the current context 2355 // Load the global or builtins object from the current context
2354 __ LoadGlobalContext(ecx); 2356 __ LoadGlobalContext(ecx);
2355 // Make sure the function is the Array() function 2357 // Make sure the function is the Array() function
2356 __ cmp(edi, Operand(ecx, 2358 __ cmp(edi, Operand(ecx,
2357 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX))); 2359 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX)));
2358 __ j(not_equal, &megamorphic); 2360 __ j(not_equal, &megamorphic);
2359 __ jmp(&done); 2361 __ jmp(&done, Label::kFar);
2360 2362
2361 __ bind(&miss); 2363 __ bind(&miss);
2362 2364
2363 // A monomorphic miss (i.e, here the cache is not uninitialized) goes 2365 // A monomorphic miss (i.e, here the cache is not uninitialized) goes
2364 // megamorphic. 2366 // megamorphic.
2365 __ cmp(ecx, Immediate(TypeFeedbackCells::UninitializedSentinel(isolate))); 2367 __ cmp(ecx, Immediate(TypeFeedbackInfo::UninitializedSentinel(isolate)));
2366 __ j(equal, &initialize); 2368 __ j(equal, &initialize);
2367 // MegamorphicSentinel is an immortal immovable object (undefined) so no 2369 // MegamorphicSentinel is an immortal immovable object (undefined) so no
2368 // write-barrier is needed. 2370 // write-barrier is needed.
2369 __ bind(&megamorphic); 2371 __ bind(&megamorphic);
2370 __ mov(FieldOperand(ebx, Cell::kValueOffset), 2372 __ mov(FieldOperand(ebx, edx, times_half_pointer_size,
2371 Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate))); 2373 FixedArray::kHeaderSize),
2372 __ jmp(&done, Label::kNear); 2374 Immediate(TypeFeedbackInfo::MegamorphicSentinel(isolate)));
2375 __ jmp(&done, Label::kFar);
2373 2376
2374 // An uninitialized cache is patched with the function or sentinel to 2377 // An uninitialized cache is patched with the function or sentinel to
2375 // indicate the ElementsKind if function is the Array constructor. 2378 // indicate the ElementsKind if function is the Array constructor.
2376 __ bind(&initialize); 2379 __ bind(&initialize);
2377 __ LoadGlobalContext(ecx); 2380 __ LoadGlobalContext(ecx);
2378 // Make sure the function is the Array() function 2381 // Make sure the function is the Array() function
2379 __ cmp(edi, Operand(ecx, 2382 __ cmp(edi, Operand(ecx,
2380 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX))); 2383 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX)));
2381 __ j(not_equal, &not_array_function); 2384 __ j(not_equal, &not_array_function);
2382 2385
2383 // The target function is the Array constructor, 2386 // The target function is the Array constructor,
2384 // Create an AllocationSite if we don't already have it, store it in the cell 2387 // Create an AllocationSite if we don't already have it, store it in the slot.
2385 { 2388 {
2386 FrameScope scope(masm, StackFrame::INTERNAL); 2389 FrameScope scope(masm, StackFrame::INTERNAL);
2387 2390
2388 // Arguments register must be smi-tagged to call out. 2391 // Arguments register must be smi-tagged to call out.
2389 __ SmiTag(eax); 2392 __ SmiTag(eax);
2390 __ push(eax); 2393 __ push(eax);
2391 __ push(edi); 2394 __ push(edi);
2395 __ push(edx);
2392 __ push(ebx); 2396 __ push(ebx);
2393 2397
2394 CreateAllocationSiteStub create_stub; 2398 CreateAllocationSiteStub create_stub;
2395 __ CallStub(&create_stub); 2399 __ CallStub(&create_stub);
2396 2400
2397 __ pop(ebx); 2401 __ pop(ebx);
2402 __ pop(edx);
2398 __ pop(edi); 2403 __ pop(edi);
2399 __ pop(eax); 2404 __ pop(eax);
2400 __ SmiUntag(eax); 2405 __ SmiUntag(eax);
2401 } 2406 }
2402 __ jmp(&done); 2407 __ jmp(&done);
2403 2408
2404 __ bind(&not_array_function); 2409 __ bind(&not_array_function);
2405 __ mov(FieldOperand(ebx, Cell::kValueOffset), edi); 2410 __ mov(FieldOperand(ebx, edx, times_half_pointer_size,
2406 // No need for a write barrier here - cells are rescanned. 2411 FixedArray::kHeaderSize),
2412 edi);
2413 // We won't need edx or ebx anymore, just save edi
2414 __ push(edi);
2415 __ push(ebx);
2416 __ push(edx);
2417 __ RecordWriteArray(ebx, edi, edx, kDontSaveFPRegs,
2418 EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
2419 __ pop(edx);
2420 __ pop(ebx);
2421 __ pop(edi);
2407 2422
2408 __ bind(&done); 2423 __ bind(&done);
2409 } 2424 }
2410 2425
2411 2426
2412 void CallFunctionStub::Generate(MacroAssembler* masm) { 2427 void CallFunctionStub::Generate(MacroAssembler* masm) {
2413 // ebx : cache cell for call target 2428 // ebx : feedback vector
2429 // edx : (only if ebx is not undefined) slot in feedback vector (Smi)
2414 // edi : the function to call 2430 // edi : the function to call
2415 Isolate* isolate = masm->isolate(); 2431 Isolate* isolate = masm->isolate();
2416 Label slow, non_function, wrap, cont; 2432 Label slow, non_function, wrap, cont;
2417 2433
2418 if (NeedsChecks()) { 2434 if (NeedsChecks()) {
2419 // Check that the function really is a JavaScript function. 2435 // Check that the function really is a JavaScript function.
2420 __ JumpIfSmi(edi, &non_function); 2436 __ JumpIfSmi(edi, &non_function);
2421 2437
2422 // Goto slow case if we do not have a function. 2438 // Goto slow case if we do not have a function.
2423 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); 2439 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2462 2478
2463 __ InvokeFunction(edi, actual, JUMP_FUNCTION, NullCallWrapper()); 2479 __ InvokeFunction(edi, actual, JUMP_FUNCTION, NullCallWrapper());
2464 2480
2465 if (NeedsChecks()) { 2481 if (NeedsChecks()) {
2466 // Slow-case: Non-function called. 2482 // Slow-case: Non-function called.
2467 __ bind(&slow); 2483 __ bind(&slow);
2468 if (RecordCallTarget()) { 2484 if (RecordCallTarget()) {
2469 // If there is a call target cache, mark it megamorphic in the 2485 // If there is a call target cache, mark it megamorphic in the
2470 // non-function case. MegamorphicSentinel is an immortal immovable 2486 // non-function case. MegamorphicSentinel is an immortal immovable
2471 // object (undefined) so no write barrier is needed. 2487 // object (undefined) so no write barrier is needed.
2472 __ mov(FieldOperand(ebx, Cell::kValueOffset), 2488 __ mov(FieldOperand(ebx, edx, times_half_pointer_size,
2473 Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate))); 2489 FixedArray::kHeaderSize),
2490 Immediate(TypeFeedbackInfo::MegamorphicSentinel(isolate)));
2474 } 2491 }
2475 // Check for function proxy. 2492 // Check for function proxy.
2476 __ CmpInstanceType(ecx, JS_FUNCTION_PROXY_TYPE); 2493 __ CmpInstanceType(ecx, JS_FUNCTION_PROXY_TYPE);
2477 __ j(not_equal, &non_function); 2494 __ j(not_equal, &non_function);
2478 __ pop(ecx); 2495 __ pop(ecx);
2479 __ push(edi); // put proxy as additional argument under return address 2496 __ push(edi); // put proxy as additional argument under return address
2480 __ push(ecx); 2497 __ push(ecx);
2481 __ Set(eax, Immediate(argc_ + 1)); 2498 __ Set(eax, Immediate(argc_ + 1));
2482 __ Set(ebx, Immediate(0)); 2499 __ Set(ebx, Immediate(0));
2483 __ GetBuiltinEntry(edx, Builtins::CALL_FUNCTION_PROXY); 2500 __ GetBuiltinEntry(edx, Builtins::CALL_FUNCTION_PROXY);
(...skipping 23 matching lines...) Expand all
2507 __ pop(edi); 2524 __ pop(edi);
2508 } 2525 }
2509 __ mov(Operand(esp, (argc_ + 1) * kPointerSize), eax); 2526 __ mov(Operand(esp, (argc_ + 1) * kPointerSize), eax);
2510 __ jmp(&cont); 2527 __ jmp(&cont);
2511 } 2528 }
2512 } 2529 }
2513 2530
2514 2531
2515 void CallConstructStub::Generate(MacroAssembler* masm) { 2532 void CallConstructStub::Generate(MacroAssembler* masm) {
2516 // eax : number of arguments 2533 // eax : number of arguments
2517 // ebx : cache cell for call target 2534 // ebx : feedback vector
2535 // edx : (only if ebx is not undefined) slot in feedback vector (Smi)
2518 // edi : constructor function 2536 // edi : constructor function
2519 Label slow, non_function_call; 2537 Label slow, non_function_call;
2520 2538
2521 // Check that function is not a smi. 2539 // Check that function is not a smi.
2522 __ JumpIfSmi(edi, &non_function_call); 2540 __ JumpIfSmi(edi, &non_function_call);
2523 // Check that function is a JSFunction. 2541 // Check that function is a JSFunction.
2524 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); 2542 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx);
2525 __ j(not_equal, &slow); 2543 __ j(not_equal, &slow);
2526 2544
2527 if (RecordCallTarget()) { 2545 if (RecordCallTarget()) {
(...skipping 2602 matching lines...) Expand 10 before | Expand all | Expand 10 after
5130 CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode); 5148 CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode);
5131 } else { 5149 } else {
5132 UNREACHABLE(); 5150 UNREACHABLE();
5133 } 5151 }
5134 } 5152 }
5135 5153
5136 5154
5137 void ArrayConstructorStub::Generate(MacroAssembler* masm) { 5155 void ArrayConstructorStub::Generate(MacroAssembler* masm) {
5138 // ----------- S t a t e ------------- 5156 // ----------- S t a t e -------------
5139 // -- eax : argc (only if argument_count_ == ANY) 5157 // -- eax : argc (only if argument_count_ == ANY)
5140 // -- ebx : type info cell 5158 // -- ebx : feedback vector (fixed array or undefined)
5159 // -- edx : slot index (if ebx is fixed array)
5141 // -- edi : constructor 5160 // -- edi : constructor
5142 // -- esp[0] : return address 5161 // -- esp[0] : return address
5143 // -- esp[4] : last argument 5162 // -- esp[4] : last argument
5144 // ----------------------------------- 5163 // -----------------------------------
5145 Handle<Object> undefined_sentinel( 5164 Handle<Object> undefined_sentinel(
5146 masm->isolate()->heap()->undefined_value(), 5165 masm->isolate()->heap()->undefined_value(),
5147 masm->isolate()); 5166 masm->isolate());
5148 5167
5149 if (FLAG_debug_code) { 5168 if (FLAG_debug_code) {
5150 // The array construct code is only set for the global and natives 5169 // The array construct code is only set for the global and natives
5151 // builtin Array functions which always have maps. 5170 // builtin Array functions which always have maps.
5152 5171
5153 // Initial map for the builtin Array function should be a map. 5172 // Initial map for the builtin Array function should be a map.
5154 __ mov(ecx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset)); 5173 __ mov(ecx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset));
5155 // Will both indicate a NULL and a Smi. 5174 // Will both indicate a NULL and a Smi.
5156 __ test(ecx, Immediate(kSmiTagMask)); 5175 __ test(ecx, Immediate(kSmiTagMask));
5157 __ Assert(not_zero, kUnexpectedInitialMapForArrayFunction); 5176 __ Assert(not_zero, kUnexpectedInitialMapForArrayFunction);
5158 __ CmpObjectType(ecx, MAP_TYPE, ecx); 5177 __ CmpObjectType(ecx, MAP_TYPE, ecx);
5159 __ Assert(equal, kUnexpectedInitialMapForArrayFunction); 5178 __ Assert(equal, kUnexpectedInitialMapForArrayFunction);
5160 5179
5161 // We should either have undefined in ebx or a valid cell 5180 // We should either have undefined in ebx or a valid fixed array.
5162 Label okay_here; 5181 Label okay_here;
5163 Handle<Map> cell_map = masm->isolate()->factory()->cell_map(); 5182 Handle<Map> fixed_array_map = masm->isolate()->factory()->fixed_array_map();
5164 __ cmp(ebx, Immediate(undefined_sentinel)); 5183 __ cmp(ebx, Immediate(undefined_sentinel));
5165 __ j(equal, &okay_here); 5184 __ j(equal, &okay_here);
5166 __ cmp(FieldOperand(ebx, 0), Immediate(cell_map)); 5185 __ cmp(FieldOperand(ebx, 0), Immediate(fixed_array_map));
5167 __ Assert(equal, kExpectedPropertyCellInRegisterEbx); 5186 __ Assert(equal, kExpectedFixedArrayInRegisterEbx);
5187
5188 // edx should be a smi if we don't have undefined in ebx.
5189 __ AssertSmi(edx);
5190
5168 __ bind(&okay_here); 5191 __ bind(&okay_here);
5169 } 5192 }
5170 5193
5171 Label no_info; 5194 Label no_info;
5172 // If the type cell is undefined, or contains anything other than an 5195 // If the feedback vector is undefined, or contains anything other than an
5173 // AllocationSite, call an array constructor that doesn't use AllocationSites. 5196 // AllocationSite, call an array constructor that doesn't use AllocationSites.
5174 __ cmp(ebx, Immediate(undefined_sentinel)); 5197 __ cmp(ebx, Immediate(undefined_sentinel));
5175 __ j(equal, &no_info); 5198 __ j(equal, &no_info);
5176 __ mov(ebx, FieldOperand(ebx, Cell::kValueOffset)); 5199 __ mov(ebx, FieldOperand(ebx, edx, times_half_pointer_size,
5200 FixedArray::kHeaderSize));
5177 __ cmp(FieldOperand(ebx, 0), Immediate( 5201 __ cmp(FieldOperand(ebx, 0), Immediate(
5178 masm->isolate()->factory()->allocation_site_map())); 5202 masm->isolate()->factory()->allocation_site_map()));
5179 __ j(not_equal, &no_info); 5203 __ j(not_equal, &no_info);
5180 5204
5181 // Only look at the lower 16 bits of the transition info. 5205 // Only look at the lower 16 bits of the transition info.
5182 __ mov(edx, FieldOperand(ebx, AllocationSite::kTransitionInfoOffset)); 5206 __ mov(edx, FieldOperand(ebx, AllocationSite::kTransitionInfoOffset));
5183 __ SmiUntag(edx); 5207 __ SmiUntag(edx);
5184 STATIC_ASSERT(AllocationSite::ElementsKindBits::kShift == 0); 5208 STATIC_ASSERT(AllocationSite::ElementsKindBits::kShift == 0);
5185 __ and_(edx, Immediate(AllocationSite::ElementsKindBits::kMask)); 5209 __ and_(edx, Immediate(AllocationSite::ElementsKindBits::kMask));
5186 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE); 5210 GenerateDispatchToArrayStub(masm, DONT_OVERRIDE);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5222 5246
5223 __ bind(&not_one_case); 5247 __ bind(&not_one_case);
5224 InternalArrayNArgumentsConstructorStub stubN(kind); 5248 InternalArrayNArgumentsConstructorStub stubN(kind);
5225 __ TailCallStub(&stubN); 5249 __ TailCallStub(&stubN);
5226 } 5250 }
5227 5251
5228 5252
5229 void InternalArrayConstructorStub::Generate(MacroAssembler* masm) { 5253 void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
5230 // ----------- S t a t e ------------- 5254 // ----------- S t a t e -------------
5231 // -- eax : argc 5255 // -- eax : argc
5232 // -- ebx : type info cell
5233 // -- edi : constructor 5256 // -- edi : constructor
5234 // -- esp[0] : return address 5257 // -- esp[0] : return address
5235 // -- esp[4] : last argument 5258 // -- esp[4] : last argument
5236 // ----------------------------------- 5259 // -----------------------------------
5237 5260
5238 if (FLAG_debug_code) { 5261 if (FLAG_debug_code) {
5239 // The array construct code is only set for the global and natives 5262 // The array construct code is only set for the global and natives
5240 // builtin Array functions which always have maps. 5263 // builtin Array functions which always have maps.
5241 5264
5242 // Initial map for the builtin Array function should be a map. 5265 // Initial map for the builtin Array function should be a map.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
5430 Operand(ebp, 7 * kPointerSize), 5453 Operand(ebp, 7 * kPointerSize),
5431 NULL); 5454 NULL);
5432 } 5455 }
5433 5456
5434 5457
5435 #undef __ 5458 #undef __
5436 5459
5437 } } // namespace v8::internal 5460 } } // namespace v8::internal
5438 5461
5439 #endif // V8_TARGET_ARCH_IA32 5462 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/heap.cc ('k') | src/ia32/debug-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698