| 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 "src/types.h" | 5 #include "src/types.h" |
| 6 | 6 |
| 7 #include "src/string-stream.h" | 7 #include "src/ostreams.h" |
| 8 #include "src/types-inl.h" | 8 #include "src/types-inl.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| 11 namespace internal { | 11 namespace internal { |
| 12 | 12 |
| 13 // ----------------------------------------------------------------------------- | 13 // ----------------------------------------------------------------------------- |
| 14 // Glb and lub computation. | 14 // Glb and lub computation. |
| 15 | 15 |
| 16 // The largest bitset subsumed by this type. | 16 // The largest bitset subsumed by this type. |
| 17 template<class Config> | 17 template<class Config> |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 116 } |
| 117 return Lub(i::HeapObject::cast(value)->map()); | 117 return Lub(i::HeapObject::cast(value)->map()); |
| 118 } | 118 } |
| 119 | 119 |
| 120 | 120 |
| 121 template<class Config> | 121 template<class Config> |
| 122 int TypeImpl<Config>::BitsetType::Lub(double value) { | 122 int TypeImpl<Config>::BitsetType::Lub(double value) { |
| 123 DisallowHeapAllocation no_allocation; | 123 DisallowHeapAllocation no_allocation; |
| 124 if (i::IsMinusZero(value)) return kMinusZero; | 124 if (i::IsMinusZero(value)) return kMinusZero; |
| 125 if (std::isnan(value)) return kNaN; | 125 if (std::isnan(value)) return kNaN; |
| 126 if (IsUint32Double(value)) return Lub(FastD2UI(value)); | 126 if (IsUint32Double(value)) { |
| 127 if (IsInt32Double(value)) return Lub(FastD2I(value)); | 127 uint32_t u = FastD2UI(value); |
| 128 if (u < 0x40000000u) return kUnsignedSmall; |
| 129 if (u < 0x80000000u) { |
| 130 return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall; |
| 131 } |
| 132 return kOtherUnsigned32; |
| 133 } |
| 134 if (IsInt32Double(value)) { |
| 135 int32_t i = FastD2I(value); |
| 136 ASSERT(i < 0); |
| 137 if (i >= -0x40000000) return kOtherSignedSmall; |
| 138 return i::SmiValuesAre31Bits() ? kOtherSigned32 : kOtherSignedSmall; |
| 139 } |
| 128 return kOtherNumber; | 140 return kOtherNumber; |
| 129 } | 141 } |
| 130 | 142 |
| 131 | 143 |
| 132 template<class Config> | |
| 133 int TypeImpl<Config>::BitsetType::Lub(int32_t value) { | |
| 134 if (value >= 0x40000000) { | |
| 135 return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall; | |
| 136 } | |
| 137 if (value >= 0) return kUnsignedSmall; | |
| 138 if (value >= -0x40000000) return kOtherSignedSmall; | |
| 139 return i::SmiValuesAre31Bits() ? kOtherSigned32 : kOtherSignedSmall; | |
| 140 } | |
| 141 | |
| 142 | |
| 143 template<class Config> | |
| 144 int TypeImpl<Config>::BitsetType::Lub(uint32_t value) { | |
| 145 DisallowHeapAllocation no_allocation; | |
| 146 if (value >= 0x80000000u) return kOtherUnsigned32; | |
| 147 if (value >= 0x40000000u) { | |
| 148 return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall; | |
| 149 } | |
| 150 return kUnsignedSmall; | |
| 151 } | |
| 152 | |
| 153 | |
| 154 template<class Config> | 144 template<class Config> |
| 155 int TypeImpl<Config>::BitsetType::Lub(i::Map* map) { | 145 int TypeImpl<Config>::BitsetType::Lub(i::Map* map) { |
| 156 DisallowHeapAllocation no_allocation; | 146 DisallowHeapAllocation no_allocation; |
| 157 switch (map->instance_type()) { | 147 switch (map->instance_type()) { |
| 158 case STRING_TYPE: | 148 case STRING_TYPE: |
| 159 case ASCII_STRING_TYPE: | 149 case ASCII_STRING_TYPE: |
| 160 case CONS_STRING_TYPE: | 150 case CONS_STRING_TYPE: |
| 161 case CONS_ASCII_STRING_TYPE: | 151 case CONS_ASCII_STRING_TYPE: |
| 162 case SLICED_STRING_TYPE: | 152 case SLICED_STRING_TYPE: |
| 163 case SLICED_ASCII_STRING_TYPE: | 153 case SLICED_ASCII_STRING_TYPE: |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 // Also, it doesn't apply elsewhere. 8-( | 221 // Also, it doesn't apply elsewhere. 8-( |
| 232 // We ought to find a cleaner solution for compiling stubs parameterised | 222 // We ought to find a cleaner solution for compiling stubs parameterised |
| 233 // over type or class variables, esp ones with bounds... | 223 // over type or class variables, esp ones with bounds... |
| 234 return kDetectable; | 224 return kDetectable; |
| 235 case DECLARED_ACCESSOR_INFO_TYPE: | 225 case DECLARED_ACCESSOR_INFO_TYPE: |
| 236 case EXECUTABLE_ACCESSOR_INFO_TYPE: | 226 case EXECUTABLE_ACCESSOR_INFO_TYPE: |
| 237 case SHARED_FUNCTION_INFO_TYPE: | 227 case SHARED_FUNCTION_INFO_TYPE: |
| 238 case ACCESSOR_PAIR_TYPE: | 228 case ACCESSOR_PAIR_TYPE: |
| 239 case FIXED_ARRAY_TYPE: | 229 case FIXED_ARRAY_TYPE: |
| 240 case FOREIGN_TYPE: | 230 case FOREIGN_TYPE: |
| 231 case CODE_TYPE: |
| 241 return kInternal & kTaggedPtr; | 232 return kInternal & kTaggedPtr; |
| 242 default: | 233 default: |
| 243 UNREACHABLE(); | 234 UNREACHABLE(); |
| 244 return kNone; | 235 return kNone; |
| 245 } | 236 } |
| 246 } | 237 } |
| 247 | 238 |
| 248 | 239 |
| 249 // ----------------------------------------------------------------------------- | 240 // ----------------------------------------------------------------------------- |
| 250 // Predicates. | 241 // Predicates. |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 961 template class TypeImpl<HeapTypeConfig>::Iterator<i::Object>; | 952 template class TypeImpl<HeapTypeConfig>::Iterator<i::Object>; |
| 962 | 953 |
| 963 template TypeImpl<ZoneTypeConfig>::TypeHandle | 954 template TypeImpl<ZoneTypeConfig>::TypeHandle |
| 964 TypeImpl<ZoneTypeConfig>::Convert<HeapType>( | 955 TypeImpl<ZoneTypeConfig>::Convert<HeapType>( |
| 965 TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); | 956 TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*); |
| 966 template TypeImpl<HeapTypeConfig>::TypeHandle | 957 template TypeImpl<HeapTypeConfig>::TypeHandle |
| 967 TypeImpl<HeapTypeConfig>::Convert<Type>( | 958 TypeImpl<HeapTypeConfig>::Convert<Type>( |
| 968 TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); | 959 TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*); |
| 969 | 960 |
| 970 } } // namespace v8::internal | 961 } } // namespace v8::internal |
| OLD | NEW |