| Index: src/code-stub-assembler.cc
|
| diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
|
| index e9ff5f9c604fb8e7e0236600fd66639fd812d132..151a13f86467677376034827f1b084f2c5adf1a9 100644
|
| --- a/src/code-stub-assembler.cc
|
| +++ b/src/code-stub-assembler.cc
|
| @@ -86,7 +86,7 @@ Node* CodeStubAssembler::IntPtrOrSmiConstant(int value, ParameterMode mode) {
|
| if (mode == SMI_PARAMETERS) {
|
| return SmiConstant(Smi::FromInt(value));
|
| } else {
|
| - DCHECK_EQ(INTEGER_PARAMETERS, mode);
|
| + DCHECK(mode == INTEGER_PARAMETERS || mode == INTPTR_PARAMETERS);
|
| return IntPtrConstant(value);
|
| }
|
| }
|
| @@ -1097,19 +1097,6 @@ Node* CodeStubAssembler::LoadWeakCellValue(Node* weak_cell, Label* if_cleared) {
|
| return value;
|
| }
|
|
|
| -Node* CodeStubAssembler::AllocateUninitializedFixedArray(Node* length) {
|
| - Node* header_size = IntPtrConstant(FixedArray::kHeaderSize);
|
| - Node* data_size = WordShl(length, IntPtrConstant(kPointerSizeLog2));
|
| - Node* total_size = IntPtrAdd(data_size, header_size);
|
| -
|
| - Node* result = Allocate(total_size, kNone);
|
| - StoreMapNoWriteBarrier(result, LoadRoot(Heap::kFixedArrayMapRootIndex));
|
| - StoreObjectFieldNoWriteBarrier(result, FixedArray::kLengthOffset,
|
| - SmiTag(length));
|
| -
|
| - return result;
|
| -}
|
| -
|
| Node* CodeStubAssembler::LoadFixedArrayElement(Node* object, Node* index_node,
|
| int additional_offset,
|
| ParameterMode parameter_mode) {
|
| @@ -1161,9 +1148,8 @@ Node* CodeStubAssembler::LoadJSArrayElementsMap(ElementsKind kind,
|
| }
|
|
|
| Node* CodeStubAssembler::StoreHeapNumberValue(Node* object, Node* value) {
|
| - return StoreNoWriteBarrier(
|
| - MachineRepresentation::kFloat64, object,
|
| - IntPtrConstant(HeapNumber::kValueOffset - kHeapObjectTag), value);
|
| + return StoreObjectFieldNoWriteBarrier(object, HeapNumber::kValueOffset, value,
|
| + MachineRepresentation::kFloat64);
|
| }
|
|
|
| Node* CodeStubAssembler::StoreObjectField(
|
| @@ -1360,9 +1346,8 @@ Node* CodeStubAssembler::AllocateJSArray(ElementsKind kind, Node* array_map,
|
| Node* empty_properties = LoadRoot(Heap::kEmptyFixedArrayRootIndex);
|
| StoreObjectFieldNoWriteBarrier(array, JSArray::kPropertiesOffset,
|
| empty_properties);
|
| - StoreObjectFieldNoWriteBarrier(
|
| - array, JSArray::kLengthOffset,
|
| - mode == SMI_PARAMETERS ? length_node : SmiTag(length_node));
|
| + StoreObjectFieldNoWriteBarrier(array, JSArray::kLengthOffset,
|
| + TagParameter(length_node, mode));
|
|
|
| if (allocation_site != nullptr) {
|
| InitializeAllocationMemento(array, JSArray::kSize, allocation_site);
|
| @@ -1374,9 +1359,8 @@ Node* CodeStubAssembler::AllocateJSArray(ElementsKind kind, Node* array_map,
|
| Handle<Map> elements_map(is_double ? heap->fixed_double_array_map()
|
| : heap->fixed_array_map());
|
| StoreMapNoWriteBarrier(elements, HeapConstant(elements_map));
|
| - StoreObjectFieldNoWriteBarrier(
|
| - elements, FixedArray::kLengthOffset,
|
| - mode == SMI_PARAMETERS ? capacity_node : SmiTag(capacity_node));
|
| + StoreObjectFieldNoWriteBarrier(elements, FixedArray::kLengthOffset,
|
| + TagParameter(capacity_node, mode));
|
|
|
| // Fill in the elements with holes.
|
| FillFixedArrayWithValue(kind, elements, IntPtrConstant(0), capacity_node,
|
| @@ -1402,9 +1386,8 @@ Node* CodeStubAssembler::AllocateFixedArray(ElementsKind kind,
|
| } else {
|
| StoreMapNoWriteBarrier(array, HeapConstant(map));
|
| }
|
| - StoreObjectFieldNoWriteBarrier(
|
| - array, FixedArray::kLengthOffset,
|
| - mode == INTEGER_PARAMETERS ? SmiTag(capacity_node) : capacity_node);
|
| + StoreObjectFieldNoWriteBarrier(array, FixedArray::kLengthOffset,
|
| + TagParameter(capacity_node, mode));
|
| return array;
|
| }
|
|
|
| @@ -1553,7 +1536,7 @@ Node* CodeStubAssembler::CalculateNewElementsCapacity(Node* old_capacity,
|
| Node* new_capacity = IntPtrAdd(half_old_capacity, old_capacity);
|
| Node* unconditioned_result =
|
| IntPtrAdd(new_capacity, IntPtrOrSmiConstant(16, mode));
|
| - if (mode == INTEGER_PARAMETERS) {
|
| + if (mode == INTEGER_PARAMETERS || mode == INTPTR_PARAMETERS) {
|
| return unconditioned_result;
|
| } else {
|
| int const kSmiShiftBits = kSmiShiftSize + kSmiTagSize;
|
| @@ -1568,17 +1551,9 @@ Node* CodeStubAssembler::CheckAndGrowElementsCapacity(Node* context,
|
| Node* key, Label* fail) {
|
| Node* capacity = LoadFixedArrayBaseLength(elements);
|
|
|
| - // On 32-bit platforms, there is a slight performance advantage to doing all
|
| - // of the arithmetic for the new backing store with SMIs, since it's possible
|
| - // to save a few tag/untag operations without paying an extra expense when
|
| - // calculating array offset (the smi math can be folded away) and there are
|
| - // fewer live ranges. Thus only convert |capacity| and |key| to untagged value
|
| - // on 64-bit platforms.
|
| - ParameterMode mode = Is64() ? INTEGER_PARAMETERS : SMI_PARAMETERS;
|
| - if (mode == INTEGER_PARAMETERS) {
|
| - capacity = SmiUntag(capacity);
|
| - key = SmiUntag(key);
|
| - }
|
| + ParameterMode mode = OptimalParameterMode();
|
| + capacity = UntagParameter(capacity, mode);
|
| + key = UntagParameter(key, mode);
|
|
|
| // If the gap growth is too big, fall back to the runtime.
|
| Node* max_gap = IntPtrOrSmiConstant(JSObject::kMaxGap, mode);
|
|
|