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

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

Issue 420793003: MIPS: CallIC customization stubs must accept that a vector slot is cleared. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix nit. 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/mips/code-stubs-mips.cc ('k') | no next file » | 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_MIPS64 7 #if V8_TARGET_ARCH_MIPS64
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 3153 matching lines...) Expand 10 before | Expand all | Expand 10 after
3164 Label miss; 3164 Label miss;
3165 3165
3166 EmitLoadTypeFeedbackVector(masm, a2); 3166 EmitLoadTypeFeedbackVector(masm, a2);
3167 3167
3168 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at); 3168 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at);
3169 __ Branch(&miss, ne, a1, Operand(at)); 3169 __ Branch(&miss, ne, a1, Operand(at));
3170 3170
3171 __ li(a0, Operand(arg_count())); 3171 __ li(a0, Operand(arg_count()));
3172 __ dsrl(at, a3, 32 - kPointerSizeLog2); 3172 __ dsrl(at, a3, 32 - kPointerSizeLog2);
3173 __ Daddu(at, a2, Operand(at)); 3173 __ Daddu(at, a2, Operand(at));
3174 __ ld(a2, FieldMemOperand(at, FixedArray::kHeaderSize)); 3174 __ ld(a4, FieldMemOperand(at, FixedArray::kHeaderSize));
3175 // Verify that a2 contains an AllocationSite 3175
3176 __ AssertUndefinedOrAllocationSite(a2, at); 3176 // Verify that a4 contains an AllocationSite
3177 __ ld(a5, FieldMemOperand(a4, HeapObject::kMapOffset));
3178 __ LoadRoot(at, Heap::kAllocationSiteMapRootIndex);
3179 __ Branch(&miss, ne, a5, Operand(at));
3180
3181 __ mov(a2, a4);
3177 ArrayConstructorStub stub(masm->isolate(), arg_count()); 3182 ArrayConstructorStub stub(masm->isolate(), arg_count());
3178 __ TailCallStub(&stub); 3183 __ TailCallStub(&stub);
3179 3184
3180 __ bind(&miss); 3185 __ bind(&miss);
3181 GenerateMiss(masm, IC::kCallIC_Customization_Miss); 3186 GenerateMiss(masm, IC::kCallIC_Customization_Miss);
3182 3187
3183 // The slow case, we need this no matter what to complete a call after a miss. 3188 // The slow case, we need this no matter what to complete a call after a miss.
3184 CallFunctionNoFeedback(masm, 3189 CallFunctionNoFeedback(masm,
3185 arg_count(), 3190 arg_count(),
3186 true, 3191 true,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3233 3238
3234 __ bind(&extra_checks_or_miss); 3239 __ bind(&extra_checks_or_miss);
3235 Label miss; 3240 Label miss;
3236 3241
3237 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex); 3242 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex);
3238 __ Branch(&slow_start, eq, a4, Operand(at)); 3243 __ Branch(&slow_start, eq, a4, Operand(at));
3239 __ LoadRoot(at, Heap::kUninitializedSymbolRootIndex); 3244 __ LoadRoot(at, Heap::kUninitializedSymbolRootIndex);
3240 __ Branch(&miss, eq, a4, Operand(at)); 3245 __ Branch(&miss, eq, a4, Operand(at));
3241 3246
3242 if (!FLAG_trace_ic) { 3247 if (!FLAG_trace_ic) {
3243 // We are going megamorphic, and we don't want to visit the runtime. 3248 // We are going megamorphic. If the feedback is a JSFunction, it is fine
3249 // to handle it here. More complex cases are dealt with in the runtime.
3250 __ AssertNotSmi(a4);
3251 __ GetObjectType(a4, a5, a5);
3252 __ Branch(&miss, ne, a5, Operand(JS_FUNCTION_TYPE));
3244 __ dsrl(a4, a3, 32 - kPointerSizeLog2); 3253 __ dsrl(a4, a3, 32 - kPointerSizeLog2);
3245 __ Daddu(a4, a2, Operand(a4)); 3254 __ Daddu(a4, a2, Operand(a4));
3246 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex); 3255 __ LoadRoot(at, Heap::kMegamorphicSymbolRootIndex);
3247 __ sd(at, FieldMemOperand(a4, FixedArray::kHeaderSize)); 3256 __ sd(at, FieldMemOperand(a4, FixedArray::kHeaderSize));
3248 __ Branch(&slow_start); 3257 __ Branch(&slow_start);
3249 } 3258 }
3250 3259
3251 // We are here because tracing is on or we are going monomorphic. 3260 // We are here because tracing is on or we are going monomorphic.
3252 __ bind(&miss); 3261 __ bind(&miss);
3253 GenerateMiss(masm, IC::kCallIC_Miss); 3262 GenerateMiss(masm, IC::kCallIC_Miss);
(...skipping 2045 matching lines...) Expand 10 before | Expand all | Expand 10 after
5299 MemOperand(fp, 6 * kPointerSize), 5308 MemOperand(fp, 6 * kPointerSize),
5300 NULL); 5309 NULL);
5301 } 5310 }
5302 5311
5303 5312
5304 #undef __ 5313 #undef __
5305 5314
5306 } } // namespace v8::internal 5315 } } // namespace v8::internal
5307 5316
5308 #endif // V8_TARGET_ARCH_MIPS64 5317 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698