Commit 133ebca4 authored by Peter Marshall's avatar Peter Marshall Committed by Commit Bot

[cleanup] Add CSA types to various TypedArray helpers.

Bug: v8:7109
Change-Id: I8d1525734019656b7575636deac8828623a2f8df
Reviewed-on: https://chromium-review.googlesource.com/803215
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#49891}
parent 8dd405e3
...@@ -43,9 +43,10 @@ class TypedArrayBuiltinsAssembler : public CodeStubAssembler { ...@@ -43,9 +43,10 @@ class TypedArrayBuiltinsAssembler : public CodeStubAssembler {
TNode<Number> byte_offset); TNode<Number> byte_offset);
TNode<Map> LoadMapForType(TNode<JSTypedArray> array); TNode<Map> LoadMapForType(TNode<JSTypedArray> array);
Node* CalculateExternalPointer(Node* backing_store, Node* byte_offset); TNode<UintPtrT> CalculateExternalPointer(TNode<UintPtrT> backing_store,
TNode<Number> byte_offset);
Node* LoadDataPtr(Node* typed_array); Node* LoadDataPtr(Node* typed_array);
Node* ByteLengthIsValid(Node* byte_length); TNode<BoolT> ByteLengthIsValid(TNode<Number> byte_length);
// Returns true if kind is either UINT8_ELEMENTS or UINT8_CLAMPED_ELEMENTS. // Returns true if kind is either UINT8_ELEMENTS or UINT8_CLAMPED_ELEMENTS.
TNode<Word32T> IsUint8ElementsKind(TNode<Word32T> kind); TNode<Word32T> IsUint8ElementsKind(TNode<Word32T> kind);
...@@ -131,10 +132,10 @@ TNode<Map> TypedArrayBuiltinsAssembler::LoadMapForType( ...@@ -131,10 +132,10 @@ TNode<Map> TypedArrayBuiltinsAssembler::LoadMapForType(
// can't allocate an array bigger than our 32-bit arithmetic range anyway. 64 // can't allocate an array bigger than our 32-bit arithmetic range anyway. 64
// bit platforms could theoretically have an offset up to 2^35 - 1, so we may // bit platforms could theoretically have an offset up to 2^35 - 1, so we may
// need to convert the float heap number to an intptr. // need to convert the float heap number to an intptr.
Node* TypedArrayBuiltinsAssembler::CalculateExternalPointer(Node* backing_store, TNode<UintPtrT> TypedArrayBuiltinsAssembler::CalculateExternalPointer(
Node* byte_offset) { TNode<UintPtrT> backing_store, TNode<Number> byte_offset) {
return IntPtrAdd(backing_store, return Unsigned(
ChangeNonnegativeNumberToUintPtr(byte_offset)); IntPtrAdd(backing_store, ChangeNonnegativeNumberToUintPtr(byte_offset)));
} }
// Setup the TypedArray which is under construction. // Setup the TypedArray which is under construction.
...@@ -169,10 +170,11 @@ void TypedArrayBuiltinsAssembler::AttachBuffer(TNode<JSTypedArray> holder, ...@@ -169,10 +170,11 @@ void TypedArrayBuiltinsAssembler::AttachBuffer(TNode<JSTypedArray> holder,
StoreObjectFieldNoWriteBarrier( StoreObjectFieldNoWriteBarrier(
elements, FixedTypedArrayBase::kBasePointerOffset, SmiConstant(0)); elements, FixedTypedArrayBase::kBasePointerOffset, SmiConstant(0));
Node* backing_store = LoadObjectField( TNode<UintPtrT> backing_store =
buffer, JSArrayBuffer::kBackingStoreOffset, MachineType::Pointer()); LoadObjectField<UintPtrT>(buffer, JSArrayBuffer::kBackingStoreOffset);
Node* external_pointer = CalculateExternalPointer(backing_store, byte_offset); TNode<UintPtrT> external_pointer =
CalculateExternalPointer(backing_store, byte_offset);
StoreObjectFieldNoWriteBarrier( StoreObjectFieldNoWriteBarrier(
elements, FixedTypedArrayBase::kExternalPointerOffset, external_pointer, elements, FixedTypedArrayBase::kExternalPointerOffset, external_pointer,
MachineType::PointerRepresentation()); MachineType::PointerRepresentation());
...@@ -552,25 +554,27 @@ Node* TypedArrayBuiltinsAssembler::LoadDataPtr(Node* typed_array) { ...@@ -552,25 +554,27 @@ Node* TypedArrayBuiltinsAssembler::LoadDataPtr(Node* typed_array) {
return IntPtrAdd(base_pointer, external_pointer); return IntPtrAdd(base_pointer, external_pointer);
} }
Node* TypedArrayBuiltinsAssembler::ByteLengthIsValid(Node* byte_length) { TNode<BoolT> TypedArrayBuiltinsAssembler::ByteLengthIsValid(
TNode<Number> byte_length) {
Label smi(this), done(this); Label smi(this), done(this);
VARIABLE(is_valid, MachineRepresentation::kWord32); TVARIABLE(BoolT, is_valid);
GotoIf(TaggedIsSmi(byte_length), &smi); GotoIf(TaggedIsSmi(byte_length), &smi);
CSA_ASSERT(this, IsHeapNumber(byte_length)); TNode<Float64T> float_value = LoadHeapNumberValue(CAST(byte_length));
Node* float_value = LoadHeapNumberValue(byte_length); TNode<Float64T> max_byte_length_double =
Node* max_byte_length_double =
Float64Constant(FixedTypedArrayBase::kMaxByteLength); Float64Constant(FixedTypedArrayBase::kMaxByteLength);
is_valid.Bind(Float64LessThanOrEqual(float_value, max_byte_length_double)); is_valid = Float64LessThanOrEqual(float_value, max_byte_length_double);
Goto(&done); Goto(&done);
BIND(&smi); BIND(&smi);
Node* max_byte_length = IntPtrConstant(FixedTypedArrayBase::kMaxByteLength); TNode<IntPtrT> max_byte_length =
is_valid.Bind(UintPtrLessThanOrEqual(SmiUntag(byte_length), max_byte_length)); IntPtrConstant(FixedTypedArrayBase::kMaxByteLength);
is_valid =
UintPtrLessThanOrEqual(SmiUntag(CAST(byte_length)), max_byte_length);
Goto(&done); Goto(&done);
BIND(&done); BIND(&done);
return is_valid.value(); return is_valid;
} }
TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) { TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) {
...@@ -594,8 +598,8 @@ TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) { ...@@ -594,8 +598,8 @@ TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) {
Return(UndefinedConstant()); Return(UndefinedConstant());
BIND(&fill); BIND(&fill);
Node* holder_kind = LoadMapElementsKind(LoadMap(holder)); TNode<Int32T> holder_kind = LoadMapElementsKind(LoadMap(holder));
Node* source_kind = LoadMapElementsKind(LoadMap(array_like)); TNode<Int32T> source_kind = LoadMapElementsKind(LoadMap(array_like));
GotoIf(Word32Equal(holder_kind, source_kind), &fast_copy); GotoIf(Word32Equal(holder_kind, source_kind), &fast_copy);
// Copy using the elements accessor. // Copy using the elements accessor.
...@@ -615,9 +619,10 @@ TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) { ...@@ -615,9 +619,10 @@ TF_BUILTIN(TypedArrayConstructByArrayLike, TypedArrayBuiltinsAssembler) {
array_like, JSTypedArray::kBufferOffset)), array_like, JSTypedArray::kBufferOffset)),
Int32Constant(0))); Int32Constant(0)));
Node* byte_length = SmiMul(length, element_size); TNode<Number> byte_length = SmiMul(length, element_size);
CSA_ASSERT(this, ByteLengthIsValid(byte_length)); CSA_ASSERT(this, ByteLengthIsValid(byte_length));
Node* byte_length_intptr = ChangeNonnegativeNumberToUintPtr(byte_length); TNode<UintPtrT> byte_length_intptr =
ChangeNonnegativeNumberToUintPtr(byte_length);
CSA_ASSERT(this, UintPtrLessThanOrEqual( CSA_ASSERT(this, UintPtrLessThanOrEqual(
byte_length_intptr, byte_length_intptr,
IntPtrConstant(FixedTypedArrayBase::kMaxByteLength))); IntPtrConstant(FixedTypedArrayBase::kMaxByteLength)));
......
...@@ -3824,9 +3824,7 @@ TNode<Float64T> CodeStubAssembler::ChangeNumberToFloat64( ...@@ -3824,9 +3824,7 @@ TNode<Float64T> CodeStubAssembler::ChangeNumberToFloat64(
} }
TNode<UintPtrT> CodeStubAssembler::ChangeNonnegativeNumberToUintPtr( TNode<UintPtrT> CodeStubAssembler::ChangeNonnegativeNumberToUintPtr(
SloppyTNode<Number> value) { TNode<Number> value) {
// TODO(tebbi): Remove assert once argument is TNode instead of SloppyTNode.
CSA_SLOW_ASSERT(this, IsNumber(value));
TVARIABLE(UintPtrT, result); TVARIABLE(UintPtrT, result);
Label smi(this), done(this, &result); Label smi(this), done(this, &result);
GotoIf(TaggedIsSmi(value), &smi); GotoIf(TaggedIsSmi(value), &smi);
......
...@@ -987,7 +987,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler { ...@@ -987,7 +987,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
TNode<Number> ChangeInt32ToTagged(SloppyTNode<Int32T> value); TNode<Number> ChangeInt32ToTagged(SloppyTNode<Int32T> value);
TNode<Number> ChangeUint32ToTagged(SloppyTNode<Uint32T> value); TNode<Number> ChangeUint32ToTagged(SloppyTNode<Uint32T> value);
TNode<Float64T> ChangeNumberToFloat64(SloppyTNode<Number> value); TNode<Float64T> ChangeNumberToFloat64(SloppyTNode<Number> value);
TNode<UintPtrT> ChangeNonnegativeNumberToUintPtr(SloppyTNode<Number> value); TNode<UintPtrT> ChangeNonnegativeNumberToUintPtr(TNode<Number> value);
void TaggedToNumeric(Node* context, Node* value, Label* done, void TaggedToNumeric(Node* context, Node* value, Label* done,
Variable* var_numeric); Variable* var_numeric);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment