Index: src/ia32/lithium-ia32.h |
diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h |
index ab964af65f30529824bbed2efd108273821b92cc..d96764f3b5edbe465a97a9f57cae60a25a36457c 100644 |
--- a/src/ia32/lithium-ia32.h |
+++ b/src/ia32/lithium-ia32.h |
@@ -73,6 +73,7 @@ class LCodeGen; |
V(ClampTToUint8) \ |
V(ClampTToUint8NoSSE2) \ |
V(ClassOfTestAndBranch) \ |
+ V(ClobberDoubles) \ |
V(CompareNumericAndBranch) \ |
V(CmpObjectEqAndBranch) \ |
V(CmpHoleAndBranch) \ |
@@ -406,19 +407,32 @@ class LInstructionGap V8_FINAL : public LGap { |
}; |
+class LClobberDoubles V8_FINAL : public LTemplateInstruction<0, 0, 0> { |
+ public: |
+ LClobberDoubles() { ASSERT(!CpuFeatures::IsSafeForSnapshot(SSE2)); } |
+ |
+ virtual bool ClobbersDoubleRegisters() const { return true; } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(ClobberDoubles, "clobber-d") |
+}; |
+ |
+ |
class LGoto V8_FINAL : public LTemplateInstruction<0, 0, 0> { |
public: |
- explicit LGoto(int block_id) : block_id_(block_id) { } |
+ explicit LGoto(HBasicBlock* block) : block_(block) { } |
virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE; |
DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") |
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
virtual bool IsControl() const V8_OVERRIDE { return true; } |
- int block_id() const { return block_id_; } |
+ int block_id() const { return block_->block_id(); } |
+ virtual bool ClobbersDoubleRegisters() const { return false; } |
+ |
+ bool jumps_to_join() const { return block_->predecessors()->length() > 1; } |
private: |
- int block_id_; |
+ HBasicBlock* block_; |
}; |