Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 35e6048de6054d23945df52022421471ec577847..93b0e2867b31f03d987aba6422f87555485cff3a 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -1961,6 +1961,29 @@ void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) { |
} |
+void LoadIndexedInterceptorStub::Generate(MacroAssembler* masm) { |
+ // Return address is in lr. |
+ Label slow; |
+ |
+ Register receiver = LoadDescriptor::ReceiverRegister(); |
+ Register key = LoadDescriptor::NameRegister(); |
+ |
+ // Check that the key is an array index, that is Uint32. |
+ __ TestAndBranchIfAnySet(key, kSmiTagMask | kSmiSignMask, &slow); |
+ |
+ // Everything is fine, call runtime. |
+ __ Push(receiver, key); |
+ __ TailCallExternalReference( |
+ ExternalReference(IC_Utility(IC::kLoadElementWithInterceptor), |
+ masm->isolate()), |
+ 2, 1); |
+ |
+ __ Bind(&slow); |
+ PropertyAccessCompiler::TailCallBuiltin( |
+ masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |
+} |
+ |
+ |
void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
// Stack layout on entry. |
// jssp[0]: number of parameters (tagged) |