Index: src/ic/handler-compiler.h |
diff --git a/src/ic/handler-compiler.h b/src/ic/handler-compiler.h |
index efb0a397c877e5f0cc28f35851dc0dca8e68a46a..bed65775c877d63953a3f78425e1975c56f82bc5 100644 |
--- a/src/ic/handler-compiler.h |
+++ b/src/ic/handler-compiler.h |
@@ -38,10 +38,21 @@ class PropertyHandlerCompiler : public PropertyAccessCompiler { |
virtual void FrontendFooter(Handle<Name> name, Label* miss) { UNREACHABLE(); } |
- Register Frontend(Register object_reg, Handle<Name> name); |
+ // Frontend loads from receiver(), returns holder register which may be |
+ // different. |
+ Register Frontend(Handle<Name> name); |
void NonexistentFrontendHeader(Handle<Name> name, Label* miss, |
Register scratch1, Register scratch2); |
+ // When FLAG_vector_ics is true, handlers that have the possibility of missing |
+ // will need to save and pass these to miss handlers. |
+ void PushVectorAndSlot() { PushVectorAndSlot(vector(), slot()); } |
+ void PushVectorAndSlot(Register vector, Register slot); |
+ void PopVectorAndSlot() { PopVectorAndSlot(vector(), slot()); } |
+ void PopVectorAndSlot(Register vector, Register slot); |
+ |
+ void DiscardVectorAndSlot(); |
+ |
// TODO(verwaest): Make non-static. |
static void GenerateFastApiCall(MacroAssembler* masm, |
const CallOptimization& optimization, |
@@ -170,6 +181,12 @@ class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { |
Handle<ExecutableAccessorInfo> callback); |
void GenerateLoadCallback(const CallOptimization& call_optimization, |
Handle<Map> receiver_map); |
+ |
+ // Helper emits no code if vector-ics are disabled. |
+ void InterceptorVectorSlotPush(Register holder_reg); |
+ enum PopMode { POP, DISCARD }; |
+ void InterceptorVectorSlotPop(Register holder_reg, PopMode mode = POP); |
+ |
void GenerateLoadInterceptor(Register holder_reg); |
void GenerateLoadInterceptorWithFollowup(LookupIterator* it, |
Register holder_reg); |