Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index cf9d6c709ee489f0658196d3244c96c12e822c1c..0818d470d7bacdd11246fadd6cd9865fbf641763 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -2690,6 +2690,16 @@ bool Heap::CreateInitialMaps() { |
} |
set_heap_number_map(Map::cast(obj)); |
+ { MaybeObject* maybe_obj = AllocateMap(FLOAT32x4_TYPE, Float32x4::kSize); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_float32x4_map(Map::cast(obj)); |
+ |
+ { MaybeObject* maybe_obj = AllocateMap(INT32x4_TYPE, Int32x4::kSize); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_int32x4_map(Map::cast(obj)); |
+ |
{ MaybeObject* maybe_obj = AllocateMap(SYMBOL_TYPE, Symbol::kSize); |
if (!maybe_obj->ToObject(&obj)) return false; |
} |
@@ -2798,6 +2808,18 @@ bool Heap::CreateInitialMaps() { |
} |
set_external_float_array_map(Map::cast(obj)); |
+ { MaybeObject* maybe_obj = AllocateMap(EXTERNAL_FLOAT32x4_ARRAY_TYPE, |
+ ExternalArray::kAlignedSize); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_external_float32x4_array_map(Map::cast(obj)); |
+ |
+ { MaybeObject* maybe_obj = AllocateMap(EXTERNAL_INT32x4_ARRAY_TYPE, |
+ ExternalArray::kAlignedSize); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_external_int32x4_array_map(Map::cast(obj)); |
+ |
{ MaybeObject* maybe_obj = |
AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
if (!maybe_obj->ToObject(&obj)) return false; |
@@ -2848,6 +2870,18 @@ bool Heap::CreateInitialMaps() { |
} |
set_empty_external_float_array(ExternalArray::cast(obj)); |
+ { MaybeObject* maybe_obj = |
+ AllocateEmptyExternalArray(kExternalFloat32x4Array); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_empty_external_float32x4_array(ExternalArray::cast(obj)); |
+ |
+ { MaybeObject* maybe_obj = |
+ AllocateEmptyExternalArray(kExternalInt32x4Array); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
+ set_empty_external_int32x4_array(ExternalArray::cast(obj)); |
+ |
{ MaybeObject* maybe_obj = AllocateEmptyExternalArray(kExternalDoubleArray); |
if (!maybe_obj->ToObject(&obj)) return false; |
} |
@@ -2986,6 +3020,44 @@ MaybeObject* Heap::AllocateHeapNumber(double value, PretenureFlag pretenure) { |
} |
+MaybeObject* Heap::AllocateFloat32x4(float32x4_value_t value, |
+ PretenureFlag pretenure) { |
+ // Statically ensure that it is safe to allocate float32x4 objects in paged |
+ // spaces. |
+ int size = Float32x4::kSize; |
+ STATIC_ASSERT(Float32x4::kSize <= Page::kNonCodeObjectAreaSize); |
+ AllocationSpace space = (pretenure == TENURED) ? OLD_DATA_SPACE : NEW_SPACE; |
+ |
+ Object* result; |
+ { MaybeObject* maybe_result = AllocateRaw(size, space, OLD_DATA_SPACE); |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
+ } |
+ |
+ HeapObject::cast(result)->set_map_no_write_barrier(float32x4_map()); |
+ Float32x4::cast(result)->set_value(value); |
+ return result; |
+} |
+ |
+ |
+MaybeObject* Heap::AllocateInt32x4(int32x4_value_t value, |
+ PretenureFlag pretenure) { |
+ // Statically ensure that it is safe to allocate int32x4 objects in paged |
+ // spaces. |
+ int size = Int32x4::kSize; |
+ STATIC_ASSERT(Int32x4::kSize <= Page::kNonCodeObjectAreaSize); |
+ AllocationSpace space = (pretenure == TENURED) ? OLD_DATA_SPACE : NEW_SPACE; |
+ |
+ Object* result; |
+ { MaybeObject* maybe_result = AllocateRaw(size, space, OLD_DATA_SPACE); |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
+ } |
+ |
+ HeapObject::cast(result)->set_map_no_write_barrier(int32x4_map()); |
+ Int32x4::cast(result)->set_value(value); |
+ return result; |
+} |
+ |
+ |
MaybeObject* Heap::AllocateCell(Object* value) { |
int size = Cell::kSize; |
STATIC_ASSERT(Cell::kSize <= Page::kNonCodeObjectAreaSize); |
@@ -3655,6 +3727,10 @@ Heap::RootListIndex Heap::RootIndexForExternalArrayType( |
return kExternalUnsignedIntArrayMapRootIndex; |
case kExternalFloatArray: |
return kExternalFloatArrayMapRootIndex; |
+ case kExternalFloat32x4Array: |
+ return kExternalFloat32x4ArrayMapRootIndex; |
+ case kExternalInt32x4Array: |
+ return kExternalInt32x4ArrayMapRootIndex; |
case kExternalDoubleArray: |
return kExternalDoubleArrayMapRootIndex; |
case kExternalPixelArray: |
@@ -3682,6 +3758,10 @@ Heap::RootListIndex Heap::RootIndexForEmptyExternalArray( |
return kEmptyExternalUnsignedIntArrayRootIndex; |
case EXTERNAL_FLOAT_ELEMENTS: |
return kEmptyExternalFloatArrayRootIndex; |
+ case EXTERNAL_FLOAT32x4_ELEMENTS: |
+ return kEmptyExternalFloat32x4ArrayRootIndex; |
+ case EXTERNAL_INT32x4_ELEMENTS: |
+ return kEmptyExternalInt32x4ArrayRootIndex; |
case EXTERNAL_DOUBLE_ELEMENTS: |
return kEmptyExternalDoubleArrayRootIndex; |
case EXTERNAL_PIXEL_ELEMENTS: |