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

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

Issue 443903002: Version 3.27.34.12 (merged r22693) (Closed) Base URL: https://v8.googlecode.com/svn/branches/3.27
Patch Set: Created 6 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/ic.cc ('k') | src/version.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 // 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_MIPS 7 #if V8_TARGET_ARCH_MIPS
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 3222 matching lines...) Expand 10 before | Expand all | Expand 10 after
3233 Label miss; 3233 Label miss;
3234 3234
3235 EmitLoadTypeFeedbackVector(masm, a2); 3235 EmitLoadTypeFeedbackVector(masm, a2);
3236 3236
3237 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at); 3237 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at);
3238 __ Branch(&miss, ne, a1, Operand(at)); 3238 __ Branch(&miss, ne, a1, Operand(at));
3239 3239
3240 __ li(a0, Operand(arg_count())); 3240 __ li(a0, Operand(arg_count()));
3241 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize); 3241 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize);
3242 __ Addu(at, a2, Operand(at)); 3242 __ Addu(at, a2, Operand(at));
3243 __ lw(a2, FieldMemOperand(at, FixedArray::kHeaderSize)); 3243 __ lw(t0, FieldMemOperand(at, FixedArray::kHeaderSize));
3244 // Verify that a2 contains an AllocationSite 3244
3245 __ AssertUndefinedOrAllocationSite(a2, at); 3245 // Verify that t0 contains an AllocationSite
3246 __ lw(t1, FieldMemOperand(t0, HeapObject::kMapOffset));
3247 __ LoadRoot(at, Heap::kAllocationSiteMapRootIndex);
3248 __ Branch(&miss, ne, t1, Operand(at));
3249
3250 __ mov(a2, t0);
3246 ArrayConstructorStub stub(masm->isolate(), arg_count()); 3251 ArrayConstructorStub stub(masm->isolate(), arg_count());
3247 __ TailCallStub(&stub); 3252 __ TailCallStub(&stub);
3248 3253
3249 __ bind(&miss); 3254 __ bind(&miss);
3250 GenerateMiss(masm, IC::kCallIC_Customization_Miss); 3255 GenerateMiss(masm, IC::kCallIC_Customization_Miss);
3251 3256
3252 // The slow case, we need this no matter what to complete a call after a miss. 3257 // The slow case, we need this no matter what to complete a call after a miss.
3253 CallFunctionNoFeedback(masm, 3258 CallFunctionNoFeedback(masm,
3254 arg_count(), 3259 arg_count(),
3255 true, 3260 true,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3302 3307
3303 __ bind(&extra_checks_or_miss); 3308 __ bind(&extra_checks_or_miss);
3304 Label miss; 3309 Label miss;
3305 3310
3306 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex); 3311 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex);
3307 __ Branch(&slow_start, eq, t0, Operand(at)); 3312 __ Branch(&slow_start, eq, t0, Operand(at));
3308 __ LoadRoot(at, Heap::kUninitializedSymbolRootIndex); 3313 __ LoadRoot(at, Heap::kUninitializedSymbolRootIndex);
3309 __ Branch(&miss, eq, t0, Operand(at)); 3314 __ Branch(&miss, eq, t0, Operand(at));
3310 3315
3311 if (!FLAG_trace_ic) { 3316 if (!FLAG_trace_ic) {
3312 // We are going megamorphic, and we don't want to visit the runtime. 3317 // We are going megamorphic. If the feedback is a JSFunction, it is fine
3318 // to handle it here. More complex cases are dealt with in the runtime.
3319 __ AssertNotSmi(t0);
3320 __ GetObjectType(t0, t1, t1);
3321 __ Branch(&miss, ne, t1, Operand(JS_FUNCTION_TYPE));
3313 __ sll(t0, a3, kPointerSizeLog2 - kSmiTagSize); 3322 __ sll(t0, a3, kPointerSizeLog2 - kSmiTagSize);
3314 __ Addu(t0, a2, Operand(t0)); 3323 __ Addu(t0, a2, Operand(t0));
3315 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex); 3324 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex);
3316 __ sw(at, FieldMemOperand(t0, FixedArray::kHeaderSize)); 3325 __ sw(at, FieldMemOperand(t0, FixedArray::kHeaderSize));
3317 __ Branch(&slow_start); 3326 __ Branch(&slow_start);
3318 } 3327 }
3319 3328
3320 // We are here because tracing is on or we are going monomorphic. 3329 // We are here because tracing is on or we are going monomorphic.
3321 __ bind(&miss); 3330 __ bind(&miss);
3322 GenerateMiss(masm, IC::kCallIC_Miss); 3331 GenerateMiss(masm, IC::kCallIC_Miss);
(...skipping 2084 matching lines...) Expand 10 before | Expand all | Expand 10 after
5407 MemOperand(fp, 6 * kPointerSize), 5416 MemOperand(fp, 6 * kPointerSize),
5408 NULL); 5417 NULL);
5409 } 5418 }
5410 5419
5411 5420
5412 #undef __ 5421 #undef __
5413 5422
5414 } } // namespace v8::internal 5423 } } // namespace v8::internal
5415 5424
5416 #endif // V8_TARGET_ARCH_MIPS 5425 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/ic.cc ('k') | src/version.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698