| Index: src/ia32/assembler-ia32.h
 | 
| diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h
 | 
| index 232a85e23a9c78afa7937b948f22c289bb22354a..b1f421ec86730388f2e8d72c1e8b6c1e5b980c2a 100644
 | 
| --- a/src/ia32/assembler-ia32.h
 | 
| +++ b/src/ia32/assembler-ia32.h
 | 
| @@ -65,10 +65,7 @@ namespace internal {
 | 
|  // and best performance in optimized code.
 | 
|  //
 | 
|  struct Register {
 | 
| -  static const int kMaxNumAllocatableRegisters = 6;
 | 
| -  static int NumAllocatableRegisters() {
 | 
| -    return kMaxNumAllocatableRegisters;
 | 
| -  }
 | 
| +  static const int kNumAllocatableRegisters = 6;
 | 
|    static const int kNumRegisters = 8;
 | 
|  
 | 
|    static inline const char* AllocationIndexToString(int index);
 | 
| @@ -122,7 +119,7 @@ const Register no_reg = { kRegister_no_reg_Code };
 | 
|  
 | 
|  
 | 
|  inline const char* Register::AllocationIndexToString(int index) {
 | 
| -  ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters);
 | 
| +  ASSERT(index >= 0 && index < kNumAllocatableRegisters);
 | 
|    // This is the mapping of allocation indices to registers.
 | 
|    const char* const kNames[] = { "eax", "ecx", "edx", "ebx", "esi", "edi" };
 | 
|    return kNames[index];
 | 
| @@ -136,69 +133,22 @@ inline int Register::ToAllocationIndex(Register reg) {
 | 
|  
 | 
|  
 | 
|  inline Register Register::FromAllocationIndex(int index)  {
 | 
| -  ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters);
 | 
| +  ASSERT(index >= 0 && index < kNumAllocatableRegisters);
 | 
|    return (index >= 4) ? from_code(index + 2) : from_code(index);
 | 
|  }
 | 
|  
 | 
|  
 | 
| -struct IntelDoubleRegister {
 | 
| -  static const int kMaxNumAllocatableRegisters = 7;
 | 
| -  static int NumAllocatableRegisters();
 | 
| -  static int NumRegisters();
 | 
| -  static const char* AllocationIndexToString(int index);
 | 
| -
 | 
| -  static int ToAllocationIndex(IntelDoubleRegister reg) {
 | 
| -    ASSERT(reg.code() != 0);
 | 
| -    return reg.code() - 1;
 | 
| -  }
 | 
| -
 | 
| -  static IntelDoubleRegister FromAllocationIndex(int index) {
 | 
| -    ASSERT(index >= 0 && index < NumAllocatableRegisters());
 | 
| -    return from_code(index + 1);
 | 
| -  }
 | 
| -
 | 
| -  static IntelDoubleRegister from_code(int code) {
 | 
| -    IntelDoubleRegister result = { code };
 | 
| -    return result;
 | 
| -  }
 | 
| -
 | 
| -  bool is_valid() const {
 | 
| -    return 0 <= code_ && code_ < NumRegisters();
 | 
| -  }
 | 
| -  int code() const {
 | 
| -    ASSERT(is_valid());
 | 
| -    return code_;
 | 
| -  }
 | 
| -
 | 
| -  int code_;
 | 
| -};
 | 
| -
 | 
| -
 | 
| -const IntelDoubleRegister double_register_0 = { 0 };
 | 
| -const IntelDoubleRegister double_register_1 = { 1 };
 | 
| -const IntelDoubleRegister double_register_2 = { 2 };
 | 
| -const IntelDoubleRegister double_register_3 = { 3 };
 | 
| -const IntelDoubleRegister double_register_4 = { 4 };
 | 
| -const IntelDoubleRegister double_register_5 = { 5 };
 | 
| -const IntelDoubleRegister double_register_6 = { 6 };
 | 
| -const IntelDoubleRegister double_register_7 = { 7 };
 | 
| -
 | 
| -
 | 
| -struct XMMRegister : IntelDoubleRegister {
 | 
| +struct XMMRegister {
 | 
|    static const int kNumAllocatableRegisters = 7;
 | 
|    static const int kNumRegisters = 8;
 | 
|  
 | 
| -  static XMMRegister from_code(int code) {
 | 
| -    STATIC_ASSERT(sizeof(XMMRegister) == sizeof(IntelDoubleRegister));
 | 
| -    XMMRegister result;
 | 
| -    result.code_ = code;
 | 
| -    return result;
 | 
| +  static int ToAllocationIndex(XMMRegister reg) {
 | 
| +    ASSERT(reg.code() != 0);
 | 
| +    return reg.code() - 1;
 | 
|    }
 | 
|  
 | 
| -  bool is(XMMRegister reg) const { return code_ == reg.code_; }
 | 
| -
 | 
|    static XMMRegister FromAllocationIndex(int index) {
 | 
| -    ASSERT(index >= 0 && index < NumAllocatableRegisters());
 | 
| +    ASSERT(index >= 0 && index < kNumAllocatableRegisters);
 | 
|      return from_code(index + 1);
 | 
|    }
 | 
|  
 | 
| @@ -215,46 +165,34 @@ struct XMMRegister : IntelDoubleRegister {
 | 
|      };
 | 
|      return names[index];
 | 
|    }
 | 
| -};
 | 
| -
 | 
|  
 | 
| -#define xmm0 (static_cast<const XMMRegister&>(double_register_0))
 | 
| -#define xmm1 (static_cast<const XMMRegister&>(double_register_1))
 | 
| -#define xmm2 (static_cast<const XMMRegister&>(double_register_2))
 | 
| -#define xmm3 (static_cast<const XMMRegister&>(double_register_3))
 | 
| -#define xmm4 (static_cast<const XMMRegister&>(double_register_4))
 | 
| -#define xmm5 (static_cast<const XMMRegister&>(double_register_5))
 | 
| -#define xmm6 (static_cast<const XMMRegister&>(double_register_6))
 | 
| -#define xmm7 (static_cast<const XMMRegister&>(double_register_7))
 | 
| -
 | 
| -
 | 
| -struct X87TopOfStackRegister : IntelDoubleRegister {
 | 
| -  static const int kNumAllocatableRegisters = 1;
 | 
| -  static const int kNumRegisters = 1;
 | 
| -
 | 
| -  bool is(X87TopOfStackRegister reg) const {
 | 
| -    return code_ == reg.code_;
 | 
| +  static XMMRegister from_code(int code) {
 | 
| +    XMMRegister r = { code };
 | 
| +    return r;
 | 
|    }
 | 
|  
 | 
| -  static const char* AllocationIndexToString(int index) {
 | 
| -    ASSERT(index >= 0 && index < kNumAllocatableRegisters);
 | 
| -    const char* const names[] = {
 | 
| -      "st0",
 | 
| -    };
 | 
| -    return names[index];
 | 
| +  bool is_valid() const { return 0 <= code_ && code_ < kNumRegisters; }
 | 
| +  bool is(XMMRegister reg) const { return code_ == reg.code_; }
 | 
| +  int code() const {
 | 
| +    ASSERT(is_valid());
 | 
| +    return code_;
 | 
|    }
 | 
|  
 | 
| -  static int ToAllocationIndex(X87TopOfStackRegister reg) {
 | 
| -    ASSERT(reg.code() == 0);
 | 
| -    return 0;
 | 
| -  }
 | 
| +  int code_;
 | 
|  };
 | 
|  
 | 
| -#define x87tos \
 | 
| -  static_cast<const X87TopOfStackRegister&>(double_register_0)
 | 
| +
 | 
| +const XMMRegister xmm0 = { 0 };
 | 
| +const XMMRegister xmm1 = { 1 };
 | 
| +const XMMRegister xmm2 = { 2 };
 | 
| +const XMMRegister xmm3 = { 3 };
 | 
| +const XMMRegister xmm4 = { 4 };
 | 
| +const XMMRegister xmm5 = { 5 };
 | 
| +const XMMRegister xmm6 = { 6 };
 | 
| +const XMMRegister xmm7 = { 7 };
 | 
|  
 | 
|  
 | 
| -typedef IntelDoubleRegister DoubleRegister;
 | 
| +typedef XMMRegister DoubleRegister;
 | 
|  
 | 
|  
 | 
|  enum Condition {
 | 
| 
 |