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

Side by Side Diff: src/ic/x64/ic-x64.cc

Issue 496313002: Remove KeyedStoreIC::GenerateRuntimeSetProperty and move Store::GenerateRuntimeSetProperty to the P… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
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/x64/ic-compiler-x64.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_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
11 #include "src/ic/ic-compiler.h"
11 #include "src/ic/stub-cache.h" 12 #include "src/ic/stub-cache.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 // ---------------------------------------------------------------------------- 17 // ----------------------------------------------------------------------------
17 // Static IC stub generators. 18 // Static IC stub generators.
18 // 19 //
19 20
20 #define __ ACCESS_MASM(masm) 21 #define __ ACCESS_MASM(masm)
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 __ movp(rbx, FieldOperand(receiver, JSObject::kElementsOffset)); 643 __ movp(rbx, FieldOperand(receiver, JSObject::kElementsOffset));
643 // Check array bounds. 644 // Check array bounds.
644 __ SmiCompareInteger32(FieldOperand(rbx, FixedArray::kLengthOffset), key); 645 __ SmiCompareInteger32(FieldOperand(rbx, FixedArray::kLengthOffset), key);
645 // rbx: FixedArray 646 // rbx: FixedArray
646 __ j(above, &fast_object); 647 __ j(above, &fast_object);
647 648
648 // Slow case: call runtime. 649 // Slow case: call runtime.
649 __ bind(&slow); 650 __ bind(&slow);
650 __ Integer32ToSmi(key, key); 651 __ Integer32ToSmi(key, key);
651 __ bind(&slow_with_tagged_index); 652 __ bind(&slow_with_tagged_index);
652 GenerateRuntimeSetProperty(masm, strict_mode); 653 PropertyICCompiler::GenerateRuntimeSetProperty(masm, strict_mode);
653 // Never returns to here. 654 // Never returns to here.
654 655
655 // Extra capacity case: Check if there is extra capacity to 656 // Extra capacity case: Check if there is extra capacity to
656 // perform the store and update the length. Used for adding one 657 // perform the store and update the length. Used for adding one
657 // element to the array by writing to array[array.length]. 658 // element to the array by writing to array[array.length].
658 __ bind(&extra); 659 __ bind(&extra);
659 // receiver is a JSArray. 660 // receiver is a JSArray.
660 // rbx: receiver's elements array (a FixedArray) 661 // rbx: receiver's elements array (a FixedArray)
661 // flags: smicompare (receiver.length(), rbx) 662 // flags: smicompare (receiver.length(), rbx)
662 __ j(not_equal, &slow); // do not leave holes in the array 663 __ j(not_equal, &slow); // do not leave holes in the array
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 Counters* counters = masm->isolate()->counters(); 1005 Counters* counters = masm->isolate()->counters();
1005 __ IncrementCounter(counters->store_normal_hit(), 1); 1006 __ IncrementCounter(counters->store_normal_hit(), 1);
1006 __ ret(0); 1007 __ ret(0);
1007 1008
1008 __ bind(&miss); 1009 __ bind(&miss);
1009 __ IncrementCounter(counters->store_normal_miss(), 1); 1010 __ IncrementCounter(counters->store_normal_miss(), 1);
1010 GenerateMiss(masm); 1011 GenerateMiss(masm);
1011 } 1012 }
1012 1013
1013 1014
1014 void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
1015 StrictMode strict_mode) {
1016 // Return address is on the stack.
1017 DCHECK(!rbx.is(ReceiverRegister()) && !rbx.is(NameRegister()) &&
1018 !rbx.is(ValueRegister()));
1019
1020 __ PopReturnAddressTo(rbx);
1021 __ Push(ReceiverRegister());
1022 __ Push(NameRegister());
1023 __ Push(ValueRegister());
1024 __ Push(Smi::FromInt(strict_mode));
1025 __ PushReturnAddressFrom(rbx);
1026
1027 // Do tail-call to runtime routine.
1028 __ TailCallRuntime(Runtime::kSetProperty, 4, 1);
1029 }
1030
1031
1032 void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
1033 StrictMode strict_mode) {
1034 // Return address is on the stack.
1035 DCHECK(!rbx.is(ReceiverRegister()) && !rbx.is(NameRegister()) &&
1036 !rbx.is(ValueRegister()));
1037
1038 __ PopReturnAddressTo(rbx);
1039 __ Push(ReceiverRegister());
1040 __ Push(NameRegister());
1041 __ Push(ValueRegister());
1042 __ Push(Smi::FromInt(strict_mode)); // Strict mode.
1043 __ PushReturnAddressFrom(rbx);
1044
1045 // Do tail-call to runtime routine.
1046 __ TailCallRuntime(Runtime::kSetProperty, 4, 1);
1047 }
1048
1049
1050 void StoreIC::GenerateSlow(MacroAssembler* masm) { 1015 void StoreIC::GenerateSlow(MacroAssembler* masm) {
1051 // Return address is on the stack. 1016 // Return address is on the stack.
1052 StoreIC_PushArgs(masm); 1017 StoreIC_PushArgs(masm);
1053 1018
1054 // Do tail-call to runtime routine. 1019 // Do tail-call to runtime routine.
1055 ExternalReference ref(IC_Utility(kStoreIC_Slow), masm->isolate()); 1020 ExternalReference ref(IC_Utility(kStoreIC_Slow), masm->isolate());
1056 __ TailCallExternalReference(ref, 3, 1); 1021 __ TailCallExternalReference(ref, 3, 1);
1057 } 1022 }
1058 1023
1059 1024
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 Condition cc = 1110 Condition cc =
1146 (check == ENABLE_INLINED_SMI_CHECK) 1111 (check == ENABLE_INLINED_SMI_CHECK)
1147 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) 1112 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero)
1148 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); 1113 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry);
1149 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); 1114 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc);
1150 } 1115 }
1151 } 1116 }
1152 } // namespace v8::internal 1117 } // namespace v8::internal
1153 1118
1154 #endif // V8_TARGET_ARCH_X64 1119 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/ic/x64/ic-compiler-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698