| 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 5828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5839 if (is_store && (fast_elements || fast_smi_only_elements)) { | 5839 if (is_store && (fast_elements || fast_smi_only_elements)) { |
| 5840 HCheckMaps* check_cow_map = new(zone()) HCheckMaps( | 5840 HCheckMaps* check_cow_map = new(zone()) HCheckMaps( |
| 5841 elements, isolate()->factory()->fixed_array_map(), zone()); | 5841 elements, isolate()->factory()->fixed_array_map(), zone()); |
| 5842 check_cow_map->ClearGVNFlag(kDependsOnElementsKind); | 5842 check_cow_map->ClearGVNFlag(kDependsOnElementsKind); |
| 5843 AddInstruction(check_cow_map); | 5843 AddInstruction(check_cow_map); |
| 5844 } | 5844 } |
| 5845 HInstruction* length = NULL; | 5845 HInstruction* length = NULL; |
| 5846 HInstruction* checked_key = NULL; | 5846 HInstruction* checked_key = NULL; |
| 5847 if (map->has_external_array_elements()) { | 5847 if (map->has_external_array_elements()) { |
| 5848 length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements)); | 5848 length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements)); |
| 5849 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length)); | 5849 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length, |
| 5850 ALLOW_SMI_KEY)); |
| 5850 HLoadExternalArrayPointer* external_elements = | 5851 HLoadExternalArrayPointer* external_elements = |
| 5851 new(zone()) HLoadExternalArrayPointer(elements); | 5852 new(zone()) HLoadExternalArrayPointer(elements); |
| 5852 AddInstruction(external_elements); | 5853 AddInstruction(external_elements); |
| 5853 return BuildExternalArrayElementAccess(external_elements, checked_key, | 5854 return BuildExternalArrayElementAccess(external_elements, checked_key, |
| 5854 val, map->elements_kind(), is_store); | 5855 val, map->elements_kind(), is_store); |
| 5855 } | 5856 } |
| 5856 ASSERT(fast_smi_only_elements || | 5857 ASSERT(fast_smi_only_elements || |
| 5857 fast_elements || | 5858 fast_elements || |
| 5858 map->has_fast_double_elements()); | 5859 map->has_fast_double_elements()); |
| 5859 if (map->instance_type() == JS_ARRAY_TYPE) { | 5860 if (map->instance_type() == JS_ARRAY_TYPE) { |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6072 HHasInstanceTypeAndBranch* typecheck = | 6073 HHasInstanceTypeAndBranch* typecheck = |
| 6073 new(zone()) HHasInstanceTypeAndBranch(object, JS_ARRAY_TYPE); | 6074 new(zone()) HHasInstanceTypeAndBranch(object, JS_ARRAY_TYPE); |
| 6074 typecheck->SetSuccessorAt(0, if_jsarray); | 6075 typecheck->SetSuccessorAt(0, if_jsarray); |
| 6075 typecheck->SetSuccessorAt(1, if_fastobject); | 6076 typecheck->SetSuccessorAt(1, if_fastobject); |
| 6076 current_block()->Finish(typecheck); | 6077 current_block()->Finish(typecheck); |
| 6077 | 6078 |
| 6078 set_current_block(if_jsarray); | 6079 set_current_block(if_jsarray); |
| 6079 HInstruction* length; | 6080 HInstruction* length; |
| 6080 length = AddInstruction(new(zone()) HJSArrayLength(object, typecheck, | 6081 length = AddInstruction(new(zone()) HJSArrayLength(object, typecheck, |
| 6081 HType::Smi())); | 6082 HType::Smi())); |
| 6082 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length)); | 6083 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length, |
| 6084 ALLOW_SMI_KEY)); |
| 6083 access = AddInstruction(BuildFastElementAccess( | 6085 access = AddInstruction(BuildFastElementAccess( |
| 6084 elements, checked_key, val, elements_kind, is_store)); | 6086 elements, checked_key, val, elements_kind, is_store)); |
| 6085 if (!is_store) { | 6087 if (!is_store) { |
| 6086 Push(access); | 6088 Push(access); |
| 6087 } | 6089 } |
| 6088 | 6090 |
| 6089 *has_side_effects |= access->HasObservableSideEffects(); | 6091 *has_side_effects |= access->HasObservableSideEffects(); |
| 6090 if (position != -1) { | 6092 if (position != -1) { |
| 6091 access->set_position(position); | 6093 access->set_position(position); |
| 6092 } | 6094 } |
| 6093 if_jsarray->Goto(join); | 6095 if_jsarray->Goto(join); |
| 6094 | 6096 |
| 6095 set_current_block(if_fastobject); | 6097 set_current_block(if_fastobject); |
| 6096 length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements)); | 6098 length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements)); |
| 6097 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length)); | 6099 checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length, |
| 6100 ALLOW_SMI_KEY)); |
| 6098 access = AddInstruction(BuildFastElementAccess( | 6101 access = AddInstruction(BuildFastElementAccess( |
| 6099 elements, checked_key, val, elements_kind, is_store)); | 6102 elements, checked_key, val, elements_kind, is_store)); |
| 6100 } else if (elements_kind == DICTIONARY_ELEMENTS) { | 6103 } else if (elements_kind == DICTIONARY_ELEMENTS) { |
| 6101 if (is_store) { | 6104 if (is_store) { |
| 6102 access = AddInstruction(BuildStoreKeyedGeneric(object, key, val)); | 6105 access = AddInstruction(BuildStoreKeyedGeneric(object, key, val)); |
| 6103 } else { | 6106 } else { |
| 6104 access = AddInstruction(BuildLoadKeyedGeneric(object, key)); | 6107 access = AddInstruction(BuildLoadKeyedGeneric(object, key)); |
| 6105 } | 6108 } |
| 6106 } else { // External array elements. | 6109 } else { // External array elements. |
| 6107 access = AddInstruction(BuildExternalArrayElementAccess( | 6110 access = AddInstruction(BuildExternalArrayElementAccess( |
| (...skipping 3467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9575 } | 9578 } |
| 9576 } | 9579 } |
| 9577 | 9580 |
| 9578 #ifdef DEBUG | 9581 #ifdef DEBUG |
| 9579 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 9582 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
| 9580 if (allocator_ != NULL) allocator_->Verify(); | 9583 if (allocator_ != NULL) allocator_->Verify(); |
| 9581 #endif | 9584 #endif |
| 9582 } | 9585 } |
| 9583 | 9586 |
| 9584 } } // namespace v8::internal | 9587 } } // namespace v8::internal |
| OLD | NEW |