| OLD | NEW | 
|     1 // Copyright 2014 the V8 project authors. All rights reserved. |     1 // Copyright 2014 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include <iomanip> |     5 #include <iomanip> | 
|     6  |     6  | 
|     7 #include "src/types.h" |     7 #include "src/types.h" | 
|     8  |     8  | 
|     9 #include "src/ostreams.h" |     9 #include "src/ostreams.h" | 
|    10 #include "src/types-inl.h" |    10 #include "src/types-inl.h" | 
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   276 TypeImpl<Config>::BitsetType::Lub(double value) { |   276 TypeImpl<Config>::BitsetType::Lub(double value) { | 
|   277   DisallowHeapAllocation no_allocation; |   277   DisallowHeapAllocation no_allocation; | 
|   278   if (i::IsMinusZero(value)) return kMinusZero; |   278   if (i::IsMinusZero(value)) return kMinusZero; | 
|   279   if (std::isnan(value)) return kNaN; |   279   if (std::isnan(value)) return kNaN; | 
|   280   if (IsUint32Double(value) || IsInt32Double(value)) return Lub(value, value); |   280   if (IsUint32Double(value) || IsInt32Double(value)) return Lub(value, value); | 
|   281   return kOtherNumber; |   281   return kOtherNumber; | 
|   282 } |   282 } | 
|   283  |   283  | 
|   284  |   284  | 
|   285 // Minimum values of regular numeric bitsets when SmiValuesAre31Bits. |   285 // Minimum values of regular numeric bitsets when SmiValuesAre31Bits. | 
|   286 template <class Config> |   286 template<class Config> | 
|   287 const typename TypeImpl<Config>::BitsetType::BitsetMin |   287 const typename TypeImpl<Config>::BitsetType::BitsetMin | 
|   288     TypeImpl<Config>::BitsetType::BitsetMins31[] = { |   288 TypeImpl<Config>::BitsetType::BitsetMins31[] = { | 
|   289         {kOtherNumber, -V8_INFINITY}, |   289     {kOtherNumber, -V8_INFINITY}, | 
|   290         {kOtherSigned32, kMinInt}, |   290     {kOtherSigned32, kMinInt}, | 
|   291         {kNegativeSignedSmall, -0x40000000}, |   291     {kOtherSignedSmall, -0x40000000}, | 
|   292         {kUnsignedSmall, 0}, |   292     {kUnsignedSmall, 0}, | 
|   293         {kOtherUnsigned31, 0x40000000}, |   293     {kOtherUnsigned31, 0x40000000}, | 
|   294         {kOtherUnsigned32, 0x80000000}, |   294     {kOtherUnsigned32, 0x80000000}, | 
|   295         {kOtherNumber, static_cast<double>(kMaxUInt32) + 1}}; |   295     {kOtherNumber, static_cast<double>(kMaxUInt32) + 1} | 
 |   296 }; | 
|   296  |   297  | 
|   297  |   298  | 
|   298 // Minimum values of regular numeric bitsets when SmiValuesAre32Bits. |   299 // Minimum values of regular numeric bitsets when SmiValuesAre32Bits. | 
|   299 // OtherSigned32 and OtherUnsigned31 are empty (see the diagrams in types.h). |   300 // OtherSigned32 and OtherUnsigned31 are empty (see the diagrams in types.h). | 
|   300 template <class Config> |   301 template<class Config> | 
|   301 const typename TypeImpl<Config>::BitsetType::BitsetMin |   302 const typename TypeImpl<Config>::BitsetType::BitsetMin | 
|   302     TypeImpl<Config>::BitsetType::BitsetMins32[] = { |   303 TypeImpl<Config>::BitsetType::BitsetMins32[] = { | 
|   303         {kOtherNumber, -V8_INFINITY}, |   304     {kOtherNumber, -V8_INFINITY}, | 
|   304         {kNegativeSignedSmall, kMinInt}, |   305     {kOtherSignedSmall, kMinInt}, | 
|   305         {kUnsignedSmall, 0}, |   306     {kUnsignedSmall, 0}, | 
|   306         {kOtherUnsigned32, 0x80000000}, |   307     {kOtherUnsigned32, 0x80000000}, | 
|   307         {kOtherNumber, static_cast<double>(kMaxUInt32) + 1}}; |   308     {kOtherNumber, static_cast<double>(kMaxUInt32) + 1} | 
 |   309 }; | 
|   308  |   310  | 
|   309  |   311  | 
|   310 template<class Config> |   312 template<class Config> | 
|   311 typename TypeImpl<Config>::bitset |   313 typename TypeImpl<Config>::bitset | 
|   312 TypeImpl<Config>::BitsetType::Lub(double min, double max) { |   314 TypeImpl<Config>::BitsetType::Lub(double min, double max) { | 
|   313   DisallowHeapAllocation no_allocation; |   315   DisallowHeapAllocation no_allocation; | 
|   314   int lub = kNone; |   316   int lub = kNone; | 
|   315   const BitsetMin* mins = BitsetMins(); |   317   const BitsetMin* mins = BitsetMins(); | 
|   316  |   318  | 
|   317   // Make sure the min-max range touches 0, so we are guaranteed no holes |  | 
|   318   // in unions of valid bitsets. |  | 
|   319   if (max < -1) max = -1; |  | 
|   320   if (min > 0) min = 0; |  | 
|   321  |  | 
|   322   for (size_t i = 1; i < BitsetMinsSize(); ++i) { |   319   for (size_t i = 1; i < BitsetMinsSize(); ++i) { | 
|   323     if (min < mins[i].min) { |   320     if (min < mins[i].min) { | 
|   324       lub |= mins[i-1].bits; |   321       lub |= mins[i-1].bits; | 
|   325       if (max < mins[i].min) return lub; |   322       if (max < mins[i].min) return lub; | 
|   326     } |   323     } | 
|   327   } |   324   } | 
|   328   return lub |= mins[BitsetMinsSize()-1].bits; |   325   return lub |= mins[BitsetMinsSize()-1].bits; | 
|   329 } |   326 } | 
|   330  |   327  | 
|   331  |   328  | 
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   982     os << name; |   979     os << name; | 
|   983     return; |   980     return; | 
|   984   } |   981   } | 
|   985  |   982  | 
|   986   static const bitset named_bitsets[] = { |   983   static const bitset named_bitsets[] = { | 
|   987 #define BITSET_CONSTANT(type, value) REPRESENTATION(k##type), |   984 #define BITSET_CONSTANT(type, value) REPRESENTATION(k##type), | 
|   988       REPRESENTATION_BITSET_TYPE_LIST(BITSET_CONSTANT) |   985       REPRESENTATION_BITSET_TYPE_LIST(BITSET_CONSTANT) | 
|   989 #undef BITSET_CONSTANT |   986 #undef BITSET_CONSTANT | 
|   990  |   987  | 
|   991 #define BITSET_CONSTANT(type, value) SEMANTIC(k##type), |   988 #define BITSET_CONSTANT(type, value) SEMANTIC(k##type), | 
|   992       INTERNAL_BITSET_TYPE_LIST(BITSET_CONSTANT) |  | 
|   993       SEMANTIC_BITSET_TYPE_LIST(BITSET_CONSTANT) |   989       SEMANTIC_BITSET_TYPE_LIST(BITSET_CONSTANT) | 
|   994 #undef BITSET_CONSTANT |   990 #undef BITSET_CONSTANT | 
|   995   }; |   991   }; | 
|   996  |   992  | 
|   997   bool is_first = true; |   993   bool is_first = true; | 
|   998   os << "("; |   994   os << "("; | 
|   999   for (int i(arraysize(named_bitsets) - 1); bits != 0 && i >= 0; --i) { |   995   for (int i(arraysize(named_bitsets) - 1); bits != 0 && i >= 0; --i) { | 
|  1000     bitset subset = named_bitsets[i]; |   996     bitset subset = named_bitsets[i]; | 
|  1001     if ((bits & subset) == subset) { |   997     if ((bits & subset) == subset) { | 
|  1002       if (!is_first) os << " | "; |   998       if (!is_first) os << " | "; | 
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1096 template class TypeImpl<HeapTypeConfig>::Iterator<i::Object>; |  1092 template class TypeImpl<HeapTypeConfig>::Iterator<i::Object>; | 
|  1097  |  1093  | 
|  1098 template TypeImpl<ZoneTypeConfig>::TypeHandle |  1094 template TypeImpl<ZoneTypeConfig>::TypeHandle | 
|  1099   TypeImpl<ZoneTypeConfig>::Convert<HeapType>( |  1095   TypeImpl<ZoneTypeConfig>::Convert<HeapType>( | 
|  1100     TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); |  1096     TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); | 
|  1101 template TypeImpl<HeapTypeConfig>::TypeHandle |  1097 template TypeImpl<HeapTypeConfig>::TypeHandle | 
|  1102   TypeImpl<HeapTypeConfig>::Convert<Type>( |  1098   TypeImpl<HeapTypeConfig>::Convert<Type>( | 
|  1103     TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); |  1099     TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); | 
|  1104  |  1100  | 
|  1105 } }  // namespace v8::internal |  1101 } }  // namespace v8::internal | 
| OLD | NEW |