| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 3729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3740 HLoadElements* elements = new(zone()) HLoadElements(object); | 3740 HLoadElements* elements = new(zone()) HLoadElements(object); |
| 3741 AddInstruction(elements); | 3741 AddInstruction(elements); |
| 3742 HInstruction* length = new(zone()) HExternalArrayLength(elements); | 3742 HInstruction* length = new(zone()) HExternalArrayLength(elements); |
| 3743 AddInstruction(length); | 3743 AddInstruction(length); |
| 3744 AddInstruction(new(zone()) HBoundsCheck(key, length)); | 3744 AddInstruction(new(zone()) HBoundsCheck(key, length)); |
| 3745 HLoadExternalArrayPointer* external_elements = | 3745 HLoadExternalArrayPointer* external_elements = |
| 3746 new(zone()) HLoadExternalArrayPointer(elements); | 3746 new(zone()) HLoadExternalArrayPointer(elements); |
| 3747 AddInstruction(external_elements); | 3747 AddInstruction(external_elements); |
| 3748 HLoadKeyedSpecializedArrayElement* pixel_array_value = | 3748 HLoadKeyedSpecializedArrayElement* pixel_array_value = |
| 3749 new(zone()) HLoadKeyedSpecializedArrayElement( | 3749 new(zone()) HLoadKeyedSpecializedArrayElement( |
| 3750 external_elements, key, expr->external_array_type()); | 3750 external_elements, key, map->elements_kind()); |
| 3751 return pixel_array_value; | 3751 return pixel_array_value; |
| 3752 } | 3752 } |
| 3753 | 3753 |
| 3754 | 3754 |
| 3755 HInstruction* HGraphBuilder::BuildLoadKeyed(HValue* obj, | 3755 HInstruction* HGraphBuilder::BuildLoadKeyed(HValue* obj, |
| 3756 HValue* key, | 3756 HValue* key, |
| 3757 Property* prop) { | 3757 Property* prop) { |
| 3758 if (prop->IsMonomorphic()) { | 3758 if (prop->IsMonomorphic()) { |
| 3759 Handle<Map> receiver_type(prop->GetMonomorphicReceiverType()); | 3759 Handle<Map> receiver_type(prop->GetMonomorphicReceiverType()); |
| 3760 // An object has either fast elements or pixel array elements, but never | 3760 // An object has either fast elements or pixel array elements, but never |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3819 ASSERT(map->has_external_array_elements()); | 3819 ASSERT(map->has_external_array_elements()); |
| 3820 AddInstruction(new(zone()) HCheckMap(object, map)); | 3820 AddInstruction(new(zone()) HCheckMap(object, map)); |
| 3821 HLoadElements* elements = new(zone()) HLoadElements(object); | 3821 HLoadElements* elements = new(zone()) HLoadElements(object); |
| 3822 AddInstruction(elements); | 3822 AddInstruction(elements); |
| 3823 HInstruction* length = AddInstruction( | 3823 HInstruction* length = AddInstruction( |
| 3824 new(zone()) HExternalArrayLength(elements)); | 3824 new(zone()) HExternalArrayLength(elements)); |
| 3825 AddInstruction(new(zone()) HBoundsCheck(key, length)); | 3825 AddInstruction(new(zone()) HBoundsCheck(key, length)); |
| 3826 HLoadExternalArrayPointer* external_elements = | 3826 HLoadExternalArrayPointer* external_elements = |
| 3827 new(zone()) HLoadExternalArrayPointer(elements); | 3827 new(zone()) HLoadExternalArrayPointer(elements); |
| 3828 AddInstruction(external_elements); | 3828 AddInstruction(external_elements); |
| 3829 ExternalArrayType array_type = expr->external_array_type(); | 3829 JSObject::ElementsKind elements_kind = map->elements_kind(); |
| 3830 switch (array_type) { | 3830 switch (elements_kind) { |
| 3831 case kExternalPixelArray: { | 3831 case JSObject::EXTERNAL_PIXEL_ELEMENTS: { |
| 3832 HClampToUint8* clamp = new(zone()) HClampToUint8(val); | 3832 HClampToUint8* clamp = new(zone()) HClampToUint8(val); |
| 3833 AddInstruction(clamp); | 3833 AddInstruction(clamp); |
| 3834 val = clamp; | 3834 val = clamp; |
| 3835 break; | 3835 break; |
| 3836 } | 3836 } |
| 3837 case kExternalByteArray: | 3837 case JSObject::EXTERNAL_BYTE_ELEMENTS: |
| 3838 case kExternalUnsignedByteArray: | 3838 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
| 3839 case kExternalShortArray: | 3839 case JSObject::EXTERNAL_SHORT_ELEMENTS: |
| 3840 case kExternalUnsignedShortArray: | 3840 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
| 3841 case kExternalIntArray: | 3841 case JSObject::EXTERNAL_INT_ELEMENTS: |
| 3842 case kExternalUnsignedIntArray: { | 3842 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: { |
| 3843 HToInt32* floor_val = new(zone()) HToInt32(val); | 3843 HToInt32* floor_val = new(zone()) HToInt32(val); |
| 3844 AddInstruction(floor_val); | 3844 AddInstruction(floor_val); |
| 3845 val = floor_val; | 3845 val = floor_val; |
| 3846 break; | 3846 break; |
| 3847 } | 3847 } |
| 3848 case kExternalFloatArray: | 3848 case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
| 3849 case kExternalDoubleArray: | 3849 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
| 3850 case JSObject::FAST_ELEMENTS: |
| 3851 case JSObject::FAST_DOUBLE_ELEMENTS: |
| 3852 case JSObject::DICTIONARY_ELEMENTS: |
| 3853 UNREACHABLE(); |
| 3850 break; | 3854 break; |
| 3851 } | 3855 } |
| 3852 return new(zone()) HStoreKeyedSpecializedArrayElement( | 3856 return new(zone()) HStoreKeyedSpecializedArrayElement( |
| 3853 external_elements, | 3857 external_elements, |
| 3854 key, | 3858 key, |
| 3855 val, | 3859 val, |
| 3856 expr->external_array_type()); | 3860 map->elements_kind()); |
| 3857 } | 3861 } |
| 3858 | 3862 |
| 3859 | 3863 |
| 3860 HInstruction* HGraphBuilder::BuildStoreKeyed(HValue* object, | 3864 HInstruction* HGraphBuilder::BuildStoreKeyed(HValue* object, |
| 3861 HValue* key, | 3865 HValue* key, |
| 3862 HValue* value, | 3866 HValue* value, |
| 3863 Expression* expr) { | 3867 Expression* expr) { |
| 3864 if (expr->IsMonomorphic()) { | 3868 if (expr->IsMonomorphic()) { |
| 3865 Handle<Map> receiver_type(expr->GetMonomorphicReceiverType()); | 3869 Handle<Map> receiver_type(expr->GetMonomorphicReceiverType()); |
| 3866 // An object has either fast elements or external array elements, but | 3870 // An object has either fast elements or external array elements, but |
| (...skipping 2472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6339 } | 6343 } |
| 6340 } | 6344 } |
| 6341 | 6345 |
| 6342 #ifdef DEBUG | 6346 #ifdef DEBUG |
| 6343 if (graph_ != NULL) graph_->Verify(); | 6347 if (graph_ != NULL) graph_->Verify(); |
| 6344 if (allocator_ != NULL) allocator_->Verify(); | 6348 if (allocator_ != NULL) allocator_->Verify(); |
| 6345 #endif | 6349 #endif |
| 6346 } | 6350 } |
| 6347 | 6351 |
| 6348 } } // namespace v8::internal | 6352 } } // namespace v8::internal |
| OLD | NEW |