| Index: src/assembler.h | 
| diff --git a/src/assembler.h b/src/assembler.h | 
| index 3670d7fa5c5ca24026b22a235b02b2e7acb7243a..d181e2a5960cb2644cab323eed34ed15764bb610 100644 | 
| --- a/src/assembler.h | 
| +++ b/src/assembler.h | 
| @@ -426,6 +426,7 @@ class RelocInfo { | 
| NUMBER_OF_MODES, | 
| NONE32,             // never recorded 32-bit value | 
| NONE64,             // never recorded 64-bit value | 
| +    NONEINTPTR,         // never recorded intptr value | 
| CODE_AGE_SEQUENCE,  // Not stored in RelocInfo array, used explictly by | 
| // code aging. | 
|  | 
| @@ -515,7 +516,7 @@ class RelocInfo { | 
| return mode == DEBUGGER_STATEMENT; | 
| } | 
| static inline bool IsNone(Mode mode) { | 
| -    return mode == NONE32 || mode == NONE64; | 
| +    return mode == NONE32 || mode == NONE64 || mode == NONEINTPTR; | 
| } | 
| static inline bool IsCodeAgeSequence(Mode mode) { | 
| return mode == CODE_AGE_SEQUENCE; | 
| @@ -1229,12 +1230,19 @@ class CheckDebugStepCallWrapper : public CallWrapper { | 
| class ConstantPoolEntry { | 
| public: | 
| ConstantPoolEntry() {} | 
| -  ConstantPoolEntry(int position, intptr_t value, bool sharing_ok) | 
| +  ConstantPoolEntry(int position, intptr_t value, bool sharing_ok, | 
| +                    RelocInfo::Mode rmode) | 
| : position_(position), | 
| merged_index_(sharing_ok ? SHARING_ALLOWED : SHARING_PROHIBITED), | 
| +        rmode_(rmode), | 
| +        type_(INTPTR), | 
| value_(value) {} | 
| ConstantPoolEntry(int position, double value) | 
| -      : position_(position), merged_index_(SHARING_ALLOWED), value64_(value) {} | 
| +      : position_(position), | 
| +        merged_index_(SHARING_ALLOWED), | 
| +        rmode_(RelocInfo::NONE64), | 
| +        type_(DOUBLE), | 
| +        value64_(value) {} | 
|  | 
| int position() const { return position_; } | 
| bool sharing_ok() const { return merged_index_ != SHARING_PROHIBITED; } | 
| @@ -1257,18 +1265,29 @@ class ConstantPoolEntry { | 
| } | 
| intptr_t value() const { return value_; } | 
| uint64_t value64() const { return bit_cast<uint64_t>(value64_); } | 
| +  bool MayBeMergedWith(ConstantPoolEntry& other) const { | 
| +    return type_ == other.type_ && rmode_ == other.rmode_ && | 
| +           (type_ == INTPTR ? value() == other.value() | 
| +                            : value64() == other.value64()); | 
| +  } | 
|  | 
| enum Type { INTPTR, DOUBLE, NUMBER_OF_TYPES }; | 
|  | 
| -  static int size(Type type) { | 
| +  Type type() const { return type_; } | 
| + | 
| +  static int SizeOfType(Type type) { | 
| return (type == INTPTR) ? kPointerSize : kDoubleSize; | 
| } | 
|  | 
| +  int size() const { return SizeOfType(type_); } | 
| + | 
| enum Access { REGULAR, OVERFLOWED }; | 
|  | 
| private: | 
| int position_; | 
| int merged_index_; | 
| +  RelocInfo::Mode rmode_; | 
| +  Type type_; | 
| union { | 
| intptr_t value_; | 
| double value64_; | 
| @@ -1285,16 +1304,17 @@ class ConstantPoolBuilder BASE_EMBEDDED { | 
| ConstantPoolBuilder(int ptr_reach_bits, int double_reach_bits); | 
|  | 
| // Add pointer-sized constant to the embedded constant pool | 
| -  ConstantPoolEntry::Access AddEntry(int position, intptr_t value, | 
| -                                     bool sharing_ok) { | 
| -    ConstantPoolEntry entry(position, value, sharing_ok); | 
| -    return AddEntry(entry, ConstantPoolEntry::INTPTR); | 
| +  ConstantPoolEntry::Access AddEntry( | 
| +      int position, intptr_t value, bool sharing_ok, | 
| +      RelocInfo::Mode rmode = RelocInfo::NONEINTPTR) { | 
| +    ConstantPoolEntry entry(position, value, sharing_ok, rmode); | 
| +    return AddEntry(entry); | 
| } | 
|  | 
| // Add double constant to the embedded constant pool | 
| ConstantPoolEntry::Access AddEntry(int position, double value) { | 
| ConstantPoolEntry entry(position, value); | 
| -    return AddEntry(entry, ConstantPoolEntry::DOUBLE); | 
| +    return AddEntry(entry); | 
| } | 
|  | 
| // Previews the access type required for the next new entry to be added. | 
| @@ -1319,8 +1339,7 @@ class ConstantPoolBuilder BASE_EMBEDDED { | 
| inline Label* EmittedPosition() { return &emitted_label_; } | 
|  | 
| private: | 
| -  ConstantPoolEntry::Access AddEntry(ConstantPoolEntry& entry, | 
| -                                     ConstantPoolEntry::Type type); | 
| +  ConstantPoolEntry::Access AddEntry(ConstantPoolEntry& entry); | 
| void EmitSharedEntries(Assembler* assm, ConstantPoolEntry::Type type); | 
| void EmitGroup(Assembler* assm, ConstantPoolEntry::Access access, | 
| ConstantPoolEntry::Type type); | 
|  |