// Copyright 2010 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (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) #include "bootstrapper.h" #include "code-stubs.h" #include "codegen-inl.h" #include "compiler.h" #include "debug.h" #include "ic-inl.h" #include "jsregexp.h" #include "jump-target-inl.h" #include "parser.h" #include "regexp-macro-assembler.h" #include "regexp-stack.h" #include "register-allocator-inl.h" #include "runtime.h" #include "scopes.h" #include "stub-cache.h" #include "virtual-frame-inl.h" #include "virtual-frame-mips-inl.h" namespace v8 { namespace internal { #define __ ACCESS_MASM(masm_) // ------------------------------------------------------------------------- // Platform-specific DeferredCode functions. void DeferredCode::SaveRegisters() { // On MIPS you either have a completely spilled frame or you // handle it yourself, but at the moment there's no automation // of registers and deferred code. } void DeferredCode::RestoreRegisters() { } // ------------------------------------------------------------------------- // Platform-specific RuntimeCallHelper functions. void VirtualFrameRuntimeCallHelper::BeforeCall(MacroAssembler* masm) const { frame_state_->frame()->AssertIsSpilled(); } void VirtualFrameRuntimeCallHelper::AfterCall(MacroAssembler* masm) const { } void StubRuntimeCallHelper::BeforeCall(MacroAssembler* masm) const { masm->EnterInternalFrame(); } void StubRuntimeCallHelper::AfterCall(MacroAssembler* masm) const { masm->LeaveInternalFrame(); } // ----------------------------------------------------------------------------- // CodeGenState implementation. CodeGenState::CodeGenState(CodeGenerator* owner) : owner_(owner), previous_(owner->state()) { owner->set_state(this); } ConditionCodeGenState::ConditionCodeGenState(CodeGenerator* owner, JumpTarget* true_target, JumpTarget* false_target) : CodeGenState(owner), true_target_(true_target), false_target_(false_target) { owner->set_state(this); } TypeInfoCodeGenState::TypeInfoCodeGenState(CodeGenerator* owner, Slot* slot, TypeInfo type_info) : CodeGenState(owner), slot_(slot) { owner->set_state(this); old_type_info_ = owner->set_type_info(slot, type_info); } CodeGenState::~CodeGenState() { ASSERT(owner_->state() == this); owner_->set_state(previous_); } TypeInfoCodeGenState::~TypeInfoCodeGenState() { owner()->set_type_info(slot_, old_type_info_); } // ----------------------------------------------------------------------------- // CodeGenerator implementation. CodeGenerator::CodeGenerator(MacroAssembler* masm) : deferred_(8), masm_(masm), info_(NULL), frame_(NULL), allocator_(NULL), cc_reg_(cc_always), state_(NULL), loop_nesting_(0), type_info_(NULL), function_return_(JumpTarget::BIDIRECTIONAL), function_return_is_shadowed_(false) { } // Calling conventions: // fp: caller's frame pointer // sp: stack pointer // a1: called JS function // cp: callee's context void CodeGenerator::Generate(CompilationInfo* info) { UNIMPLEMENTED_MIPS(); } int CodeGenerator::NumberOfSlot(Slot* slot) { UNIMPLEMENTED_MIPS(); return 0; } MemOperand CodeGenerator::SlotOperand(Slot* slot, Register tmp) { UNIMPLEMENTED_MIPS(); return MemOperand(zero_reg, 0); } MemOperand CodeGenerator::ContextSlotOperandCheckExtensions( Slot* slot, Register tmp, Register tmp2, JumpTarget* slow) { UNIMPLEMENTED_MIPS(); return MemOperand(zero_reg, 0); } void CodeGenerator::LoadCondition(Expression* x, JumpTarget* true_target, JumpTarget* false_target, bool force_cc) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::Load(Expression* x) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadGlobal() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadGlobalReceiver(Register scratch) { UNIMPLEMENTED_MIPS(); } ArgumentsAllocationMode CodeGenerator::ArgumentsMode() { UNIMPLEMENTED_MIPS(); return EAGER_ARGUMENTS_ALLOCATION; } void CodeGenerator::StoreArgumentsObject(bool initial) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadTypeofExpression(Expression* x) { UNIMPLEMENTED_MIPS(); } Reference::Reference(CodeGenerator* cgen, Expression* expression, bool persist_after_get) : cgen_(cgen), expression_(expression), type_(ILLEGAL), persist_after_get_(persist_after_get) { UNIMPLEMENTED_MIPS(); } Reference::~Reference() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadReference(Reference* ref) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::UnloadReference(Reference* ref) { UNIMPLEMENTED_MIPS(); } // ECMA-262, section 9.2, page 30: ToBoolean(). Convert the given // register to a boolean in the condition code register. The code // may jump to 'false_target' in case the register converts to 'false'. void CodeGenerator::ToBoolean(JumpTarget* true_target, JumpTarget* false_target) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenericBinaryOperation(Token::Value op, OverwriteMode overwrite_mode, GenerateInlineSmi inline_smi, int constant_rhs) { UNIMPLEMENTED_MIPS(); } class DeferredInlineSmiOperation: public DeferredCode { public: DeferredInlineSmiOperation(Token::Value op, int value, bool reversed, OverwriteMode overwrite_mode, Register tos) : op_(op), value_(value), reversed_(reversed), overwrite_mode_(overwrite_mode), tos_register_(tos) { set_comment("[ DeferredInlinedSmiOperation"); } virtual void Generate(); // This stub makes explicit calls to SaveRegisters(), RestoreRegisters() and // Exit(). Currently on MIPS SaveRegisters() and RestoreRegisters() are empty // methods, it is the responsibility of the deferred code to save and restore // registers. virtual bool AutoSaveAndRestore() { return false; } void JumpToNonSmiInput(Condition cond, Register cmp1, const Operand& cmp2); void JumpToAnswerOutOfRange(Condition cond, Register cmp1, const Operand& cmp2); private: void GenerateNonSmiInput(); void GenerateAnswerOutOfRange(); void WriteNonSmiAnswer(Register answer, Register heap_number, Register scratch); Token::Value op_; int value_; bool reversed_; OverwriteMode overwrite_mode_; Register tos_register_; Label non_smi_input_; Label answer_out_of_range_; }; // For bit operations we try harder and handle the case where the input is not // a Smi but a 32bits integer without calling the generic stub. void DeferredInlineSmiOperation::JumpToNonSmiInput(Condition cond, Register cmp1, const Operand& cmp2) { UNIMPLEMENTED_MIPS(); } // For bit operations the result is always 32bits so we handle the case where // the result does not fit in a Smi without calling the generic stub. void DeferredInlineSmiOperation::JumpToAnswerOutOfRange(Condition cond, Register cmp1, const Operand& cmp2) { UNIMPLEMENTED_MIPS(); } // On entry the non-constant side of the binary operation is in tos_register_ // and the constant smi side is nowhere. The tos_register_ is not used by the // virtual frame. On exit the answer is in the tos_register_ and the virtual // frame is unchanged. void DeferredInlineSmiOperation::Generate() { UNIMPLEMENTED_MIPS(); } // Convert and write the integer answer into heap_number. void DeferredInlineSmiOperation::WriteNonSmiAnswer(Register answer, Register heap_number, Register scratch) { UNIMPLEMENTED_MIPS(); } void DeferredInlineSmiOperation::GenerateNonSmiInput() { UNIMPLEMENTED_MIPS(); } void DeferredInlineSmiOperation::GenerateAnswerOutOfRange() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::SmiOperation(Token::Value op, Handle value, bool reversed, OverwriteMode mode) { UNIMPLEMENTED_MIPS(); } // On MIPS we load registers condReg1 and condReg2 with the values which should // be compared. With the CodeGenerator::cc_reg_ condition, functions will be // able to evaluate correctly the condition. (eg CodeGenerator::Branch) void CodeGenerator::Comparison(Condition cc, Expression* left, Expression* right, bool strict) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::CallWithArguments(ZoneList* args, CallFunctionFlags flags, int position) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::CallApplyLazy(Expression* applicand, Expression* receiver, VariableProxy* arguments, int position) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::Branch(bool if_true, JumpTarget* target) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::CheckStack() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitStatements(ZoneList* statements) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitBlock(Block* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::DeclareGlobals(Handle pairs) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitDeclaration(Declaration* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitExpressionStatement(ExpressionStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitEmptyStatement(EmptyStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitIfStatement(IfStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitContinueStatement(ContinueStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitBreakStatement(BreakStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitReturnStatement(ReturnStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateReturnSequence() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitWithEnterStatement(WithEnterStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitWithExitStatement(WithExitStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitSwitchStatement(SwitchStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitDoWhileStatement(DoWhileStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitWhileStatement(WhileStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitForStatement(ForStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitForInStatement(ForInStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitTryCatchStatement(TryCatchStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitTryFinallyStatement(TryFinallyStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitDebuggerStatement(DebuggerStatement* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::InstantiateFunction( Handle function_info, bool pretenure) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitFunctionLiteral(FunctionLiteral* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitSharedFunctionInfoLiteral( SharedFunctionInfoLiteral* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitConditional(Conditional* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadFromSlot(Slot* slot, TypeofState typeof_state) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadFromSlotCheckForArguments(Slot* slot, TypeofState state) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::StoreToSlot(Slot* slot, InitState init_state) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::LoadFromGlobalSlotCheckExtensions(Slot* slot, TypeofState typeof_state, JumpTarget* slow) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitDynamicLoadFromSlotFastCase(Slot* slot, TypeofState typeof_state, JumpTarget* slow, JumpTarget* done) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitSlot(Slot* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitVariableProxy(VariableProxy* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitLiteral(Literal* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitRegExpLiteral(RegExpLiteral* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitObjectLiteral(ObjectLiteral* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitArrayLiteral(ArrayLiteral* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCatchExtensionObject(CatchExtensionObject* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitSlotAssignment(Assignment* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitNamedPropertyAssignment(Assignment* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitKeyedPropertyAssignment(Assignment* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitAssignment(Assignment* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitThrow(Throw* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitProperty(Property* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCall(Call* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCallNew(CallNew* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateClassOf(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateValueOf(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateSetValueOf(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsSmi(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateLog(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsNonNegativeSmi(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateMathPow(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateMathSqrt(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredStringCharCodeAt : public DeferredCode { public: DeferredStringCharCodeAt(Register object, Register index, Register scratch, Register result) : result_(result), char_code_at_generator_(object, index, scratch, result, &need_conversion_, &need_conversion_, &index_out_of_range_, STRING_INDEX_IS_NUMBER) {} StringCharCodeAtGenerator* fast_case_generator() { return &char_code_at_generator_; } virtual void Generate() { UNIMPLEMENTED_MIPS(); } private: Register result_; Label need_conversion_; Label index_out_of_range_; StringCharCodeAtGenerator char_code_at_generator_; }; void CodeGenerator::GenerateStringCharCodeAt(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredStringCharFromCode : public DeferredCode { public: DeferredStringCharFromCode(Register code, Register result) : char_from_code_generator_(code, result) {} StringCharFromCodeGenerator* fast_case_generator() { return &char_from_code_generator_; } virtual void Generate() { VirtualFrameRuntimeCallHelper call_helper(frame_state()); char_from_code_generator_.GenerateSlow(masm(), call_helper); } private: StringCharFromCodeGenerator char_from_code_generator_; }; void CodeGenerator::GenerateStringCharFromCode(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredStringCharAt : public DeferredCode { public: DeferredStringCharAt(Register object, Register index, Register scratch1, Register scratch2, Register result) : result_(result), char_at_generator_(object, index, scratch1, scratch2, result, &need_conversion_, &need_conversion_, &index_out_of_range_, STRING_INDEX_IS_NUMBER) {} StringCharAtGenerator* fast_case_generator() { return &char_at_generator_; } virtual void Generate() { UNIMPLEMENTED_MIPS(); } private: Register result_; Label need_conversion_; Label index_out_of_range_; StringCharAtGenerator char_at_generator_; }; void CodeGenerator::GenerateStringCharAt(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsArray(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsRegExp(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsObject(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsSpecObject(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredIsStringWrapperSafeForDefaultValueOf : public DeferredCode { public: DeferredIsStringWrapperSafeForDefaultValueOf(Register object, Register map_result, Register scratch1, Register scratch2) : object_(object), map_result_(map_result), scratch1_(scratch1), scratch2_(scratch2) { } virtual void Generate() { UNIMPLEMENTED_MIPS(); } private: Register object_; Register map_result_; Register scratch1_; Register scratch2_; }; void CodeGenerator::GenerateIsStringWrapperSafeForDefaultValueOf( ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsFunction(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsUndetectableObject(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsConstructCall(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateArgumentsLength(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateArguments(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateRandomHeapNumber( ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateStringAdd(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateSubString(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateStringCompare(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateRegExpExec(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateRegExpConstructResult(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredSearchCache: public DeferredCode { public: DeferredSearchCache(Register dst, Register cache, Register key) : dst_(dst), cache_(cache), key_(key) { set_comment("[ DeferredSearchCache"); } virtual void Generate(); private: Register dst_, cache_, key_; }; void DeferredSearchCache::Generate() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateGetFromCache(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateNumberToString(ZoneList* args) { UNIMPLEMENTED_MIPS(); } class DeferredSwapElements: public DeferredCode { public: DeferredSwapElements(Register object, Register index1, Register index2) : object_(object), index1_(index1), index2_(index2) { set_comment("[ DeferredSwapElements"); } virtual void Generate(); private: Register object_, index1_, index2_; }; void DeferredSwapElements::Generate() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateSwapElements(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateCallFunction(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateMathSin(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateMathCos(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateMathLog(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateObjectEquals(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateIsRegExpEquivalent(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateHasCachedArrayIndex(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateGetCachedArrayIndex(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateFastAsciiArrayJoin(ZoneList* args) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCallRuntime(CallRuntime* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) { UNIMPLEMENTED_MIPS(); } class DeferredCountOperation: public DeferredCode { public: DeferredCountOperation(Register value, bool is_increment, bool is_postfix, int target_size) : value_(value), is_increment_(is_increment), is_postfix_(is_postfix), target_size_(target_size) {} virtual void Generate() { UNIMPLEMENTED_MIPS(); } private: Register value_; bool is_increment_; bool is_postfix_; int target_size_; }; void CodeGenerator::VisitCountOperation(CountOperation* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::GenerateLogicalBooleanOperation(BinaryOperation* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitBinaryOperation(BinaryOperation* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitThisFunction(ThisFunction* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCompareOperation(CompareOperation* node) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::VisitCompareToNull(CompareToNull* node) { UNIMPLEMENTED_MIPS(); } class DeferredReferenceGetNamedValue: public DeferredCode { public: explicit DeferredReferenceGetNamedValue(Register receiver, Handle name, bool is_contextual) : receiver_(receiver), name_(name), is_contextual_(is_contextual), is_dont_delete_(false) { set_comment(is_contextual ? "[ DeferredReferenceGetNamedValue (contextual)" : "[ DeferredReferenceGetNamedValue"); } virtual void Generate(); void set_is_dont_delete(bool value) { ASSERT(is_contextual_); is_dont_delete_ = value; } private: Register receiver_; Handle name_; bool is_contextual_; bool is_dont_delete_; }; void DeferredReferenceGetNamedValue::Generate() { UNIMPLEMENTED_MIPS(); } class DeferredReferenceGetKeyedValue: public DeferredCode { public: DeferredReferenceGetKeyedValue(Register key, Register receiver) : key_(key), receiver_(receiver) { set_comment("[ DeferredReferenceGetKeyedValue"); } virtual void Generate(); private: Register key_; Register receiver_; }; void DeferredReferenceGetKeyedValue::Generate() { UNIMPLEMENTED_MIPS(); } class DeferredReferenceSetKeyedValue: public DeferredCode { public: DeferredReferenceSetKeyedValue(Register value, Register key, Register receiver) : value_(value), key_(key), receiver_(receiver) { set_comment("[ DeferredReferenceSetKeyedValue"); } virtual void Generate(); private: Register value_; Register key_; Register receiver_; }; void DeferredReferenceSetKeyedValue::Generate() { UNIMPLEMENTED_MIPS(); } class DeferredReferenceSetNamedValue: public DeferredCode { public: DeferredReferenceSetNamedValue(Register value, Register receiver, Handle name) : value_(value), receiver_(receiver), name_(name) { set_comment("[ DeferredReferenceSetNamedValue"); } virtual void Generate(); private: Register value_; Register receiver_; Handle name_; }; void DeferredReferenceSetNamedValue::Generate() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitNamedLoad(Handle name, bool is_contextual) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitNamedStore(Handle name, bool is_contextual) { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitKeyedLoad() { UNIMPLEMENTED_MIPS(); } void CodeGenerator::EmitKeyedStore(StaticType* key_type, WriteBarrierCharacter wb_info) { UNIMPLEMENTED_MIPS(); } #ifdef DEBUG bool CodeGenerator::HasValidEntryRegisters() { UNIMPLEMENTED_MIPS(); return false; } #endif #undef __ #define __ ACCESS_MASM(masm) // ----------------------------------------------------------------------------- // Reference support. Handle Reference::GetName() { UNIMPLEMENTED_MIPS(); return Handle(); } void Reference::DupIfPersist() { UNIMPLEMENTED_MIPS(); } void Reference::GetValue() { UNIMPLEMENTED_MIPS(); } void Reference::SetValue(InitState init_state, WriteBarrierCharacter wb_info) { UNIMPLEMENTED_MIPS(); } const char* GenericBinaryOpStub::GetName() { UNIMPLEMENTED_MIPS(); return name_; } #undef __ } } // namespace v8::internal #endif // V8_TARGET_ARCH_MIPS