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

Side by Side Diff: src/arm64/code-stubs-arm64.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 | « src/arm/code-stubs-arm.cc ('k') | src/code-stubs.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_ARM64 5 #if V8_TARGET_ARCH_ARM64
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/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 DCHECK(!scratch.is(LoadWithVectorDescriptor::VectorRegister()) && 1471 DCHECK(!scratch.is(LoadWithVectorDescriptor::VectorRegister()) &&
1472 result.is(LoadWithVectorDescriptor::SlotRegister())); 1472 result.is(LoadWithVectorDescriptor::SlotRegister()));
1473 1473
1474 // StringCharAtGenerator doesn't use the result register until it's passed 1474 // StringCharAtGenerator doesn't use the result register until it's passed
1475 // the different miss possibilities. If it did, we would have a conflict 1475 // the different miss possibilities. If it did, we would have a conflict
1476 // when FLAG_vector_ics is true. 1476 // when FLAG_vector_ics is true.
1477 StringCharAtGenerator char_at_generator(receiver, index, scratch, result, 1477 StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
1478 &miss, // When not a string. 1478 &miss, // When not a string.
1479 &miss, // When not a number. 1479 &miss, // When not a number.
1480 &miss, // When index out of range. 1480 &miss, // When index out of range.
1481 STRING_INDEX_IS_ARRAY_INDEX,
1482 RECEIVER_IS_STRING); 1481 RECEIVER_IS_STRING);
1483 char_at_generator.GenerateFast(masm); 1482 char_at_generator.GenerateFast(masm);
1484 __ Ret(); 1483 __ Ret();
1485 1484
1486 StubRuntimeCallHelper call_helper; 1485 StubRuntimeCallHelper call_helper;
1487 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper); 1486 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper);
1488 1487
1489 __ Bind(&miss); 1488 __ Bind(&miss);
1490 PropertyAccessCompiler::TailCallBuiltin( 1489 PropertyAccessCompiler::TailCallBuiltin(
1491 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); 1490 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
2396 // If index is a heap number, try converting it to an integer. 2395 // If index is a heap number, try converting it to an integer.
2397 __ JumpIfNotHeapNumber(index_, index_not_number_); 2396 __ JumpIfNotHeapNumber(index_, index_not_number_);
2398 call_helper.BeforeCall(masm); 2397 call_helper.BeforeCall(masm);
2399 if (embed_mode == PART_OF_IC_HANDLER) { 2398 if (embed_mode == PART_OF_IC_HANDLER) {
2400 __ Push(LoadWithVectorDescriptor::VectorRegister(), 2399 __ Push(LoadWithVectorDescriptor::VectorRegister(),
2401 LoadWithVectorDescriptor::SlotRegister(), object_, index_); 2400 LoadWithVectorDescriptor::SlotRegister(), object_, index_);
2402 } else { 2401 } else {
2403 // Save object_ on the stack and pass index_ as argument for runtime call. 2402 // Save object_ on the stack and pass index_ as argument for runtime call.
2404 __ Push(object_, index_); 2403 __ Push(object_, index_);
2405 } 2404 }
2406 if (index_flags_ == STRING_INDEX_IS_NUMBER) { 2405 __ CallRuntime(Runtime::kNumberToSmi);
2407 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero);
2408 } else {
2409 DCHECK(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX);
2410 // NumberToSmi discards numbers that are not exact integers.
2411 __ CallRuntime(Runtime::kNumberToSmi);
2412 }
2413 // Save the conversion result before the pop instructions below 2406 // Save the conversion result before the pop instructions below
2414 // have a chance to overwrite it. 2407 // have a chance to overwrite it.
2415 __ Mov(index_, x0); 2408 __ Mov(index_, x0);
2416 if (embed_mode == PART_OF_IC_HANDLER) { 2409 if (embed_mode == PART_OF_IC_HANDLER) {
2417 __ Pop(object_, LoadWithVectorDescriptor::SlotRegister(), 2410 __ Pop(object_, LoadWithVectorDescriptor::SlotRegister(),
2418 LoadWithVectorDescriptor::VectorRegister()); 2411 LoadWithVectorDescriptor::VectorRegister());
2419 } else { 2412 } else {
2420 __ Pop(object_); 2413 __ Pop(object_);
2421 } 2414 }
2422 // Reload the instance type. 2415 // Reload the instance type.
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
3088 __ TailCallRuntime(Runtime::kSubString); 3081 __ TailCallRuntime(Runtime::kSubString);
3089 3082
3090 __ bind(&single_char); 3083 __ bind(&single_char);
3091 // x1: result_length 3084 // x1: result_length
3092 // x10: input_string 3085 // x10: input_string
3093 // x12: input_type 3086 // x12: input_type
3094 // x15: from (untagged) 3087 // x15: from (untagged)
3095 __ SmiTag(from); 3088 __ SmiTag(from);
3096 StringCharAtGenerator generator(input_string, from, result_length, x0, 3089 StringCharAtGenerator generator(input_string, from, result_length, x0,
3097 &runtime, &runtime, &runtime, 3090 &runtime, &runtime, &runtime,
3098 STRING_INDEX_IS_NUMBER, RECEIVER_IS_STRING); 3091 RECEIVER_IS_STRING);
3099 generator.GenerateFast(masm); 3092 generator.GenerateFast(masm);
3100 __ Drop(3); 3093 __ Drop(3);
3101 __ Ret(); 3094 __ Ret();
3102 generator.SkipSlow(masm, &runtime); 3095 generator.SkipSlow(masm, &runtime);
3103 } 3096 }
3104 3097
3105 3098
3106 void ToNumberStub::Generate(MacroAssembler* masm) { 3099 void ToNumberStub::Generate(MacroAssembler* masm) {
3107 // The ToNumber stub takes one argument in x0. 3100 // The ToNumber stub takes one argument in x0.
3108 Label not_smi; 3101 Label not_smi;
(...skipping 2732 matching lines...) Expand 10 before | Expand all | Expand 10 after
5841 kStackUnwindSpace, NULL, spill_offset, 5834 kStackUnwindSpace, NULL, spill_offset,
5842 return_value_operand, NULL); 5835 return_value_operand, NULL);
5843 } 5836 }
5844 5837
5845 #undef __ 5838 #undef __
5846 5839
5847 } // namespace internal 5840 } // namespace internal
5848 } // namespace v8 5841 } // namespace v8
5849 5842
5850 #endif // V8_TARGET_ARCH_ARM64 5843 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm/code-stubs-arm.cc ('k') | src/code-stubs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698