| Index: src/x64/lithium-codegen-x64.h
|
| ===================================================================
|
| --- src/x64/lithium-codegen-x64.h (revision 7180)
|
| +++ src/x64/lithium-codegen-x64.h (working copy)
|
| @@ -53,9 +53,10 @@
|
| current_instruction_(-1),
|
| instructions_(chunk->instructions()),
|
| deoptimizations_(4),
|
| + jump_table_(4),
|
| deoptimization_literals_(8),
|
| inlined_function_count_(0),
|
| - scope_(chunk->graph()->info()->scope()),
|
| + scope_(info->scope()),
|
| status_(UNUSED),
|
| deferred_(8),
|
| osr_pc_offset_(-1),
|
| @@ -65,6 +66,7 @@
|
|
|
| // Simple accessors.
|
| MacroAssembler* masm() const { return masm_; }
|
| + CompilationInfo* info() const { return info_; }
|
|
|
| // Support for converting LOperands to assembler types.
|
| Register ToRegister(LOperand* op) const;
|
| @@ -75,7 +77,6 @@
|
| Handle<Object> ToHandle(LConstantOperand* op) const;
|
| Operand ToOperand(LOperand* op) const;
|
|
|
| -
|
| // Try to generate code for the entire chunk, but it may fail if the
|
| // chunk contains constructs we cannot handle. Returns true if the
|
| // code generation attempt succeeded.
|
| @@ -90,6 +91,8 @@
|
| void DoDeferredTaggedToI(LTaggedToI* instr);
|
| void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
|
| void DoDeferredStackCheck(LGoto* instr);
|
| + void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
|
| + void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
|
| void DoDeferredLInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| Label* map_check);
|
|
|
| @@ -117,6 +120,10 @@
|
| bool is_done() const { return status_ == DONE; }
|
| bool is_aborted() const { return status_ == ABORTED; }
|
|
|
| + int strict_mode_flag() const {
|
| + return info()->is_strict() ? kStrictMode : kNonStrictMode;
|
| + }
|
| +
|
| LChunk* chunk() const { return chunk_; }
|
| Scope* scope() const { return scope_; }
|
| HGraph* graph() const { return chunk_->graph(); }
|
| @@ -143,6 +150,7 @@
|
| bool GeneratePrologue();
|
| bool GenerateBody();
|
| bool GenerateDeferredCode();
|
| + bool GenerateJumpTable();
|
| bool GenerateSafepointTable();
|
|
|
| void CallCode(Handle<Code> code,
|
| @@ -182,6 +190,7 @@
|
| XMMRegister ToDoubleRegister(int index) const;
|
|
|
| // Specific math operations - used from DoUnaryMathOperation.
|
| + void EmitIntegerMathAbs(LUnaryMathOperation* instr);
|
| void DoMathAbs(LUnaryMathOperation* instr);
|
| void DoMathFloor(LUnaryMathOperation* instr);
|
| void DoMathRound(LUnaryMathOperation* instr);
|
| @@ -197,10 +206,14 @@
|
| int arguments,
|
| int deoptimization_index);
|
| void RecordSafepoint(LPointerMap* pointers, int deoptimization_index);
|
| + void RecordSafepoint(int deoptimization_index);
|
| void RecordSafepointWithRegisters(LPointerMap* pointers,
|
| int arguments,
|
| int deoptimization_index);
|
| void RecordPosition(int position);
|
| + int LastSafepointEnd() {
|
| + return static_cast<int>(safepoints_.GetPcAfterGap());
|
| + }
|
|
|
| static Condition TokenToCondition(Token::Value op, bool is_unsigned);
|
| void EmitGoto(int block, LDeferredCode* deferred_stack_check = NULL);
|
| @@ -225,6 +238,17 @@
|
| // Caller should branch on equal condition.
|
| void EmitIsConstructCall(Register temp);
|
|
|
| + // Emits code for pushing a constant operand.
|
| + void EmitPushConstantOperand(LOperand* operand);
|
| +
|
| + struct JumpTableEntry {
|
| + inline JumpTableEntry(Address entry)
|
| + : label(),
|
| + address(entry) { }
|
| + Label label;
|
| + Address address;
|
| + };
|
| +
|
| LChunk* const chunk_;
|
| MacroAssembler* const masm_;
|
| CompilationInfo* const info_;
|
| @@ -233,6 +257,7 @@
|
| int current_instruction_;
|
| const ZoneList<LInstruction*>* instructions_;
|
| ZoneList<LEnvironment*> deoptimizations_;
|
| + ZoneList<JumpTableEntry> jump_table_;
|
| ZoneList<Handle<Object> > deoptimization_literals_;
|
| int inlined_function_count_;
|
| Scope* const scope_;
|
|
|