diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2010-03-10 10:50:46 -0800 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2010-03-10 10:50:46 -0800 |
commit | 073947c150316cfc0bd440851e590663c3b67814 (patch) | |
tree | 892fc64c0d5cdfd021c14af01a631f6b6c91b982 /deps/v8/src/mips | |
parent | c2c0cfb75f46ddcb3a0900f244966764d2640240 (diff) | |
download | node-new-073947c150316cfc0bd440851e590663c3b67814.tar.gz |
Upgrade V8 to 2.1.3
Diffstat (limited to 'deps/v8/src/mips')
-rw-r--r-- | deps/v8/src/mips/codegen-mips.cc | 45 | ||||
-rw-r--r-- | deps/v8/src/mips/codegen-mips.h | 14 | ||||
-rw-r--r-- | deps/v8/src/mips/fast-codegen-mips.cc | 20 | ||||
-rw-r--r-- | deps/v8/src/mips/full-codegen-mips.cc | 5 | ||||
-rw-r--r-- | deps/v8/src/mips/ic-mips.cc | 25 | ||||
-rw-r--r-- | deps/v8/src/mips/jump-target-mips.cc | 1 | ||||
-rw-r--r-- | deps/v8/src/mips/macro-assembler-mips.cc | 31 | ||||
-rw-r--r-- | deps/v8/src/mips/macro-assembler-mips.h | 47 | ||||
-rw-r--r-- | deps/v8/src/mips/stub-cache-mips.cc | 31 | ||||
-rw-r--r-- | deps/v8/src/mips/virtual-frame-mips.cc | 12 | ||||
-rw-r--r-- | deps/v8/src/mips/virtual-frame-mips.h | 19 |
11 files changed, 149 insertions, 101 deletions
diff --git a/deps/v8/src/mips/codegen-mips.cc b/deps/v8/src/mips/codegen-mips.cc index 2de45f67f0..facccc288d 100644 --- a/deps/v8/src/mips/codegen-mips.cc +++ b/deps/v8/src/mips/codegen-mips.cc @@ -81,7 +81,7 @@ CodeGenerator::CodeGenerator(MacroAssembler* masm) // a1: called JS function // cp: callee's context -void CodeGenerator::Generate(CompilationInfo* info, Mode mode) { +void CodeGenerator::Generate(CompilationInfo* infomode) { UNIMPLEMENTED_MIPS(); } @@ -292,6 +292,16 @@ void CodeGenerator::GenerateIsNonNegativeSmi(ZoneList<Expression*>* args) { } +void CodeGenerator::GenerateMathPow(ZoneList<Expression*>* args) { + UNIMPLEMENTED_MIPS(); +} + + +void CodeGenerator::GenerateMathSqrt(ZoneList<Expression*>* args) { + UNIMPLEMENTED_MIPS(); +} + + // This should generate code that performs a charCodeAt() call or returns // undefined in order to trigger the slow case, Runtime_StringCharCodeAt. // It is not yet implemented on ARM, so it always goes to the slow case. @@ -300,6 +310,11 @@ void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) { } +void CodeGenerator::GenerateCharFromCode(ZoneList<Expression*>* args) { + UNIMPLEMENTED_MIPS(); +} + + void CodeGenerator::GenerateIsArray(ZoneList<Expression*>* args) { UNIMPLEMENTED_MIPS(); } @@ -457,6 +472,34 @@ void CEntryStub::Generate(MacroAssembler* masm) { void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) { UNIMPLEMENTED_MIPS(); + + // Save callee saved registers on the stack. + __ MultiPush(kCalleeSaved | ra.bit()); + + // ********** State ********** + // + // * Registers: + // a0: entry_address + // a1: function + // a2: reveiver_pointer + // a3: argc + // + // * Stack: + // --------------------------- + // args + // --------------------------- + // 4 args slots + // --------------------------- + // callee saved registers + ra + // --------------------------- + // + // *************************** + + __ break_(0x1234); + + // Restore callee saved registers from the stack. + __ MultiPop(kCalleeSaved | ra.bit()); + // Load a result. __ li(v0, Operand(0x1234)); __ jr(ra); diff --git a/deps/v8/src/mips/codegen-mips.h b/deps/v8/src/mips/codegen-mips.h index 147b8724ed..987dcca879 100644 --- a/deps/v8/src/mips/codegen-mips.h +++ b/deps/v8/src/mips/codegen-mips.h @@ -157,11 +157,10 @@ class CodeGenerator: public AstVisitor { private: // Construction/Destruction. explicit CodeGenerator(MacroAssembler* masm); - virtual ~CodeGenerator() { delete masm_; } // Accessors. inline bool is_eval(); - Scope* scope() const { return scope_; } + inline Scope* scope(); // Generating deferred code. void ProcessDeferred(); @@ -184,7 +183,7 @@ class CodeGenerator: public AstVisitor { #undef DEF_VISIT // Main code generation function - void Generate(CompilationInfo* info, Mode mode); + void Generate(CompilationInfo* info); struct InlineRuntimeLUT { void (CodeGenerator::*method)(ZoneList<Expression*>*); @@ -227,6 +226,9 @@ class CodeGenerator: public AstVisitor { // Fast support for charCodeAt(n). void GenerateFastCharCodeAt(ZoneList<Expression*>* args); + // Fast support for string.charAt(n) and string[n]. + void GenerateCharFromCode(ZoneList<Expression*>* args); + // Fast support for object equality testing. void GenerateObjectEquals(ZoneList<Expression*>* args); @@ -244,6 +246,11 @@ class CodeGenerator: public AstVisitor { void GenerateRegExpExec(ZoneList<Expression*>* args); void GenerateNumberToString(ZoneList<Expression*>* args); + // Fast support for Math.pow(). + void GenerateMathPow(ZoneList<Expression*>* args); + // Fast support for Math.sqrt(). + void GenerateMathPow(ZoneList<Expression*>* args); + // Fast support for Math.sin and Math.cos. inline void GenerateMathSin(ZoneList<Expression*>* args); @@ -302,6 +309,7 @@ class CodeGenerator: public AstVisitor { friend class JumpTarget; friend class Reference; friend class FastCodeGenerator; + friend class FullCodeGenerator; friend class FullCodeGenSyntaxChecker; DISALLOW_COPY_AND_ASSIGN(CodeGenerator); diff --git a/deps/v8/src/mips/fast-codegen-mips.cc b/deps/v8/src/mips/fast-codegen-mips.cc index c47f6326d8..48a0ce6c75 100644 --- a/deps/v8/src/mips/fast-codegen-mips.cc +++ b/deps/v8/src/mips/fast-codegen-mips.cc @@ -35,6 +35,14 @@ namespace internal { #define __ ACCESS_MASM(masm_) +Register FastCodeGenerator::accumulator0() { return no_reg; } +Register FastCodeGenerator::accumulator1() { return no_reg; } +Register FastCodeGenerator::scratch0() { return no_reg; } +Register FastCodeGenerator::scratch1() { return no_reg; } +Register FastCodeGenerator::receiver_reg() { return no_reg; } +Register FastCodeGenerator::context_reg() { return no_reg; } + + void FastCodeGenerator::Generate(CompilationInfo* info) { UNIMPLEMENTED_MIPS(); } @@ -45,7 +53,17 @@ void FastCodeGenerator::EmitThisPropertyStore(Handle<String> name) { } -void FastCodeGenerator::EmitGlobalVariableLoad(Handle<String> name) { +void FastCodeGenerator::EmitGlobalVariableLoad(Handle<Object> name) { + UNIMPLEMENTED_MIPS(); +} + + +void FastCodeGenerator::EmitThisPropertyLoad(Handle<String> name) { + UNIMPLEMENTED_MIPS(); +} + + +void FastCodeGenerator::EmitBitOr() { UNIMPLEMENTED_MIPS(); } diff --git a/deps/v8/src/mips/full-codegen-mips.cc b/deps/v8/src/mips/full-codegen-mips.cc index 920329eea4..3c29e99be9 100644 --- a/deps/v8/src/mips/full-codegen-mips.cc +++ b/deps/v8/src/mips/full-codegen-mips.cc @@ -146,6 +146,11 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) { } +void FullCodeGenerator::VisitAssignment(Assignment* expr) { + UNIMPLEMENTED_MIPS(); +} + + void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { UNIMPLEMENTED_MIPS(); } diff --git a/deps/v8/src/mips/ic-mips.cc b/deps/v8/src/mips/ic-mips.cc index 5598cdfcd1..605616626a 100644 --- a/deps/v8/src/mips/ic-mips.cc +++ b/deps/v8/src/mips/ic-mips.cc @@ -90,11 +90,6 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) { void LoadIC::GenerateMiss(MacroAssembler* masm) { - Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); -} - - -void LoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) { UNIMPLEMENTED_MIPS(); } @@ -120,11 +115,6 @@ Object* KeyedLoadIC_Miss(Arguments args); void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { - Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss))); -} - - -void KeyedLoadIC::Generate(MacroAssembler* masm, const ExternalReference& f) { UNIMPLEMENTED_MIPS(); } @@ -145,24 +135,23 @@ void KeyedLoadIC::GenerateExternalArray(MacroAssembler* masm, } -void KeyedStoreIC::Generate(MacroAssembler* masm, - const ExternalReference& f) { +void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) { UNIMPLEMENTED_MIPS(); } -void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) { +void KeyedStoreIC::GenerateExternalArray(MacroAssembler* masm, + ExternalArrayType array_type) { UNIMPLEMENTED_MIPS(); } -void KeyedStoreIC::GenerateExternalArray(MacroAssembler* masm, - ExternalArrayType array_type) { +void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { UNIMPLEMENTED_MIPS(); } -void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) { +void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { UNIMPLEMENTED_MIPS(); } @@ -172,12 +161,12 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { } -void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { +void StoreIC::GenerateMiss(MacroAssembler* masm) { UNIMPLEMENTED_MIPS(); } -void StoreIC::GenerateMiss(MacroAssembler* masm) { +void StoreIC::GenerateArrayLength(MacroAssembler* masm) { UNIMPLEMENTED_MIPS(); } diff --git a/deps/v8/src/mips/jump-target-mips.cc b/deps/v8/src/mips/jump-target-mips.cc index 3301d19911..e8398a849c 100644 --- a/deps/v8/src/mips/jump-target-mips.cc +++ b/deps/v8/src/mips/jump-target-mips.cc @@ -31,6 +31,7 @@ #include "codegen-inl.h" #include "jump-target-inl.h" #include "register-allocator-inl.h" +#include "virtual-frame-inl.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/mips/macro-assembler-mips.cc b/deps/v8/src/mips/macro-assembler-mips.cc index b733bdd926..e49858b1d8 100644 --- a/deps/v8/src/mips/macro-assembler-mips.cc +++ b/deps/v8/src/mips/macro-assembler-mips.cc @@ -422,7 +422,7 @@ void MacroAssembler::MultiPopReversed(RegList regs) { // Trashes the at register if no scratch register is provided. void MacroAssembler::Branch(Condition cond, int16_t offset, Register rs, const Operand& rt, Register scratch) { - Register r2; + Register r2 = no_reg; if (rt.is_reg()) { // We don't want any other register but scratch clobbered. ASSERT(!scratch.is(rs) && !scratch.is(rt.rm_)); @@ -489,7 +489,7 @@ void MacroAssembler::Branch(Condition cond, int16_t offset, Register rs, void MacroAssembler::Branch(Condition cond, Label* L, Register rs, const Operand& rt, Register scratch) { - Register r2; + Register r2 = no_reg; if (rt.is_reg()) { r2 = rt.rm_; } else if (cond != cc_always) { @@ -559,7 +559,7 @@ void MacroAssembler::Branch(Condition cond, Label* L, Register rs, // cases, so we keep slt and add an intermediate third instruction. void MacroAssembler::BranchAndLink(Condition cond, int16_t offset, Register rs, const Operand& rt, Register scratch) { - Register r2; + Register r2 = no_reg; if (rt.is_reg()) { r2 = rt.rm_; } else if (cond != cc_always) { @@ -634,7 +634,7 @@ void MacroAssembler::BranchAndLink(Condition cond, int16_t offset, Register rs, void MacroAssembler::BranchAndLink(Condition cond, Label* L, Register rs, const Operand& rt, Register scratch) { - Register r2; + Register r2 = no_reg; if (rt.is_reg()) { r2 = rt.rm_; } else if (cond != cc_always) { @@ -787,6 +787,16 @@ void MacroAssembler::Call(Label* target) { } +#ifdef ENABLE_DEBUGGER_SUPPORT + // --------------------------------------------------------------------------- + // Debugger Support + + void MacroAssembler::DebugBreak() { + UNIMPLEMENTED_MIPS(); + } +#endif + + // --------------------------------------------------------------------------- // Exception handling @@ -826,14 +836,21 @@ void MacroAssembler::CallRuntime(Runtime::FunctionId fid, int num_arguments) { } -void MacroAssembler::TailCallRuntime(const ExternalReference& ext, +void MacroAssembler::TailCallExternalReference(const ExternalReference& ext, + int num_arguments, + int result_size) { + UNIMPLEMENTED_MIPS(); +} + + +void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size) { - UNIMPLEMENTED_MIPS(); + TailCallExternalReference(ExternalReference(fid), num_arguments, result_size); } -void MacroAssembler::JumpToRuntime(const ExternalReference& builtin) { +void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { UNIMPLEMENTED_MIPS(); } diff --git a/deps/v8/src/mips/macro-assembler-mips.h b/deps/v8/src/mips/macro-assembler-mips.h index aea98366eb..b34488cef3 100644 --- a/deps/v8/src/mips/macro-assembler-mips.h +++ b/deps/v8/src/mips/macro-assembler-mips.h @@ -115,11 +115,7 @@ class MacroAssembler: public Assembler { Heap::RootListIndex index, Condition cond, Register src1, const Operand& src2); - // Sets the remembered set bit for [address+offset], where address is the - // address of the heap object 'object'. The address must be in the first 8K - // of an allocated page. The 'scratch' register is used in the - // implementation and all 3 registers are clobbered by the operation, as - // well as the ip register. + // Sets the remembered set bit for [address+offset]. void RecordWrite(Register object, Register offset, Register scratch); @@ -182,19 +178,8 @@ class MacroAssembler: public Assembler { // Push multiple registers on the stack. - // With MultiPush, lower registers are pushed first on the stack. - // For example if you push t0, t1, s0, and ra you get: - // | | - // |-----------------------| - // | t0 | + - // |-----------------------| | - // | t1 | | - // |-----------------------| | - // | s0 | v - // |-----------------------| - - // | ra | - // |-----------------------| - // | | + // Registers are saved in numerical order, with higher numbered registers + // saved in higher memory addresses void MultiPush(RegList regs); void MultiPushReversed(RegList regs); void Push(Register src) { @@ -224,6 +209,20 @@ class MacroAssembler: public Assembler { } +#ifdef ENABLE_DEBUGGER_SUPPORT + // --------------------------------------------------------------------------- + // Debugger Support + + void SaveRegistersToMemory(RegList regs); + void RestoreRegistersFromMemory(RegList regs); + void CopyRegistersFromMemoryToStack(Register base, RegList regs); + void CopyRegistersFromStackToMemory(Register base, + Register scratch, + RegList regs); + void DebugBreak(); +#endif + + // --------------------------------------------------------------------------- // Exception handling @@ -268,21 +267,25 @@ class MacroAssembler: public Assembler { void StubReturn(int argc); // Call a runtime routine. - // Eventually this should be used for all C calls. void CallRuntime(Runtime::Function* f, int num_arguments); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments); // Tail call of a runtime routine (jump). - // Like JumpToRuntime, but also takes care of passing the number + // Like JumpToExternalReference, but also takes care of passing the number // of parameters. - void TailCallRuntime(const ExternalReference& ext, + void TailCallExternalReference(const ExternalReference& ext, + int num_arguments, + int result_size); + + // Convenience function: tail call a runtime routine (jump). + void TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size); // Jump to the builtin routine. - void JumpToRuntime(const ExternalReference& builtin); + void JumpToExternalReference(const ExternalReference& builtin); // Invoke specified builtin JavaScript function. Adds an entry to // the unresolved list if the name does not resolve. diff --git a/deps/v8/src/mips/stub-cache-mips.cc b/deps/v8/src/mips/stub-cache-mips.cc index a87a49b736..669fdaa3ce 100644 --- a/deps/v8/src/mips/stub-cache-mips.cc +++ b/deps/v8/src/mips/stub-cache-mips.cc @@ -72,20 +72,6 @@ void StubCompiler::GenerateLoadArrayLength(MacroAssembler* masm, } -// Generate code to load the length from a string object and return the length. -// If the receiver object is not a string or a wrapped string object the -// execution continues at the miss label. The register containing the -// receiver is potentially clobbered. -void StubCompiler::GenerateLoadStringLength2(MacroAssembler* masm, - Register receiver, - Register scratch1, - Register scratch2, - Label* miss) { - UNIMPLEMENTED_MIPS(); - __ break_(0x249); -} - - void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm, Register receiver, Register scratch1, @@ -99,7 +85,6 @@ void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm, // After executing generated code, the receiver_reg and name_reg // may be clobbered. void StubCompiler::GenerateStoreField(MacroAssembler* masm, - Builtins::Name storage_extend, JSObject* object, int index, Map* transition, @@ -120,18 +105,6 @@ void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) { #define __ ACCESS_MASM(masm()) -Register StubCompiler::CheckPrototypes(JSObject* object, - Register object_reg, - JSObject* holder, - Register holder_reg, - Register scratch, - String* name, - Label* miss) { - UNIMPLEMENTED_MIPS(); - return at; // UNIMPLEMENTED RETURN -} - - void StubCompiler::GenerateLoadField(JSObject* object, JSObject* holder, Register receiver, @@ -192,7 +165,7 @@ Object* StubCompiler::CompileLazyCompile(Code::Flags flags) { } -Object* CallStubCompiler::CompileCallField(Object* object, +Object* CallStubCompiler::CompileCallField(JSObject* object, JSObject* holder, int index, String* name) { @@ -211,7 +184,7 @@ Object* CallStubCompiler::CompileCallConstant(Object* object, } -Object* CallStubCompiler::CompileCallInterceptor(Object* object, +Object* CallStubCompiler::CompileCallInterceptor(JSObject* object, JSObject* holder, String* name) { UNIMPLEMENTED_MIPS(); diff --git a/deps/v8/src/mips/virtual-frame-mips.cc b/deps/v8/src/mips/virtual-frame-mips.cc index fad7ec4c7c..e89882f2ae 100644 --- a/deps/v8/src/mips/virtual-frame-mips.cc +++ b/deps/v8/src/mips/virtual-frame-mips.cc @@ -32,6 +32,7 @@ #include "codegen-inl.h" #include "register-allocator-inl.h" #include "scopes.h" +#include "virtual-frame-inl.h" namespace v8 { namespace internal { @@ -41,17 +42,6 @@ namespace internal { #define __ ACCESS_MASM(masm()) - -// On entry to a function, the virtual frame already contains the -// receiver and the parameters. All initial frame elements are in -// memory. -VirtualFrame::VirtualFrame() - : elements_(parameter_count() + local_count() + kPreallocatedElements), - stack_pointer_(parameter_count()) { // 0-based index of TOS. - UNIMPLEMENTED_MIPS(); -} - - void VirtualFrame::SyncElementBelowStackPointer(int index) { UNREACHABLE(); } diff --git a/deps/v8/src/mips/virtual-frame-mips.h b/deps/v8/src/mips/virtual-frame-mips.h index 79f973fb64..e5bc93fa28 100644 --- a/deps/v8/src/mips/virtual-frame-mips.h +++ b/deps/v8/src/mips/virtual-frame-mips.h @@ -61,16 +61,17 @@ class VirtualFrame : public ZoneObject { static const int kIllegalIndex = -1; // Construct an initial virtual frame on entry to a JS function. - VirtualFrame(); + inline VirtualFrame(); // Construct a virtual frame as a clone of an existing one. - explicit VirtualFrame(VirtualFrame* original); + explicit inline VirtualFrame(VirtualFrame* original); CodeGenerator* cgen() { return CodeGeneratorScope::Current(); } MacroAssembler* masm() { return cgen()->masm(); } // Create a duplicate of an existing valid frame element. - FrameElement CopyElementAt(int index); + FrameElement CopyElementAt(int index, + NumberInfo::Type info = NumberInfo::kUnknown); // The number of elements on the virtual frame. int element_count() { return elements_.length(); } @@ -366,9 +367,9 @@ class VirtualFrame : public ZoneObject { void EmitMultiPushReversed(RegList regs); // higher first // Push an element on the virtual frame. - void Push(Register reg); - void Push(Handle<Object> value); - void Push(Smi* value) { Push(Handle<Object>(value)); } + inline void Push(Register reg, NumberInfo::Type info = NumberInfo::kUnknown); + inline void Push(Handle<Object> value); + inline void Push(Smi* value); // Pushing a result invalidates it (its contents become owned by the frame). void Push(Result* result) { @@ -384,7 +385,7 @@ class VirtualFrame : public ZoneObject { // Nip removes zero or more elements from immediately below the top // of the frame, leaving the previous top-of-frame value on top of // the frame. Nip(k) is equivalent to x = Pop(), Drop(k), Push(x). - void Nip(int num_dropped); + inline void Nip(int num_dropped); // This pushes 4 arguments slots on the stack and saves asked 'a' registers // 'a' registers are arguments register a0 to a3. @@ -483,7 +484,7 @@ class VirtualFrame : public ZoneObject { // Push a copy of a frame slot (typically a local or parameter) on top of // the frame. - void PushFrameSlotAt(int index); + inline void PushFrameSlotAt(int index); // Push a the value of a frame slot (typically a local or parameter) on // top of the frame and invalidate the slot. @@ -534,7 +535,7 @@ class VirtualFrame : public ZoneObject { // (via PrepareForCall). void RawCallCodeObject(Handle<Code> code, RelocInfo::Mode rmode); - bool Equals(VirtualFrame* other); + inline bool Equals(VirtualFrame* other); // Classes that need raw access to the elements_ array. friend class DeferredCode; |