| Index: src/x64/virtual-frame-x64.h
|
| ===================================================================
|
| --- src/x64/virtual-frame-x64.h (revision 4699)
|
| +++ src/x64/virtual-frame-x64.h (working copy)
|
| @@ -145,6 +145,9 @@
|
| // (ie, they all have frame-external references).
|
| Register SpillAnyRegister();
|
|
|
| + // Spill the top element of the frame to memory.
|
| + void SpillTop() { SpillElementAt(element_count() - 1); }
|
| +
|
| // Sync the range of elements in [begin, end] with memory.
|
| void SyncRange(int begin, int end);
|
|
|
| @@ -333,13 +336,33 @@
|
| // frame. They are not dropped.
|
| Result CallKeyedLoadIC(RelocInfo::Mode mode);
|
|
|
| - // Call store IC. Name, value, and receiver are found on top of the
|
| - // frame. Receiver is not dropped.
|
| - Result CallStoreIC();
|
|
|
| + // Calling a store IC and a keyed store IC differ only by which ic is called
|
| + // and by the order of the three arguments on the frame.
|
| + Result CallCommonStoreIC(Handle<Code> ic,
|
| + Result* value,
|
| + Result *key,
|
| + Result* receiver);
|
| +
|
| + // Call store IC. Name, value, and receiver are found on top
|
| + // of the frame. All are dropped.
|
| + Result CallStoreIC() {
|
| + Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
|
| + Result name = Pop();
|
| + Result value = Pop();
|
| + Result receiver = Pop();
|
| + return CallCommonStoreIC(ic, &value, &name, &receiver);
|
| + }
|
| +
|
| // Call keyed store IC. Value, key, and receiver are found on top
|
| - // of the frame. Key and receiver are not dropped.
|
| - Result CallKeyedStoreIC();
|
| + // of the frame. All are dropped.
|
| + Result CallKeyedStoreIC() {
|
| + Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize));
|
| + Result value = Pop();
|
| + Result key = Pop();
|
| + Result receiver = Pop();
|
| + return CallCommonStoreIC(ic, &value, &key, &receiver);
|
| + }
|
|
|
| // Call call IC. Function name, arguments, and receiver are found on top
|
| // of the frame and dropped by the call.
|
| @@ -548,6 +571,14 @@
|
| // Register counts are correctly updated.
|
| int InvalidateFrameSlotAt(int index);
|
|
|
| + // This function assumes that a and b are the only results that could be in
|
| + // the registers a_reg or b_reg. Other results can be live, but must not
|
| + // be in the registers a_reg or b_reg. The results a and b are invalidated.
|
| + void MoveResultsToRegisters(Result* a,
|
| + Result* b,
|
| + Register a_reg,
|
| + Register b_reg);
|
| +
|
| // Call a code stub that has already been prepared for calling (via
|
| // PrepareForCall).
|
| Result RawCallStub(CodeStub* stub);
|
|
|