| Index: src/arm/lithium-codegen-arm.h
|
| ===================================================================
|
| --- src/arm/lithium-codegen-arm.h (revision 6955)
|
| +++ src/arm/lithium-codegen-arm.h (working copy)
|
| @@ -39,9 +39,31 @@
|
|
|
| // Forward declarations.
|
| class LDeferredCode;
|
| +class LGapNode;
|
| class SafepointGenerator;
|
|
|
| +class LGapResolver BASE_EMBEDDED {
|
| + public:
|
| + LGapResolver();
|
| + const ZoneList<LMoveOperands>* Resolve(const ZoneList<LMoveOperands>* moves,
|
| + LOperand* marker_operand);
|
|
|
| + private:
|
| + LGapNode* LookupNode(LOperand* operand);
|
| + bool CanReach(LGapNode* a, LGapNode* b, int visited_id);
|
| + bool CanReach(LGapNode* a, LGapNode* b);
|
| + void RegisterMove(LMoveOperands move);
|
| + void AddResultMove(LOperand* from, LOperand* to);
|
| + void AddResultMove(LGapNode* from, LGapNode* to);
|
| + void ResolveCycle(LGapNode* start, LOperand* marker_operand);
|
| +
|
| + ZoneList<LGapNode*> nodes_;
|
| + ZoneList<LGapNode*> identified_cycles_;
|
| + ZoneList<LMoveOperands> result_;
|
| + int next_visited_id_;
|
| +};
|
| +
|
| +
|
| class LCodeGen BASE_EMBEDDED {
|
| public:
|
| LCodeGen(LChunk* chunk, MacroAssembler* assembler, CompilationInfo* info)
|
| @@ -71,11 +93,17 @@
|
| void FinishCode(Handle<Code> code);
|
|
|
| // Deferred code support.
|
| + template<int T>
|
| + void DoDeferredGenericBinaryStub(LTemplateInstruction<1, 2, T>* instr,
|
| + Token::Value op);
|
| void DoDeferredNumberTagD(LNumberTagD* instr);
|
| void DoDeferredNumberTagI(LNumberTagI* instr);
|
| void DoDeferredTaggedToI(LTaggedToI* instr);
|
| void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
|
| void DoDeferredStackCheck(LGoto* instr);
|
| + void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
|
| + void DoDeferredLInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| + Label* map_check);
|
|
|
| // Parallel move support.
|
| void DoParallelMove(LParallelMove* move);
|
| @@ -107,9 +135,7 @@
|
| MacroAssembler* masm() const { return masm_; }
|
|
|
| Register scratch0() { return r9; }
|
| - SwVfpRegister single_scratch0() { return s0; }
|
| - SwVfpRegister single_scratch1() { return s1; }
|
| - DwVfpRegister double_scratch0() { return d1; }
|
| + DwVfpRegister double_scratch0() { return d0; }
|
|
|
| int GetNextEmittedBlock(int block);
|
| LInstruction* GetNextInstruction();
|
| @@ -155,7 +181,7 @@
|
| int arity,
|
| LInstruction* instr);
|
|
|
| - void LoadPrototype(Register result, Handle<JSObject> prototype);
|
| + void LoadHeapObject(Register result, Handle<HeapObject> object);
|
|
|
| void RegisterLazyDeoptimization(LInstruction* instr);
|
| void RegisterEnvironmentForDeoptimization(LEnvironment* environment);
|
| @@ -191,6 +217,7 @@
|
| MemOperand ToMemOperand(LOperand* op) const;
|
|
|
| // Specific math operations - used from DoUnaryMathOperation.
|
| + void EmitIntegerMathAbs(LUnaryMathOperation* instr);
|
| void DoMathAbs(LUnaryMathOperation* instr);
|
| void DoMathFloor(LUnaryMathOperation* instr);
|
| void DoMathSqrt(LUnaryMathOperation* instr);
|
| @@ -200,6 +227,9 @@
|
| void RecordSafepointWithRegisters(LPointerMap* pointers,
|
| int arguments,
|
| int deoptimization_index);
|
| + void RecordSafepointWithRegistersAndDoubles(LPointerMap* pointers,
|
| + int arguments,
|
| + int deoptimization_index);
|
| void RecordPosition(int position);
|
|
|
| static Condition TokenToCondition(Token::Value op, bool is_unsigned);
|
|
|