| Index: src/arm/constants-arm.h | 
| =================================================================== | 
| --- src/arm/constants-arm.h	(revision 5347) | 
| +++ src/arm/constants-arm.h	(working copy) | 
| @@ -194,6 +194,13 @@ | 
| }; | 
|  | 
|  | 
| +// Type of VFP register. Determines register encoding. | 
| +enum VFPRegPrecision { | 
| +  kSinglePrecision = 0, | 
| +  kDoublePrecision = 1 | 
| +}; | 
| + | 
| + | 
| typedef int32_t instr_t; | 
|  | 
|  | 
| @@ -269,6 +276,15 @@ | 
| inline int VCField() const { return Bit(8); } | 
| inline int VAField() const { return Bits(23, 21); } | 
| inline int VBField() const { return Bits(6, 5); } | 
| +  inline int VFPNRegCode(VFPRegPrecision pre) { | 
| +    return VFPGlueRegCode(pre, 16, 7); | 
| +  } | 
| +  inline int VFPMRegCode(VFPRegPrecision pre) { | 
| +    return VFPGlueRegCode(pre, 0, 5); | 
| +  } | 
| +  inline int VFPDRegCode(VFPRegPrecision pre) { | 
| +    return VFPGlueRegCode(pre, 12, 22); | 
| +  } | 
|  | 
| // Fields used in Data processing instructions | 
| inline Opcode OpcodeField() const { | 
| @@ -343,6 +359,17 @@ | 
| static Instr* At(byte* pc) { return reinterpret_cast<Instr*>(pc); } | 
|  | 
| private: | 
| +  // Join split register codes, depending on single or double precision. | 
| +  // four_bit is the position of the least-significant bit of the four | 
| +  // bit specifier. one_bit is the position of the additional single bit | 
| +  // specifier. | 
| +  inline int VFPGlueRegCode(VFPRegPrecision pre, int four_bit, int one_bit) { | 
| +    if (pre == kSinglePrecision) { | 
| +      return (Bits(four_bit + 3, four_bit) << 1) | Bit(one_bit); | 
| +    } | 
| +    return (Bit(one_bit) << 4) | Bits(four_bit + 3, four_bit); | 
| +  } | 
| + | 
| // We need to prevent the creation of instances of class Instr. | 
| DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); | 
| }; | 
|  |