Index: src/mips/virtual-frame-mips.cc |
diff --git a/src/mips/virtual-frame-mips.cc b/src/mips/virtual-frame-mips.cc |
index b61ce75bd9edca4f7ac6652256f7e9370c6260e6..22fe9f06e1e50a5125158ba2c36ebb303d5d183f 100644 |
--- a/src/mips/virtual-frame-mips.cc |
+++ b/src/mips/virtual-frame-mips.cc |
@@ -25,8 +25,6 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
- |
#include "v8.h" |
#if defined(V8_TARGET_ARCH_MIPS) |
@@ -39,44 +37,50 @@ |
namespace v8 { |
namespace internal { |
-// ------------------------------------------------------------------------- |
-// VirtualFrame implementation. |
- |
#define __ ACCESS_MASM(masm()) |
-void VirtualFrame::SyncElementBelowStackPointer(int index) { |
- UNREACHABLE(); |
+void VirtualFrame::PopToA1A0() { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::SyncElementByPushing(int index) { |
- UNREACHABLE(); |
+void VirtualFrame::PopToA1() { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::SyncRange(int begin, int end) { |
- // All elements are in memory on MIPS (ie, synced). |
-#ifdef DEBUG |
- for (int i = begin; i <= end; i++) { |
- ASSERT(elements_[i].is_synced()); |
- } |
-#endif |
+void VirtualFrame::PopToA0() { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::MergeTo(VirtualFrame* expected) { |
+void VirtualFrame::MergeTo(const VirtualFrame* expected, |
+ Condition cond, |
+ Register r1, |
+ const Operand& r2) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::Enter() { |
- // TODO(MIPS): Implement DEBUG |
+void VirtualFrame::MergeTo(VirtualFrame* expected, |
+ Condition cond, |
+ Register r1, |
+ const Operand& r2) { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
- // We are about to push four values to the frame. |
- Adjust(4); |
- __ MultiPush(ra.bit() | fp.bit() | cp.bit() | a1.bit()); |
- // Adjust FP to point to saved FP. |
- __ addiu(fp, sp, 2 * kPointerSize); |
+void VirtualFrame::MergeTOSTo( |
+ VirtualFrame::TopOfStack expected_top_of_stack_state, |
+ Condition cond, |
+ Register r1, |
+ const Operand& r2) { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
+void VirtualFrame::Enter() { |
+ UNIMPLEMENTED_MIPS(); |
} |
@@ -86,232 +90,216 @@ void VirtualFrame::Exit() { |
void VirtualFrame::AllocateStackSlots() { |
- int count = local_count(); |
- if (count > 0) { |
- Comment cmnt(masm(), "[ Allocate space for locals"); |
- Adjust(count); |
- // Initialize stack slots with 'undefined' value. |
- __ LoadRoot(t0, Heap::kUndefinedValueRootIndex); |
- __ addiu(sp, sp, -count * kPointerSize); |
- for (int i = 0; i < count; i++) { |
- __ sw(t0, MemOperand(sp, (count-i-1)*kPointerSize)); |
- } |
- } |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::SaveContextRegister() { |
+ |
+void VirtualFrame::PushReceiverSlotAddress() { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::RestoreContextRegister() { |
+void VirtualFrame::PushTryHandler(HandlerType type) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::PushReceiverSlotAddress() { |
+void VirtualFrame::CallJSFunction(int arg_count) { |
UNIMPLEMENTED_MIPS(); |
} |
-int VirtualFrame::InvalidateFrameSlotAt(int index) { |
- return kIllegalIndex; |
+void VirtualFrame::CallRuntime(const Runtime::Function* f, int arg_count) { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::TakeFrameSlotAt(int index) { |
+void VirtualFrame::CallRuntime(Runtime::FunctionId id, int arg_count) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::StoreToFrameSlotAt(int index) { |
+#ifdef ENABLE_DEBUGGER_SUPPORT |
+void VirtualFrame::DebugBreak() { |
UNIMPLEMENTED_MIPS(); |
} |
+#endif |
-void VirtualFrame::PushTryHandler(HandlerType type) { |
+void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id, |
+ InvokeJSFlags flags, |
+ int arg_count) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::RawCallStub(CodeStub* stub) { |
+void VirtualFrame::CallLoadIC(Handle<String> name, RelocInfo::Mode mode) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallStub(CodeStub* stub, Result* arg) { |
+void VirtualFrame::CallStoreIC(Handle<String> name, bool is_contextual) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallStub(CodeStub* stub, Result* arg0, Result* arg1) { |
+void VirtualFrame::CallKeyedLoadIC() { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallRuntime(Runtime::Function* f, int arg_count) { |
- PrepareForCall(arg_count, arg_count); |
- ASSERT(cgen()->HasValidEntryRegisters()); |
- __ CallRuntime(f, arg_count); |
+void VirtualFrame::CallKeyedStoreIC() { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallRuntime(Runtime::FunctionId id, int arg_count) { |
- PrepareForCall(arg_count, arg_count); |
- ASSERT(cgen()->HasValidEntryRegisters()); |
- __ CallRuntime(id, arg_count); |
+void VirtualFrame::CallCodeObject(Handle<Code> code, |
+ RelocInfo::Mode rmode, |
+ int dropped_args) { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallAlignedRuntime(Runtime::Function* f, int arg_count) { |
+// NO_TOS_REGISTERS, A0_TOS, A1_TOS, A1_A0_TOS, A0_A1_TOS. |
+const bool VirtualFrame::kA0InUse[TOS_STATES] = |
+ { false, true, false, true, true }; |
+const bool VirtualFrame::kA1InUse[TOS_STATES] = |
+ { false, false, true, true, true }; |
+const int VirtualFrame::kVirtualElements[TOS_STATES] = |
+ { 0, 1, 1, 2, 2 }; |
+const Register VirtualFrame::kTopRegister[TOS_STATES] = |
+ { a0, a0, a1, a1, a0 }; |
+const Register VirtualFrame::kBottomRegister[TOS_STATES] = |
+ { a0, a0, a1, a0, a1 }; |
+const Register VirtualFrame::kAllocatedRegisters[ |
+ VirtualFrame::kNumberOfAllocatedRegisters] = { a2, a3, t0, t1, t2 }; |
+// Popping is done by the transition implied by kStateAfterPop. Of course if |
+// there were no stack slots allocated to registers then the physical SP must |
+// be adjusted. |
+const VirtualFrame::TopOfStack VirtualFrame::kStateAfterPop[TOS_STATES] = |
+ { NO_TOS_REGISTERS, NO_TOS_REGISTERS, NO_TOS_REGISTERS, A0_TOS, A1_TOS }; |
+// Pushing is done by the transition implied by kStateAfterPush. Of course if |
+// the maximum number of registers was already allocated to the top of stack |
+// slots then one register must be physically pushed onto the stack. |
+const VirtualFrame::TopOfStack VirtualFrame::kStateAfterPush[TOS_STATES] = |
+ { A0_TOS, A1_A0_TOS, A0_A1_TOS, A0_A1_TOS, A1_A0_TOS }; |
+ |
+ |
+void VirtualFrame::Drop(int count) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallAlignedRuntime(Runtime::FunctionId id, int arg_count) { |
+void VirtualFrame::Pop() { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id, |
- InvokeJSFlags flags, |
- Result* arg_count_register, |
- int arg_count) { |
+void VirtualFrame::EmitPop(Register reg) { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallCodeObject(Handle<Code> code, |
- RelocInfo::Mode rmode, |
- int dropped_args) { |
- switch (code->kind()) { |
- case Code::CALL_IC: |
- break; |
- case Code::FUNCTION: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- case Code::KEYED_LOAD_IC: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- case Code::LOAD_IC: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- case Code::KEYED_STORE_IC: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- case Code::STORE_IC: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- case Code::BUILTIN: |
- UNIMPLEMENTED_MIPS(); |
- break; |
- default: |
- UNREACHABLE(); |
- break; |
- } |
- Forget(dropped_args); |
- ASSERT(cgen()->HasValidEntryRegisters()); |
- __ Call(code, rmode); |
+void VirtualFrame::SpillAllButCopyTOSToA0() { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallCodeObject(Handle<Code> code, |
- RelocInfo::Mode rmode, |
- Result* arg, |
- int dropped_args) { |
+void VirtualFrame::SpillAllButCopyTOSToA1() { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::CallCodeObject(Handle<Code> code, |
- RelocInfo::Mode rmode, |
- Result* arg0, |
- Result* arg1, |
- int dropped_args, |
- bool set_auto_args_slots) { |
+void VirtualFrame::SpillAllButCopyTOSToA1A0() { |
UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::Drop(int count) { |
- ASSERT(count >= 0); |
- ASSERT(height() >= count); |
- int num_virtual_elements = (element_count() - 1) - stack_pointer_; |
+Register VirtualFrame::Peek() { |
+ UNIMPLEMENTED_MIPS(); |
+ return no_reg; |
+} |
- // Emit code to lower the stack pointer if necessary. |
- if (num_virtual_elements < count) { |
- int num_dropped = count - num_virtual_elements; |
- stack_pointer_ -= num_dropped; |
- __ addiu(sp, sp, num_dropped * kPointerSize); |
- } |
- // Discard elements from the virtual frame and free any registers. |
- for (int i = 0; i < count; i++) { |
- FrameElement dropped = elements_.RemoveLast(); |
- if (dropped.is_register()) { |
- Unuse(dropped.reg()); |
- } |
- } |
+Register VirtualFrame::Peek2() { |
+ UNIMPLEMENTED_MIPS(); |
+ return no_reg; |
} |
-void VirtualFrame::DropFromVFrameOnly(int count) { |
+void VirtualFrame::Dup() { |
UNIMPLEMENTED_MIPS(); |
} |
-Result VirtualFrame::Pop() { |
+void VirtualFrame::Dup2() { |
UNIMPLEMENTED_MIPS(); |
- Result res = Result(); |
- return res; // UNIMPLEMENTED RETURN |
} |
-void VirtualFrame::EmitPop(Register reg) { |
- ASSERT(stack_pointer_ == element_count() - 1); |
- stack_pointer_--; |
- elements_.RemoveLast(); |
- __ Pop(reg); |
+Register VirtualFrame::PopToRegister(Register but_not_to_this_one) { |
+ UNIMPLEMENTED_MIPS(); |
+ return no_reg; |
+} |
+ |
+ |
+void VirtualFrame::EnsureOneFreeTOSRegister() { |
+ UNIMPLEMENTED_MIPS(); |
} |
void VirtualFrame::EmitMultiPop(RegList regs) { |
- ASSERT(stack_pointer_ == element_count() - 1); |
- for (int16_t i = 0; i < kNumRegisters; i++) { |
- if ((regs & (1 << i)) != 0) { |
- stack_pointer_--; |
- elements_.RemoveLast(); |
- } |
- } |
- __ MultiPop(regs); |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
+void VirtualFrame::EmitPush(Register reg, TypeInfo info) { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
+void VirtualFrame::SetElementAt(Register reg, int this_far_down) { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
+Register VirtualFrame::GetTOSRegister() { |
+ UNIMPLEMENTED_MIPS(); |
+ return no_reg; |
+} |
+ |
+ |
+void VirtualFrame::EmitPush(Operand operand, TypeInfo info) { |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::EmitPush(Register reg) { |
- ASSERT(stack_pointer_ == element_count() - 1); |
- elements_.Add(FrameElement::MemoryElement(NumberInfo::Unknown())); |
- stack_pointer_++; |
- __ Push(reg); |
+void VirtualFrame::EmitPush(MemOperand operand, TypeInfo info) { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
+void VirtualFrame::EmitPushRoot(Heap::RootListIndex index) { |
+ UNIMPLEMENTED_MIPS(); |
} |
void VirtualFrame::EmitMultiPush(RegList regs) { |
- ASSERT(stack_pointer_ == element_count() - 1); |
- for (int16_t i = kNumRegisters; i > 0; i--) { |
- if ((regs & (1 << i)) != 0) { |
- elements_.Add(FrameElement::MemoryElement(NumberInfo::Unknown())); |
- stack_pointer_++; |
- } |
- } |
- __ MultiPush(regs); |
+ UNIMPLEMENTED_MIPS(); |
} |
-void VirtualFrame::EmitArgumentSlots(RegList reglist) { |
+void VirtualFrame::EmitMultiPushReversed(RegList regs) { |
UNIMPLEMENTED_MIPS(); |
} |
+ |
+void VirtualFrame::SpillAll() { |
+ UNIMPLEMENTED_MIPS(); |
+} |
+ |
+ |
#undef __ |
} } // namespace v8::internal |