| Index: src/objects-inl.h | 
| diff --git a/src/objects-inl.h b/src/objects-inl.h | 
| index 43db240fd9c3d71538411c63fd468d741aaea534..45dc456d5e09d1143bd52dcce130f3e343b3ec6e 100644 | 
| --- a/src/objects-inl.h | 
| +++ b/src/objects-inl.h | 
| @@ -1323,6 +1323,12 @@ Maybe<bool> JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, | 
| #define WRITE_INT32_FIELD(p, offset, value) \ | 
| (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) | 
|  | 
| +#define READ_UINT64_FIELD(p, offset) \ | 
| +  (*reinterpret_cast<const uint64_t*>(FIELD_ADDR_CONST(p, offset))) | 
| + | 
| +#define WRITE_UINT64_FIELD(p, offset, value) \ | 
| +  (*reinterpret_cast<uint64_t*>(FIELD_ADDR(p, offset)) = value) | 
| + | 
| #define READ_INT64_FIELD(p, offset) \ | 
| (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset))) | 
|  | 
| @@ -2288,37 +2294,21 @@ void FixedArray::set(int index, Object* value) { | 
| } | 
|  | 
|  | 
| -inline bool FixedDoubleArray::is_the_hole_nan(double value) { | 
| -  return bit_cast<uint64_t, double>(value) == kHoleNanInt64; | 
| -} | 
| - | 
| - | 
| -inline double FixedDoubleArray::hole_nan_as_double() { | 
| -  return bit_cast<double, uint64_t>(kHoleNanInt64); | 
| -} | 
| - | 
| - | 
| -inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() { | 
| -  DCHECK(bit_cast<uint64_t>(base::OS::nan_value()) != kHoleNanInt64); | 
| -  DCHECK((bit_cast<uint64_t>(base::OS::nan_value()) >> 32) != kHoleNanUpper32); | 
| -  return base::OS::nan_value(); | 
| -} | 
| - | 
| - | 
| double FixedDoubleArray::get_scalar(int index) { | 
| DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 
| map() != GetHeap()->fixed_array_map()); | 
| DCHECK(index >= 0 && index < this->length()); | 
| -  double result = READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); | 
| -  DCHECK(!is_the_hole_nan(result)); | 
| -  return result; | 
| +  DCHECK(!is_the_hole(index)); | 
| +  return READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); | 
| } | 
|  | 
| -int64_t FixedDoubleArray::get_representation(int index) { | 
| + | 
| +uint64_t FixedDoubleArray::get_representation(int index) { | 
| DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 
| map() != GetHeap()->fixed_array_map()); | 
| DCHECK(index >= 0 && index < this->length()); | 
| -  return READ_INT64_FIELD(this, kHeaderSize + index * kDoubleSize); | 
| +  int offset = kHeaderSize + index * kDoubleSize; | 
| +  return READ_UINT64_FIELD(this, offset); | 
| } | 
|  | 
|  | 
| @@ -2336,8 +2326,12 @@ void FixedDoubleArray::set(int index, double value) { | 
| DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 
| map() != GetHeap()->fixed_array_map()); | 
| int offset = kHeaderSize + index * kDoubleSize; | 
| -  if (std::isnan(value)) value = canonical_not_the_hole_nan_as_double(); | 
| -  WRITE_DOUBLE_FIELD(this, offset, value); | 
| +  if (std::isnan(value)) { | 
| +    WRITE_UINT64_FIELD(this, offset, V8_UINT64_C(0xFFFFFFFFFFFFFFFF)); | 
| +  } else { | 
| +    WRITE_DOUBLE_FIELD(this, offset, value); | 
| +  } | 
| +  DCHECK(!is_the_hole(index)); | 
| } | 
|  | 
|  | 
| @@ -2345,13 +2339,12 @@ void FixedDoubleArray::set_the_hole(int index) { | 
| DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 
| map() != GetHeap()->fixed_array_map()); | 
| int offset = kHeaderSize + index * kDoubleSize; | 
| -  WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double()); | 
| +  WRITE_UINT64_FIELD(this, offset, kHoleNanInt64); | 
| } | 
|  | 
|  | 
| bool FixedDoubleArray::is_the_hole(int index) { | 
| -  int offset = kHeaderSize + index * kDoubleSize; | 
| -  return is_the_hole_nan(READ_DOUBLE_FIELD(this, offset)); | 
| +  return get_representation(index) == kHoleNanInt64; | 
| } | 
|  | 
|  | 
|  |