| Index: src/arm/assembler-arm.h | 
| diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h | 
| index 7c80b09119fe94ea4f1e247946ac69f4aabf444e..953234004910b1635b2a8a49cd21ff366579652c 100644 | 
| --- a/src/arm/assembler-arm.h | 
| +++ b/src/arm/assembler-arm.h | 
| @@ -399,7 +399,7 @@ class Operand BASE_EMBEDDED { | 
| public: | 
| // immediate | 
| INLINE(explicit Operand(int32_t immediate, | 
| -         RelocInfo::Mode rmode = RelocInfo::NONE)); | 
| +         RelocInfo::Mode rmode = RelocInfo::NONE32)); | 
| INLINE(static Operand Zero()) { | 
| return Operand(static_cast<int32_t>(0)); | 
| } | 
| @@ -1283,8 +1283,11 @@ class Assembler : public AssemblerBase { | 
| static bool IsBranch(Instr instr); | 
| static int GetBranchOffset(Instr instr); | 
| static bool IsLdrRegisterImmediate(Instr instr); | 
| +  static bool IsVldrDRegisterImmediate(Instr instr); | 
| static int GetLdrRegisterImmediateOffset(Instr instr); | 
| +  static int GetVldrDRegisterImmediateOffset(Instr instr); | 
| static Instr SetLdrRegisterImmediateOffset(Instr instr, int offset); | 
| +  static Instr SetVldrDRegisterImmediateOffset(Instr instr, int offset); | 
| static bool IsStrRegisterImmediate(Instr instr); | 
| static Instr SetStrRegisterImmediateOffset(Instr instr, int offset); | 
| static bool IsAddRegisterImmediate(Instr instr); | 
| @@ -1299,6 +1302,7 @@ class Assembler : public AssemblerBase { | 
| static bool IsStrRegFpNegOffset(Instr instr); | 
| static bool IsLdrRegFpNegOffset(Instr instr); | 
| static bool IsLdrPcImmediateOffset(Instr instr); | 
| +  static bool IsVldrDPcImmediateOffset(Instr instr); | 
| static bool IsTstImmediate(Instr instr); | 
| static bool IsCmpRegister(Instr instr); | 
| static bool IsCmpImmediate(Instr instr); | 
| @@ -1307,10 +1311,13 @@ class Assembler : public AssemblerBase { | 
| static bool IsNop(Instr instr, int type = NON_MARKING_NOP); | 
|  | 
| // Constants in pools are accessed via pc relative addressing, which can | 
| -  // reach +/-4KB thereby defining a maximum distance between the instruction | 
| -  // and the accessed constant. | 
| -  static const int kMaxDistToPool = 4*KB; | 
| -  static const int kMaxNumPendingRelocInfo = kMaxDistToPool/kInstrSize; | 
| +  // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point | 
| +  // PC-relative loads, thereby defining a maximum distance between the | 
| +  // instruction and the accessed constant. | 
| +  static const int kMaxDistToIntPool = 4*KB; | 
| +  static const int kMaxDistToFPPool = 1*KB; | 
| +  // All relocations could be integer, it therefore acts as the limit. | 
| +  static const int kMaxNumPendingRelocInfo = kMaxDistToIntPool/kInstrSize; | 
|  | 
| // Postpone the generation of the constant pool for the specified number of | 
| // instructions. | 
| @@ -1352,7 +1359,9 @@ class Assembler : public AssemblerBase { | 
| if (--const_pool_blocked_nesting_ == 0) { | 
| // Check the constant pool hasn't been blocked for too long. | 
| ASSERT((num_pending_reloc_info_ == 0) || | 
| -             (pc_offset() < (first_const_pool_use_ + kMaxDistToPool))); | 
| +             (pc_offset() < (first_const_pool_use_ + kMaxDistToIntPool))); | 
| +      ASSERT((num_pending_64_bit_reloc_info_ == 0) || | 
| +             (pc_offset() < (first_const_pool_use_ + kMaxDistToFPPool))); | 
| // Two cases: | 
| //  * no_const_pool_before_ >= next_buffer_check_ and the emission is | 
| //    still blocked | 
| @@ -1403,13 +1412,6 @@ class Assembler : public AssemblerBase { | 
| static const int kCheckPoolInterval = kCheckPoolIntervalInst * kInstrSize; | 
|  | 
|  | 
| -  // Average distance beetween a constant pool and the first instruction | 
| -  // accessing the constant pool. Longer distance should result in less I-cache | 
| -  // pollution. | 
| -  // In practice the distance will be smaller since constant pool emission is | 
| -  // forced after function return and sometimes after unconditional branches. | 
| -  static const int kAvgDistToPool = kMaxDistToPool - kCheckPoolInterval; | 
| - | 
| // Emission of the constant pool may be blocked in some code sequences. | 
| int const_pool_blocked_nesting_;  // Block emission if this is not zero. | 
| int no_const_pool_before_;  // Block emission before this pc offset. | 
| @@ -1434,6 +1436,9 @@ class Assembler : public AssemblerBase { | 
| RelocInfo pending_reloc_info_[kMaxNumPendingRelocInfo]; | 
| // number of pending reloc info entries in the buffer | 
| int num_pending_reloc_info_; | 
| +  // Number of pending reloc info entries included above which also happen to | 
| +  // be 64-bit. | 
| +  int num_pending_64_bit_reloc_info_; | 
|  | 
| // The bound position, before this we cannot do instruction elimination. | 
| int last_bound_pos_; | 
| @@ -1458,6 +1463,8 @@ class Assembler : public AssemblerBase { | 
|  | 
| // Record reloc info for current pc_ | 
| void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); | 
| +  void RecordRelocInfo(double data); | 
| +  void RecordRelocInfoConstantPoolEntryHelper(const RelocInfo& rinfo); | 
|  | 
| friend class RegExpMacroAssemblerARM; | 
| friend class RelocInfo; | 
|  |