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

Side by Side Diff: src/ic/arm64/ic-arm64.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/arm/ic-compiler-arm.cc ('k') | src/ic/arm64/ic-compiler-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 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM64 7 #if V8_TARGET_ARCH_ARM64
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 #define __ ACCESS_MASM(masm) 18 #define __ ACCESS_MASM(masm)
18 19
19 20
20 // "type" holds an instance type on entry and is not clobbered. 21 // "type" holds an instance type on entry and is not clobbered.
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); 782 __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
782 783
783 // The slow case calls into the runtime to complete the store without causing 784 // The slow case calls into the runtime to complete the store without causing
784 // an IC miss that would otherwise cause a transition to the generic stub. 785 // an IC miss that would otherwise cause a transition to the generic stub.
785 ExternalReference ref = 786 ExternalReference ref =
786 ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate()); 787 ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate());
787 __ TailCallExternalReference(ref, 3, 1); 788 __ TailCallExternalReference(ref, 3, 1);
788 } 789 }
789 790
790 791
791 void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
792 StrictMode strict_mode) {
793 ASM_LOCATION("KeyedStoreIC::GenerateRuntimeSetProperty");
794
795 // Push receiver, key and value for runtime call.
796 __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
797
798 // Push strict_mode for runtime call.
799 __ Mov(x10, Smi::FromInt(strict_mode));
800 __ Push(x10);
801
802 __ TailCallRuntime(Runtime::kSetProperty, 4, 1);
803 }
804
805
806 static void KeyedStoreGenerateGenericHelper( 792 static void KeyedStoreGenerateGenericHelper(
807 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, 793 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow,
808 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, 794 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length,
809 Register value, Register key, Register receiver, Register receiver_map, 795 Register value, Register key, Register receiver, Register receiver_map,
810 Register elements_map, Register elements) { 796 Register elements_map, Register elements) {
811 DCHECK(!AreAliased(value, key, receiver, receiver_map, elements_map, elements, 797 DCHECK(!AreAliased(value, key, receiver, receiver_map, elements_map, elements,
812 x10, x11)); 798 x10, x11));
813 799
814 Label transition_smi_elements; 800 Label transition_smi_elements;
815 Label transition_double_elements; 801 Label transition_double_elements;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 __ Cmp(x10, Operand::UntagSmi(key)); 968 __ Cmp(x10, Operand::UntagSmi(key));
983 __ B(hi, &fast_object); 969 __ B(hi, &fast_object);
984 970
985 971
986 __ Bind(&slow); 972 __ Bind(&slow);
987 // Slow case, handle jump to runtime. 973 // Slow case, handle jump to runtime.
988 // Live values: 974 // Live values:
989 // x0: value 975 // x0: value
990 // x1: key 976 // x1: key
991 // x2: receiver 977 // x2: receiver
992 GenerateRuntimeSetProperty(masm, strict_mode); 978 PropertyICCompiler::GenerateRuntimeSetProperty(masm, strict_mode);
993 979
994 980
995 __ Bind(&extra); 981 __ Bind(&extra);
996 // Extra capacity case: Check if there is extra capacity to 982 // Extra capacity case: Check if there is extra capacity to
997 // perform the store and update the length. Used for adding one 983 // perform the store and update the length. Used for adding one
998 // element to the array by writing to array[array.length]. 984 // element to the array by writing to array[array.length].
999 985
1000 // Check for room in the elements backing store. 986 // Check for room in the elements backing store.
1001 // Both the key and the length of FixedArray are smis. 987 // Both the key and the length of FixedArray are smis.
1002 __ Ldrsw(x10, UntagSmiFieldMemOperand(elements, FixedArray::kLengthOffset)); 988 __ Ldrsw(x10, UntagSmiFieldMemOperand(elements, FixedArray::kLengthOffset));
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 __ IncrementCounter(counters->store_normal_hit(), 1, x4, x5); 1062 __ IncrementCounter(counters->store_normal_hit(), 1, x4, x5);
1077 __ Ret(); 1063 __ Ret();
1078 1064
1079 // Cache miss: Jump to runtime. 1065 // Cache miss: Jump to runtime.
1080 __ Bind(&miss); 1066 __ Bind(&miss);
1081 __ IncrementCounter(counters->store_normal_miss(), 1, x4, x5); 1067 __ IncrementCounter(counters->store_normal_miss(), 1, x4, x5);
1082 GenerateMiss(masm); 1068 GenerateMiss(masm);
1083 } 1069 }
1084 1070
1085 1071
1086 void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
1087 StrictMode strict_mode) {
1088 ASM_LOCATION("StoreIC::GenerateRuntimeSetProperty");
1089
1090 __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
1091
1092 __ Mov(x10, Smi::FromInt(strict_mode));
1093 __ Push(x10);
1094
1095 // Do tail-call to runtime routine.
1096 __ TailCallRuntime(Runtime::kSetProperty, 4, 1);
1097 }
1098
1099
1100 void StoreIC::GenerateSlow(MacroAssembler* masm) { 1072 void StoreIC::GenerateSlow(MacroAssembler* masm) {
1101 // ---------- S t a t e -------------- 1073 // ---------- S t a t e --------------
1102 // -- x0 : value 1074 // -- x0 : value
1103 // -- x1 : receiver 1075 // -- x1 : receiver
1104 // -- x2 : name 1076 // -- x2 : name
1105 // -- lr : return address 1077 // -- lr : return address
1106 // ----------------------------------- 1078 // -----------------------------------
1107 1079
1108 // Push receiver, name and value for runtime call. 1080 // Push receiver, name and value for runtime call.
1109 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); 1081 __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 } else { 1170 } else {
1199 DCHECK(to_patch->Mask(TestBranchMask) == TBNZ); 1171 DCHECK(to_patch->Mask(TestBranchMask) == TBNZ);
1200 // This is JumpIfSmi(smi_reg, branch_imm). 1172 // This is JumpIfSmi(smi_reg, branch_imm).
1201 patcher.tbz(smi_reg, 0, branch_imm); 1173 patcher.tbz(smi_reg, 0, branch_imm);
1202 } 1174 }
1203 } 1175 }
1204 } 1176 }
1205 } // namespace v8::internal 1177 } // namespace v8::internal
1206 1178
1207 #endif // V8_TARGET_ARCH_ARM64 1179 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/ic/arm/ic-compiler-arm.cc ('k') | src/ic/arm64/ic-compiler-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698