| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 return TERMINAL_FAST_ELEMENTS_KIND; | 171 return TERMINAL_FAST_ELEMENTS_KIND; |
| 172 } | 172 } |
| 173 | 173 |
| 174 | 174 |
| 175 static bool IsTypedArrayElementsKind(ElementsKind elements_kind) { | 175 static bool IsTypedArrayElementsKind(ElementsKind elements_kind) { |
| 176 return IsFixedTypedArrayElementsKind(elements_kind) || | 176 return IsFixedTypedArrayElementsKind(elements_kind) || |
| 177 IsExternalArrayElementsKind(elements_kind); | 177 IsExternalArrayElementsKind(elements_kind); |
| 178 } | 178 } |
| 179 | 179 |
| 180 | 180 |
| 181 static inline bool IsFastTransitionTarget(ElementsKind elements_kind) { |
| 182 return IsFastElementsKind(elements_kind) || |
| 183 elements_kind == DICTIONARY_ELEMENTS; |
| 184 } |
| 185 |
| 181 bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind, | 186 bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind, |
| 182 ElementsKind to_kind) { | 187 ElementsKind to_kind) { |
| 183 if (IsTypedArrayElementsKind(from_kind) || | 188 if (IsTypedArrayElementsKind(from_kind) || |
| 184 IsTypedArrayElementsKind(to_kind)) { | 189 IsTypedArrayElementsKind(to_kind)) { |
| 185 switch (from_kind) { | 190 switch (from_kind) { |
| 186 #define FIXED_TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ | 191 #define FIXED_TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
| 187 case TYPE##_ELEMENTS: \ | 192 case TYPE##_ELEMENTS: \ |
| 188 return to_kind == EXTERNAL_##TYPE##_ELEMENTS; | 193 return to_kind == EXTERNAL_##TYPE##_ELEMENTS; |
| 189 | 194 |
| 190 TYPED_ARRAYS(FIXED_TYPED_ARRAY_CASE); | 195 TYPED_ARRAYS(FIXED_TYPED_ARRAY_CASE); |
| 191 #undef FIXED_TYPED_ARRAY_CASE | 196 #undef FIXED_TYPED_ARRAY_CASE |
| 192 default: | 197 default: |
| 193 return false; | 198 return false; |
| 194 } | 199 } |
| 195 } | 200 } |
| 196 switch (from_kind) { | 201 if (IsFastElementsKind(from_kind) && IsFastTransitionTarget(to_kind)) { |
| 197 case FAST_SMI_ELEMENTS: | 202 switch (from_kind) { |
| 198 return to_kind != FAST_SMI_ELEMENTS; | 203 case FAST_SMI_ELEMENTS: |
| 199 case FAST_HOLEY_SMI_ELEMENTS: | 204 return to_kind != FAST_SMI_ELEMENTS; |
| 200 return to_kind != FAST_SMI_ELEMENTS && | 205 case FAST_HOLEY_SMI_ELEMENTS: |
| 201 to_kind != FAST_HOLEY_SMI_ELEMENTS; | 206 return to_kind != FAST_SMI_ELEMENTS && |
| 202 case FAST_DOUBLE_ELEMENTS: | 207 to_kind != FAST_HOLEY_SMI_ELEMENTS; |
| 203 return to_kind != FAST_SMI_ELEMENTS && | 208 case FAST_DOUBLE_ELEMENTS: |
| 204 to_kind != FAST_HOLEY_SMI_ELEMENTS && | 209 return to_kind != FAST_SMI_ELEMENTS && |
| 205 to_kind != FAST_DOUBLE_ELEMENTS; | 210 to_kind != FAST_HOLEY_SMI_ELEMENTS && |
| 206 case FAST_HOLEY_DOUBLE_ELEMENTS: | 211 to_kind != FAST_DOUBLE_ELEMENTS; |
| 207 return to_kind == FAST_ELEMENTS || | 212 case FAST_HOLEY_DOUBLE_ELEMENTS: |
| 208 to_kind == FAST_HOLEY_ELEMENTS; | 213 return to_kind == FAST_ELEMENTS || |
| 209 case FAST_ELEMENTS: | 214 to_kind == FAST_HOLEY_ELEMENTS; |
| 210 return to_kind == FAST_HOLEY_ELEMENTS; | 215 case FAST_ELEMENTS: |
| 211 case FAST_HOLEY_ELEMENTS: | 216 return to_kind == FAST_HOLEY_ELEMENTS; |
| 212 return false; | 217 case FAST_HOLEY_ELEMENTS: |
| 213 default: | 218 return false; |
| 214 return false; | 219 default: |
| 220 return false; |
| 221 } |
| 215 } | 222 } |
| 223 return false; |
| 216 } | 224 } |
| 217 | 225 |
| 218 | 226 |
| 219 } } // namespace v8::internal | 227 } } // namespace v8::internal |
| OLD | NEW |