Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: src/heap/heap.cc

Issue 1153373003: Add new Float32x4 type for SIMD.js. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: A few more tests. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 2700 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 #define ALLOCATE_VARSIZE_MAP(instance_type, field_name) \ 2711 #define ALLOCATE_VARSIZE_MAP(instance_type, field_name) \
2712 ALLOCATE_MAP(instance_type, kVariableSizeSentinel, field_name) 2712 ALLOCATE_MAP(instance_type, kVariableSizeSentinel, field_name)
2713 2713
2714 ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, fixed_cow_array) 2714 ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, fixed_cow_array)
2715 DCHECK(fixed_array_map() != fixed_cow_array_map()); 2715 DCHECK(fixed_array_map() != fixed_cow_array_map());
2716 2716
2717 ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, scope_info) 2717 ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, scope_info)
2718 ALLOCATE_MAP(HEAP_NUMBER_TYPE, HeapNumber::kSize, heap_number) 2718 ALLOCATE_MAP(HEAP_NUMBER_TYPE, HeapNumber::kSize, heap_number)
2719 ALLOCATE_MAP(MUTABLE_HEAP_NUMBER_TYPE, HeapNumber::kSize, 2719 ALLOCATE_MAP(MUTABLE_HEAP_NUMBER_TYPE, HeapNumber::kSize,
2720 mutable_heap_number) 2720 mutable_heap_number)
2721 ALLOCATE_MAP(FLOAT32X4_TYPE, Float32x4::kSize, float32x4)
2721 ALLOCATE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol) 2722 ALLOCATE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol)
2722 ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign) 2723 ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign)
2723 2724
2724 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, the_hole); 2725 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, the_hole);
2725 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean); 2726 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean);
2726 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, uninitialized); 2727 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, uninitialized);
2727 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, arguments_marker); 2728 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, arguments_marker);
2728 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, no_interceptor_result_sentinel); 2729 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, no_interceptor_result_sentinel);
2729 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, exception); 2730 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, exception);
2730 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, termination_exception); 2731 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, termination_exception);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2860 if (!allocation.To(&result)) return allocation; 2861 if (!allocation.To(&result)) return allocation;
2861 } 2862 }
2862 2863
2863 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map(); 2864 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map();
2864 HeapObject::cast(result)->set_map_no_write_barrier(map); 2865 HeapObject::cast(result)->set_map_no_write_barrier(map);
2865 HeapNumber::cast(result)->set_value(value); 2866 HeapNumber::cast(result)->set_value(value);
2866 return result; 2867 return result;
2867 } 2868 }
2868 2869
2869 2870
2871 AllocationResult Heap::AllocateFloat32x4(double w, double x, double y, double z,
2872 PretenureFlag pretenure) {
2873 // Statically ensure that it is safe to allocate SIMD values in paged
2874 // spaces.
2875 int size = Float32x4::kSize;
2876 STATIC_ASSERT(Float32x4::kSize <= Page::kMaxRegularHeapObjectSize);
2877
2878 AllocationSpace space = SelectSpace(size, pretenure);
2879
2880 HeapObject* result;
2881 {
2882 AllocationResult allocation =
2883 AllocateRaw(size, space, OLD_SPACE, kSimd128Unaligned);
2884 if (!allocation.To(&result)) return allocation;
2885 }
2886
2887 result->set_map_no_write_barrier(float32x4_map());
2888 Float32x4::cast(result)->set_lane(0, w);
2889 Float32x4::cast(result)->set_lane(1, x);
2890 Float32x4::cast(result)->set_lane(2, y);
2891 Float32x4::cast(result)->set_lane(3, z);
2892 return result;
2893 }
2894
2895
2870 AllocationResult Heap::AllocateCell(Object* value) { 2896 AllocationResult Heap::AllocateCell(Object* value) {
2871 int size = Cell::kSize; 2897 int size = Cell::kSize;
2872 STATIC_ASSERT(Cell::kSize <= Page::kMaxRegularHeapObjectSize); 2898 STATIC_ASSERT(Cell::kSize <= Page::kMaxRegularHeapObjectSize);
2873 2899
2874 HeapObject* result; 2900 HeapObject* result;
2875 { 2901 {
2876 AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE); 2902 AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
2877 if (!allocation.To(&result)) return allocation; 2903 if (!allocation.To(&result)) return allocation;
2878 } 2904 }
2879 result->set_map_no_write_barrier(cell_map()); 2905 result->set_map_no_write_barrier(cell_map());
(...skipping 3657 matching lines...) Expand 10 before | Expand all | Expand 10 after
6537 *object_type = "CODE_TYPE"; \ 6563 *object_type = "CODE_TYPE"; \
6538 *object_sub_type = "CODE_AGE/" #name; \ 6564 *object_sub_type = "CODE_AGE/" #name; \
6539 return true; 6565 return true;
6540 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) 6566 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME)
6541 #undef COMPARE_AND_RETURN_NAME 6567 #undef COMPARE_AND_RETURN_NAME
6542 } 6568 }
6543 return false; 6569 return false;
6544 } 6570 }
6545 } // namespace internal 6571 } // namespace internal
6546 } // namespace v8 6572 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698