OLD | NEW |
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 | 5 |
6 #include "src/v8.h" | 6 #include "src/v8.h" |
7 | 7 |
8 #if V8_TARGET_ARCH_MIPS64 | 8 #if V8_TARGET_ARCH_MIPS64 |
9 | 9 |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { | 981 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { |
982 // Push receiver, key and value for runtime call. | 982 // Push receiver, key and value for runtime call. |
983 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); | 983 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); |
984 | 984 |
985 ExternalReference ref = | 985 ExternalReference ref = |
986 ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate()); | 986 ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate()); |
987 __ TailCallExternalReference(ref, 3, 1); | 987 __ TailCallExternalReference(ref, 3, 1); |
988 } | 988 } |
989 | 989 |
990 | 990 |
991 void StoreIC::GenerateSlow(MacroAssembler* masm) { | |
992 // Push receiver, key and value for runtime call. | |
993 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); | |
994 | |
995 // The slow case calls into the runtime to complete the store without causing | |
996 // an IC miss that would otherwise cause a transition to the generic stub. | |
997 ExternalReference ref = | |
998 ExternalReference(IC_Utility(kStoreIC_Slow), masm->isolate()); | |
999 __ TailCallExternalReference(ref, 3, 1); | |
1000 } | |
1001 | |
1002 | |
1003 void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) { | |
1004 // Push receiver, key and value for runtime call. | |
1005 // We can't use MultiPush as the order of the registers is important. | |
1006 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); | |
1007 // The slow case calls into the runtime to complete the store without causing | |
1008 // an IC miss that would otherwise cause a transition to the generic stub. | |
1009 ExternalReference ref = | |
1010 ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate()); | |
1011 | |
1012 __ TailCallExternalReference(ref, 3, 1); | |
1013 } | |
1014 | |
1015 | |
1016 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { | 991 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { |
1017 Register receiver = ReceiverRegister(); | 992 Register receiver = ReceiverRegister(); |
1018 Register name = NameRegister(); | 993 Register name = NameRegister(); |
1019 DCHECK(receiver.is(a1)); | 994 DCHECK(receiver.is(a1)); |
1020 DCHECK(name.is(a2)); | 995 DCHECK(name.is(a2)); |
1021 DCHECK(ValueRegister().is(a0)); | 996 DCHECK(ValueRegister().is(a0)); |
1022 | 997 |
1023 // Get the receiver from the stack and probe the stub cache. | 998 // Get the receiver from the stack and probe the stub cache. |
1024 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( | 999 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( |
1025 Code::ComputeHandlerFlags(Code::STORE_IC)); | 1000 Code::ComputeHandlerFlags(Code::STORE_IC)); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 patcher.ChangeBranchCondition(ne); | 1128 patcher.ChangeBranchCondition(ne); |
1154 } else { | 1129 } else { |
1155 DCHECK(Assembler::IsBne(branch_instr)); | 1130 DCHECK(Assembler::IsBne(branch_instr)); |
1156 patcher.ChangeBranchCondition(eq); | 1131 patcher.ChangeBranchCondition(eq); |
1157 } | 1132 } |
1158 } | 1133 } |
1159 } | 1134 } |
1160 } // namespace v8::internal | 1135 } // namespace v8::internal |
1161 | 1136 |
1162 #endif // V8_TARGET_ARCH_MIPS64 | 1137 #endif // V8_TARGET_ARCH_MIPS64 |
OLD | NEW |