| 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 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) { | 788 RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) { |
| 789 HandleScope scope(isolate); | 789 HandleScope scope(isolate); |
| 790 ASSERT(args.length() == 5); | 790 ASSERT(args.length() == 5); |
| 791 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, holder, 0); | 791 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, holder, 0); |
| 792 CONVERT_SMI_ARG_CHECKED(arrayId, 1); | 792 CONVERT_SMI_ARG_CHECKED(arrayId, 1); |
| 793 CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 2); | 793 CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 2); |
| 794 CONVERT_ARG_HANDLE_CHECKED(Object, byte_offset_object, 3); | 794 CONVERT_ARG_HANDLE_CHECKED(Object, byte_offset_object, 3); |
| 795 CONVERT_ARG_HANDLE_CHECKED(Object, byte_length_object, 4); | 795 CONVERT_ARG_HANDLE_CHECKED(Object, byte_length_object, 4); |
| 796 | 796 |
| 797 ExternalArrayType arrayType; | 797 ExternalArrayType arrayType; |
| 798 ElementsKind elementsKind; | |
| 799 size_t elementSize; | 798 size_t elementSize; |
| 800 switch (arrayId) { | 799 switch (arrayId) { |
| 801 case ARRAY_ID_UINT8: | 800 case ARRAY_ID_UINT8: |
| 802 elementsKind = EXTERNAL_UNSIGNED_BYTE_ELEMENTS; | |
| 803 arrayType = kExternalUnsignedByteArray; | 801 arrayType = kExternalUnsignedByteArray; |
| 804 elementSize = 1; | 802 elementSize = 1; |
| 805 break; | 803 break; |
| 806 case ARRAY_ID_INT8: | 804 case ARRAY_ID_INT8: |
| 807 elementsKind = EXTERNAL_BYTE_ELEMENTS; | |
| 808 arrayType = kExternalByteArray; | 805 arrayType = kExternalByteArray; |
| 809 elementSize = 1; | 806 elementSize = 1; |
| 810 break; | 807 break; |
| 811 case ARRAY_ID_UINT16: | 808 case ARRAY_ID_UINT16: |
| 812 elementsKind = EXTERNAL_UNSIGNED_SHORT_ELEMENTS; | |
| 813 arrayType = kExternalUnsignedShortArray; | 809 arrayType = kExternalUnsignedShortArray; |
| 814 elementSize = 2; | 810 elementSize = 2; |
| 815 break; | 811 break; |
| 816 case ARRAY_ID_INT16: | 812 case ARRAY_ID_INT16: |
| 817 elementsKind = EXTERNAL_SHORT_ELEMENTS; | |
| 818 arrayType = kExternalShortArray; | 813 arrayType = kExternalShortArray; |
| 819 elementSize = 2; | 814 elementSize = 2; |
| 820 break; | 815 break; |
| 821 case ARRAY_ID_UINT32: | 816 case ARRAY_ID_UINT32: |
| 822 elementsKind = EXTERNAL_UNSIGNED_INT_ELEMENTS; | |
| 823 arrayType = kExternalUnsignedIntArray; | 817 arrayType = kExternalUnsignedIntArray; |
| 824 elementSize = 4; | 818 elementSize = 4; |
| 825 break; | 819 break; |
| 826 case ARRAY_ID_INT32: | 820 case ARRAY_ID_INT32: |
| 827 elementsKind = EXTERNAL_INT_ELEMENTS; | |
| 828 arrayType = kExternalIntArray; | 821 arrayType = kExternalIntArray; |
| 829 elementSize = 4; | 822 elementSize = 4; |
| 830 break; | 823 break; |
| 831 case ARRAY_ID_FLOAT32: | 824 case ARRAY_ID_FLOAT32: |
| 832 elementsKind = EXTERNAL_FLOAT_ELEMENTS; | |
| 833 arrayType = kExternalFloatArray; | 825 arrayType = kExternalFloatArray; |
| 834 elementSize = 4; | 826 elementSize = 4; |
| 835 break; | 827 break; |
| 836 case ARRAY_ID_FLOAT64: | 828 case ARRAY_ID_FLOAT64: |
| 837 elementsKind = EXTERNAL_DOUBLE_ELEMENTS; | |
| 838 arrayType = kExternalDoubleArray; | 829 arrayType = kExternalDoubleArray; |
| 839 elementSize = 8; | 830 elementSize = 8; |
| 840 break; | 831 break; |
| 841 case ARRAY_ID_UINT8C: | 832 case ARRAY_ID_UINT8C: |
| 842 elementsKind = EXTERNAL_PIXEL_ELEMENTS; | |
| 843 arrayType = kExternalPixelArray; | 833 arrayType = kExternalPixelArray; |
| 844 elementSize = 1; | 834 elementSize = 1; |
| 845 break; | 835 break; |
| 846 default: | 836 default: |
| 847 UNREACHABLE(); | 837 UNREACHABLE(); |
| 848 return NULL; | 838 return NULL; |
| 849 } | 839 } |
| 850 | 840 |
| 851 holder->set_buffer(*buffer); | 841 holder->set_buffer(*buffer); |
| 852 holder->set_byte_offset(*byte_offset_object); | 842 holder->set_byte_offset(*byte_offset_object); |
| 853 holder->set_byte_length(*byte_length_object); | 843 holder->set_byte_length(*byte_length_object); |
| 854 | 844 |
| 855 size_t byte_offset = NumberToSize(isolate, *byte_offset_object); | 845 size_t byte_offset = NumberToSize(isolate, *byte_offset_object); |
| 856 size_t byte_length = NumberToSize(isolate, *byte_length_object); | 846 size_t byte_length = NumberToSize(isolate, *byte_length_object); |
| 857 ASSERT(byte_length % elementSize == 0); | 847 ASSERT(byte_length % elementSize == 0); |
| 858 size_t length = byte_length / elementSize; | 848 size_t length = byte_length / elementSize; |
| 859 | 849 |
| 860 Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length); | 850 Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length); |
| 861 holder->set_length(*length_obj); | 851 holder->set_length(*length_obj); |
| 862 | 852 |
| 863 Handle<ExternalArray> elements = | 853 Handle<ExternalArray> elements = |
| 864 isolate->factory()->NewExternalArray( | 854 isolate->factory()->NewExternalArray( |
| 865 static_cast<int>(length), arrayType, | 855 static_cast<int>(length), arrayType, |
| 866 static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); | 856 static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); |
| 867 Handle<Map> map = | |
| 868 isolate->factory()->GetElementsTransitionMap(holder, elementsKind); | |
| 869 holder->set_map(*map); | |
| 870 holder->set_elements(*elements); | 857 holder->set_elements(*elements); |
| 871 return isolate->heap()->undefined_value(); | 858 return isolate->heap()->undefined_value(); |
| 872 } | 859 } |
| 873 | 860 |
| 874 | 861 |
| 875 #define TYPED_ARRAY_GETTER(getter, accessor) \ | 862 #define TYPED_ARRAY_GETTER(getter, accessor) \ |
| 876 RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayGet##getter) { \ | 863 RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayGet##getter) { \ |
| 877 HandleScope scope(isolate); \ | 864 HandleScope scope(isolate); \ |
| 878 ASSERT(args.length() == 1); \ | 865 ASSERT(args.length() == 1); \ |
| 879 CONVERT_ARG_HANDLE_CHECKED(Object, holder, 0); \ | 866 CONVERT_ARG_HANDLE_CHECKED(Object, holder, 0); \ |
| (...skipping 12628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13508 // Handle last resort GC and make sure to allow future allocations | 13495 // Handle last resort GC and make sure to allow future allocations |
| 13509 // to grow the heap without causing GCs (if possible). | 13496 // to grow the heap without causing GCs (if possible). |
| 13510 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13497 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 13511 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13498 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 13512 "Runtime::PerformGC"); | 13499 "Runtime::PerformGC"); |
| 13513 } | 13500 } |
| 13514 } | 13501 } |
| 13515 | 13502 |
| 13516 | 13503 |
| 13517 } } // namespace v8::internal | 13504 } } // namespace v8::internal |
| OLD | NEW |