Index: src/ia32/lithium-ia32.h |
=================================================================== |
--- src/ia32/lithium-ia32.h (revision 5982) |
+++ src/ia32/lithium-ia32.h (working copy) |
@@ -124,6 +124,8 @@ |
// LInteger32ToDouble |
// LIsNull |
// LIsNullAndBranch |
+// LIsObject |
+// LIsObjectAndBranch |
// LIsSmi |
// LIsSmiAndBranch |
// LLoadNamedField |
@@ -206,6 +208,8 @@ |
V(Integer32ToDouble) \ |
V(IsNull) \ |
V(IsNullAndBranch) \ |
+ V(IsObject) \ |
+ V(IsObjectAndBranch) \ |
V(IsSmi) \ |
V(IsSmiAndBranch) \ |
V(HasInstanceType) \ |
@@ -747,6 +751,48 @@ |
}; |
+class LIsObject: public LUnaryOperation { |
+ public: |
+ LIsObject(LOperand* value, LOperand* temp) |
+ : LUnaryOperation(value), temp_(temp) {} |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(IsObject, "is-object") |
+ |
+ LOperand* temp() { return temp_; } |
+ |
+ private: |
+ LOperand* temp_; |
+}; |
+ |
+ |
+class LIsObjectAndBranch: public LIsObject { |
+ public: |
+ LIsObjectAndBranch(LOperand* value, |
+ LOperand* temp, |
+ LOperand* temp2, |
+ int true_block_id, |
+ int false_block_id) |
+ : LIsObject(value, temp), |
+ temp2_(temp2), |
+ true_block_id_(true_block_id), |
+ false_block_id_(false_block_id) { } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") |
+ virtual void PrintDataTo(StringStream* stream) const; |
+ virtual bool IsControl() const { return true; } |
+ |
+ int true_block_id() const { return true_block_id_; } |
+ int false_block_id() const { return false_block_id_; } |
+ |
+ LOperand* temp2() { return temp2_; } |
+ |
+ private: |
+ LOperand* temp2_; |
+ int true_block_id_; |
+ int false_block_id_; |
+}; |
+ |
+ |
class LIsSmi: public LUnaryOperation { |
public: |
explicit LIsSmi(LOperand* value) : LUnaryOperation(value) {} |