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

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

Issue 2010183003: [runtime] Kill the %NumberToIntegerMapMinusZero runtime entry. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « no previous file | src/arm64/code-stubs-arm64.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 #if V8_TARGET_ARCH_ARM 5 #if V8_TARGET_ARCH_ARM
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 DCHECK(!scratch.is(LoadWithVectorDescriptor::VectorRegister()) && 1335 DCHECK(!scratch.is(LoadWithVectorDescriptor::VectorRegister()) &&
1336 result.is(LoadWithVectorDescriptor::SlotRegister())); 1336 result.is(LoadWithVectorDescriptor::SlotRegister()));
1337 1337
1338 // StringCharAtGenerator doesn't use the result register until it's passed 1338 // StringCharAtGenerator doesn't use the result register until it's passed
1339 // the different miss possibilities. If it did, we would have a conflict 1339 // the different miss possibilities. If it did, we would have a conflict
1340 // when FLAG_vector_ics is true. 1340 // when FLAG_vector_ics is true.
1341 StringCharAtGenerator char_at_generator(receiver, index, scratch, result, 1341 StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
1342 &miss, // When not a string. 1342 &miss, // When not a string.
1343 &miss, // When not a number. 1343 &miss, // When not a number.
1344 &miss, // When index out of range. 1344 &miss, // When index out of range.
1345 STRING_INDEX_IS_ARRAY_INDEX,
1346 RECEIVER_IS_STRING); 1345 RECEIVER_IS_STRING);
1347 char_at_generator.GenerateFast(masm); 1346 char_at_generator.GenerateFast(masm);
1348 __ Ret(); 1347 __ Ret();
1349 1348
1350 StubRuntimeCallHelper call_helper; 1349 StubRuntimeCallHelper call_helper;
1351 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper); 1350 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper);
1352 1351
1353 __ bind(&miss); 1352 __ bind(&miss);
1354 PropertyAccessCompiler::TailCallBuiltin( 1353 PropertyAccessCompiler::TailCallBuiltin(
1355 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); 1354 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 index_not_number_, 2150 index_not_number_,
2152 DONT_DO_SMI_CHECK); 2151 DONT_DO_SMI_CHECK);
2153 call_helper.BeforeCall(masm); 2152 call_helper.BeforeCall(masm);
2154 if (embed_mode == PART_OF_IC_HANDLER) { 2153 if (embed_mode == PART_OF_IC_HANDLER) {
2155 __ Push(LoadWithVectorDescriptor::VectorRegister(), 2154 __ Push(LoadWithVectorDescriptor::VectorRegister(),
2156 LoadWithVectorDescriptor::SlotRegister(), object_, index_); 2155 LoadWithVectorDescriptor::SlotRegister(), object_, index_);
2157 } else { 2156 } else {
2158 // index_ is consumed by runtime conversion function. 2157 // index_ is consumed by runtime conversion function.
2159 __ Push(object_, index_); 2158 __ Push(object_, index_);
2160 } 2159 }
2161 if (index_flags_ == STRING_INDEX_IS_NUMBER) { 2160 __ CallRuntime(Runtime::kNumberToSmi);
2162 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero);
2163 } else {
2164 DCHECK(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX);
2165 // NumberToSmi discards numbers that are not exact integers.
2166 __ CallRuntime(Runtime::kNumberToSmi);
2167 }
2168 // Save the conversion result before the pop instructions below 2161 // Save the conversion result before the pop instructions below
2169 // have a chance to overwrite it. 2162 // have a chance to overwrite it.
2170 __ Move(index_, r0); 2163 __ Move(index_, r0);
2171 if (embed_mode == PART_OF_IC_HANDLER) { 2164 if (embed_mode == PART_OF_IC_HANDLER) {
2172 __ Pop(LoadWithVectorDescriptor::VectorRegister(), 2165 __ Pop(LoadWithVectorDescriptor::VectorRegister(),
2173 LoadWithVectorDescriptor::SlotRegister(), object_); 2166 LoadWithVectorDescriptor::SlotRegister(), object_);
2174 } else { 2167 } else {
2175 __ pop(object_); 2168 __ pop(object_);
2176 } 2169 }
2177 // Reload the instance type. 2170 // Reload the instance type.
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
2487 __ bind(&runtime); 2480 __ bind(&runtime);
2488 __ TailCallRuntime(Runtime::kSubString); 2481 __ TailCallRuntime(Runtime::kSubString);
2489 2482
2490 __ bind(&single_char); 2483 __ bind(&single_char);
2491 // r0: original string 2484 // r0: original string
2492 // r1: instance type 2485 // r1: instance type
2493 // r2: length 2486 // r2: length
2494 // r3: from index (untagged) 2487 // r3: from index (untagged)
2495 __ SmiTag(r3, r3); 2488 __ SmiTag(r3, r3);
2496 StringCharAtGenerator generator(r0, r3, r2, r0, &runtime, &runtime, &runtime, 2489 StringCharAtGenerator generator(r0, r3, r2, r0, &runtime, &runtime, &runtime,
2497 STRING_INDEX_IS_NUMBER, RECEIVER_IS_STRING); 2490 RECEIVER_IS_STRING);
2498 generator.GenerateFast(masm); 2491 generator.GenerateFast(masm);
2499 __ Drop(3); 2492 __ Drop(3);
2500 __ Ret(); 2493 __ Ret();
2501 generator.SkipSlow(masm, &runtime); 2494 generator.SkipSlow(masm, &runtime);
2502 } 2495 }
2503 2496
2504 2497
2505 void ToNumberStub::Generate(MacroAssembler* masm) { 2498 void ToNumberStub::Generate(MacroAssembler* masm) {
2506 // The ToNumber stub takes one argument in r0. 2499 // The ToNumber stub takes one argument in r0.
2507 STATIC_ASSERT(kSmiTag == 0); 2500 STATIC_ASSERT(kSmiTag == 0);
(...skipping 2937 matching lines...) Expand 10 before | Expand all | Expand 10 after
5445 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5438 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5446 kStackUnwindSpace, NULL, return_value_operand, NULL); 5439 kStackUnwindSpace, NULL, return_value_operand, NULL);
5447 } 5440 }
5448 5441
5449 #undef __ 5442 #undef __
5450 5443
5451 } // namespace internal 5444 } // namespace internal
5452 } // namespace v8 5445 } // namespace v8
5453 5446
5454 #endif // V8_TARGET_ARCH_ARM 5447 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/code-stubs-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698