| Index: vm/instructions_ia32.h
 | 
| ===================================================================
 | 
| --- vm/instructions_ia32.h	(revision 700)
 | 
| +++ vm/instructions_ia32.h	(working copy)
 | 
| @@ -52,159 +52,6 @@
 | 
|  };
 | 
|  
 | 
|  
 | 
| -// Pattern to load receiver from stack into EAX, with caller's return
 | 
| -// address on TOS and EDX containing the number of arguments. Pattern:
 | 
| -// 'mov eax, 0xb(edx)'.
 | 
| -// 'mov eax, (esp+eax*0x2)'.
 | 
| -class ICLoadReceiver : public Instruction {
 | 
| - public:
 | 
| -  explicit ICLoadReceiver(uword pc) : Instruction(pc) {}
 | 
| -
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kLengthInBytes;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  virtual const int* pattern() const;
 | 
| -
 | 
| -  static const int kLengthInBytes = 6;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ICLoadReceiver);
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// Pattern for a conditional jump (if zero) to a far address. Pattern:
 | 
| -// 'jz <target-address>'
 | 
| -class JumpIfZero : public Instruction {
 | 
| - public:
 | 
| -  explicit JumpIfZero(uword pc) : Instruction(pc) {}
 | 
| -  uword TargetAddress() const;
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kLengthInBytes;
 | 
| -  }
 | 
| -
 | 
| -  void SetTargetAddress(uword pc);
 | 
| -
 | 
| - private:
 | 
| -  friend class TestEaxIsSmi;
 | 
| -  friend class ICCheckReceiverClass;
 | 
| -
 | 
| -  virtual const int* pattern() const;
 | 
| -
 | 
| -  static const int kLengthInBytes = 6;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(JumpIfZero);
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// Pattern for comparison of an immediate with EAX. Pattern:
 | 
| -// 'cmp eax, <immediate>'.
 | 
| -class CmpEaxWithImmediate : public Instruction {
 | 
| - public:
 | 
| -  explicit CmpEaxWithImmediate(uword pc) : Instruction(pc) {}
 | 
| -  Immediate* immediate() const {
 | 
| -    ASSERT(IsValid());
 | 
| -    return reinterpret_cast<Immediate*>(start() + 1);
 | 
| -  }
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kLengthInBytes;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  virtual const int* pattern() const;
 | 
| -
 | 
| -  static const int kLengthInBytes = 5;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(CmpEaxWithImmediate);
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// Pattern to test if EAX contains a Smi. Pattern:
 | 
| -// 'test al, 0x1'
 | 
| -// 'jz <is-smi-target>'.
 | 
| -class TestEaxIsSmi : public Instruction {
 | 
| - public:
 | 
| -  explicit TestEaxIsSmi(uword pc)
 | 
| -      : Instruction(pc),
 | 
| -        jz_(pc + kTestLengthInBytes) {}
 | 
| -  uword TargetAddress() const {
 | 
| -    ASSERT(IsValid());
 | 
| -    return jz_.TargetAddress();
 | 
| -  }
 | 
| -
 | 
| -  void SetTargetAddress(uword new_target) {
 | 
| -    ASSERT(IsValid());
 | 
| -    jz_.SetTargetAddress(new_target);
 | 
| -    ASSERT(IsValid());
 | 
| -  }
 | 
| -
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kTestLengthInBytes + jz_.pattern_length_in_bytes();
 | 
| -  }
 | 
| -  virtual bool IsValid() const {
 | 
| -    return Instruction::IsValid() && jz_.IsValid();
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  virtual const int* pattern() const;
 | 
| -
 | 
| -  static const int kTestLengthInBytes = 2;
 | 
| -  JumpIfZero jz_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(TestEaxIsSmi);
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// Pattern for checking class of the receiver (class in EBX). Pattern:
 | 
| -// cmp ebx, <test-class>
 | 
| -// jz <is-class-target>'
 | 
| -class ICCheckReceiverClass : public Instruction {
 | 
| - public:
 | 
| -  explicit ICCheckReceiverClass(uword pc)
 | 
| -      : Instruction(pc),
 | 
| -        jz_(pc + kTestLengthInBytes) {}
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kTestLengthInBytes + jz_.pattern_length_in_bytes();
 | 
| -  }
 | 
| -  virtual bool IsValid() const {
 | 
| -    return Instruction::IsValid() && jz_.IsValid();
 | 
| -  }
 | 
| -  uword TargetAddress() const {
 | 
| -    ASSERT(IsValid());
 | 
| -    return jz_.TargetAddress();
 | 
| -  }
 | 
| -  RawClass* TestClass() const;
 | 
| -
 | 
| -  void SetTargetAddress(uword new_target) {
 | 
| -    ASSERT(IsValid());
 | 
| -    jz_.SetTargetAddress(new_target);
 | 
| -    ASSERT(IsValid());
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  virtual const int* pattern() const;
 | 
| -
 | 
| -  static const int kTestLengthInBytes = 6;
 | 
| -  JumpIfZero jz_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ICCheckReceiverClass);
 | 
| -};
 | 
| -
 | 
| -
 | 
| -class LoadObjectClass : public Instruction {
 | 
| - public:
 | 
| -  explicit LoadObjectClass(uword pc) : Instruction(pc) {}
 | 
| -  virtual int pattern_length_in_bytes() const {
 | 
| -    return kLoadObjectClassLengthInBytes;
 | 
| -  }
 | 
| - private:
 | 
| -  virtual const int* pattern() const;
 | 
| -  static const int kLoadObjectClassLengthInBytes = 3;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(LoadObjectClass);
 | 
| -};
 | 
| -
 | 
| -
 | 
|  class CallOrJump : public Instruction {
 | 
|   public:
 | 
|    virtual int pattern_length_in_bytes() const {
 | 
| 
 |