| Index: src/code-stub-assembler.cc
|
| diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
|
| index 520789cc16fab43bbf3813aed52e9abc0a45c19e..0d90064c0a8f67715eb5301e10b7d9a1e40977cc 100644
|
| --- a/src/code-stub-assembler.cc
|
| +++ b/src/code-stub-assembler.cc
|
| @@ -607,77 +607,6 @@ Node* CodeStubAssembler::WordIsWordAligned(Node* word) {
|
| WordAnd(word, IntPtrConstant((1 << kPointerSizeLog2) - 1)));
|
| }
|
|
|
| -void CodeStubAssembler::BranchIfSimd128Equal(Node* lhs, Node* lhs_map,
|
| - Node* rhs, Node* rhs_map,
|
| - Label* if_equal,
|
| - Label* if_notequal) {
|
| - Label if_mapsame(this), if_mapnotsame(this);
|
| - Branch(WordEqual(lhs_map, rhs_map), &if_mapsame, &if_mapnotsame);
|
| -
|
| - Bind(&if_mapsame);
|
| - {
|
| - // Both {lhs} and {rhs} are Simd128Values with the same map, need special
|
| - // handling for Float32x4 because of NaN comparisons.
|
| - Label if_float32x4(this), if_notfloat32x4(this);
|
| - Node* float32x4_map = HeapConstant(factory()->float32x4_map());
|
| - Branch(WordEqual(lhs_map, float32x4_map), &if_float32x4, &if_notfloat32x4);
|
| -
|
| - Bind(&if_float32x4);
|
| - {
|
| - // Both {lhs} and {rhs} are Float32x4, compare the lanes individually
|
| - // using a floating point comparison.
|
| - for (int offset = Float32x4::kValueOffset - kHeapObjectTag;
|
| - offset < Float32x4::kSize - kHeapObjectTag;
|
| - offset += sizeof(float)) {
|
| - // Load the floating point values for {lhs} and {rhs}.
|
| - Node* lhs_value =
|
| - Load(MachineType::Float32(), lhs, IntPtrConstant(offset));
|
| - Node* rhs_value =
|
| - Load(MachineType::Float32(), rhs, IntPtrConstant(offset));
|
| -
|
| - // Perform a floating point comparison.
|
| - Label if_valueequal(this), if_valuenotequal(this);
|
| - Branch(Float32Equal(lhs_value, rhs_value), &if_valueequal,
|
| - &if_valuenotequal);
|
| - Bind(&if_valuenotequal);
|
| - Goto(if_notequal);
|
| - Bind(&if_valueequal);
|
| - }
|
| -
|
| - // All 4 lanes match, {lhs} and {rhs} considered equal.
|
| - Goto(if_equal);
|
| - }
|
| -
|
| - Bind(&if_notfloat32x4);
|
| - {
|
| - // For other Simd128Values we just perform a bitwise comparison.
|
| - for (int offset = Simd128Value::kValueOffset - kHeapObjectTag;
|
| - offset < Simd128Value::kSize - kHeapObjectTag;
|
| - offset += kPointerSize) {
|
| - // Load the word values for {lhs} and {rhs}.
|
| - Node* lhs_value =
|
| - Load(MachineType::Pointer(), lhs, IntPtrConstant(offset));
|
| - Node* rhs_value =
|
| - Load(MachineType::Pointer(), rhs, IntPtrConstant(offset));
|
| -
|
| - // Perform a bitwise word-comparison.
|
| - Label if_valueequal(this), if_valuenotequal(this);
|
| - Branch(WordEqual(lhs_value, rhs_value), &if_valueequal,
|
| - &if_valuenotequal);
|
| - Bind(&if_valuenotequal);
|
| - Goto(if_notequal);
|
| - Bind(&if_valueequal);
|
| - }
|
| -
|
| - // Bitwise comparison succeeded, {lhs} and {rhs} considered equal.
|
| - Goto(if_equal);
|
| - }
|
| - }
|
| -
|
| - Bind(&if_mapnotsame);
|
| - Goto(if_notequal);
|
| -}
|
| -
|
| void CodeStubAssembler::BranchIfPrototypesHaveNoElements(
|
| Node* receiver_map, Label* definitely_no_elements,
|
| Label* possibly_elements) {
|
| @@ -819,7 +748,6 @@ Node* CodeStubAssembler::AllocateRawAligned(Node* size_in_bytes,
|
| Variable adjusted_size(this, MachineType::PointerRepresentation(),
|
| size_in_bytes);
|
| if (flags & kDoubleAlignment) {
|
| - // TODO(epertoso): Simd128 alignment.
|
| Label aligned(this), not_aligned(this), merge(this, &adjusted_size);
|
| Branch(WordAnd(top, IntPtrConstant(kDoubleAlignmentMask)), ¬_aligned,
|
| &aligned);
|
| @@ -847,8 +775,6 @@ Node* CodeStubAssembler::AllocateRawAligned(Node* size_in_bytes,
|
|
|
| Bind(&needs_filler);
|
| // Store a filler and increase the address by kPointerSize.
|
| - // TODO(epertoso): this code assumes that we only align to kDoubleSize. Change
|
| - // it when Simd128 alignment is supported.
|
| StoreNoWriteBarrier(MachineType::PointerRepresentation(), top,
|
| LoadRoot(Heap::kOnePointerFillerMapRootIndex));
|
| address.Bind(BitcastWordToTagged(
|
| @@ -4011,8 +3937,8 @@ Node* CodeStubAssembler::NonNumberToNumber(Node* context, Node* input) {
|
|
|
| Bind(&if_inputisother);
|
| {
|
| - // The {input} is something else (i.e. Symbol or Simd128Value), let the
|
| - // runtime figure out the correct exception.
|
| + // The {input} is something else (e.g. Symbol), let the runtime figure
|
| + // out the correct exception.
|
| // Note: We cannot tail call to the runtime here, as js-to-wasm
|
| // trampolines also use this code currently, and they declare all
|
| // outgoing parameters as untagged, while we would push a tagged
|
| @@ -6838,8 +6764,6 @@ void GenerateEqual_Same(CodeStubAssembler* assembler, Node* value,
|
| // In case of abstract or strict equality checks, we need additional checks
|
| // for NaN values because they are not considered equal, even if both the
|
| // left and the right hand side reference exactly the same value.
|
| - // TODO(bmeurer): This seems to violate the SIMD.js specification, but it
|
| - // seems to be what is tested in the current SIMD.js testsuite.
|
|
|
| typedef CodeStubAssembler::Label Label;
|
|
|
| @@ -6874,15 +6798,6 @@ void GenerateEqual_Same(CodeStubAssembler* assembler, Node* value,
|
| assembler->Bind(&if_valueissmi);
|
| assembler->Goto(if_equal);
|
| }
|
| -
|
| -void GenerateEqual_Simd128Value_HeapObject(
|
| - CodeStubAssembler* assembler, Node* lhs, Node* lhs_map, Node* rhs,
|
| - Node* rhs_map, CodeStubAssembler::Label* if_equal,
|
| - CodeStubAssembler::Label* if_notequal) {
|
| - assembler->BranchIfSimd128Equal(lhs, lhs_map, rhs, rhs_map, if_equal,
|
| - if_notequal);
|
| -}
|
| -
|
| } // namespace
|
|
|
| // ES6 section 7.2.12 Abstract Equality Comparison
|
| @@ -7040,8 +6955,8 @@ Node* CodeStubAssembler::Equal(ResultMode mode, Node* lhs, Node* rhs,
|
| Bind(&if_rhsisnotsmi);
|
| {
|
| Label if_lhsisstring(this), if_lhsisnumber(this),
|
| - if_lhsissymbol(this), if_lhsissimd128value(this),
|
| - if_lhsisoddball(this), if_lhsisreceiver(this);
|
| + if_lhsissymbol(this), if_lhsisoddball(this),
|
| + if_lhsisreceiver(this);
|
|
|
| // Both {lhs} and {rhs} are HeapObjects, load their maps
|
| // and their instance types.
|
| @@ -7053,7 +6968,7 @@ Node* CodeStubAssembler::Equal(ResultMode mode, Node* lhs, Node* rhs,
|
| Node* rhs_instance_type = LoadMapInstanceType(rhs_map);
|
|
|
| // Dispatch based on the instance type of {lhs}.
|
| - size_t const kNumCases = FIRST_NONSTRING_TYPE + 4;
|
| + size_t const kNumCases = FIRST_NONSTRING_TYPE + 3;
|
| Label* case_labels[kNumCases];
|
| int32_t case_values[kNumCases];
|
| for (int32_t i = 0; i < FIRST_NONSTRING_TYPE; ++i) {
|
| @@ -7064,10 +6979,8 @@ Node* CodeStubAssembler::Equal(ResultMode mode, Node* lhs, Node* rhs,
|
| case_values[FIRST_NONSTRING_TYPE + 0] = HEAP_NUMBER_TYPE;
|
| case_labels[FIRST_NONSTRING_TYPE + 1] = &if_lhsissymbol;
|
| case_values[FIRST_NONSTRING_TYPE + 1] = SYMBOL_TYPE;
|
| - case_labels[FIRST_NONSTRING_TYPE + 2] = &if_lhsissimd128value;
|
| - case_values[FIRST_NONSTRING_TYPE + 2] = SIMD128_VALUE_TYPE;
|
| - case_labels[FIRST_NONSTRING_TYPE + 3] = &if_lhsisoddball;
|
| - case_values[FIRST_NONSTRING_TYPE + 3] = ODDBALL_TYPE;
|
| + case_labels[FIRST_NONSTRING_TYPE + 2] = &if_lhsisoddball;
|
| + case_values[FIRST_NONSTRING_TYPE + 2] = ODDBALL_TYPE;
|
| Switch(lhs_instance_type, &if_lhsisreceiver, case_values, case_labels,
|
| arraysize(case_values));
|
| for (int32_t i = 0; i < FIRST_NONSTRING_TYPE; ++i) {
|
| @@ -7251,47 +7164,6 @@ Node* CodeStubAssembler::Equal(ResultMode mode, Node* lhs, Node* rhs,
|
| }
|
| }
|
|
|
| - Bind(&if_lhsissimd128value);
|
| - {
|
| - // Check if the {rhs} is also a Simd128Value.
|
| - Label if_rhsissimd128value(this), if_rhsisnotsimd128value(this);
|
| - Branch(Word32Equal(lhs_instance_type, rhs_instance_type),
|
| - &if_rhsissimd128value, &if_rhsisnotsimd128value);
|
| -
|
| - Bind(&if_rhsissimd128value);
|
| - {
|
| - // Both {lhs} and {rhs} is a Simd128Value.
|
| - GenerateEqual_Simd128Value_HeapObject(
|
| - this, lhs, lhs_map, rhs, rhs_map, &if_equal, &if_notequal);
|
| - }
|
| -
|
| - Bind(&if_rhsisnotsimd128value);
|
| - {
|
| - // Check if the {rhs} is a JSReceiver.
|
| - Label if_rhsisreceiver(this), if_rhsisnotreceiver(this);
|
| - STATIC_ASSERT(LAST_TYPE == LAST_JS_RECEIVER_TYPE);
|
| - Branch(IsJSReceiverInstanceType(rhs_instance_type),
|
| - &if_rhsisreceiver, &if_rhsisnotreceiver);
|
| -
|
| - Bind(&if_rhsisreceiver);
|
| - {
|
| - // The {lhs} is a Primitive and the {rhs} is a JSReceiver.
|
| - // Swapping {lhs} and {rhs} is not observable and doesn't
|
| - // matter for the result, so we can just swap them and use
|
| - // the JSReceiver handling below (for {lhs} being a JSReceiver).
|
| - var_lhs.Bind(rhs);
|
| - var_rhs.Bind(lhs);
|
| - Goto(&loop);
|
| - }
|
| -
|
| - Bind(&if_rhsisnotreceiver);
|
| - {
|
| - // The {rhs} is some other Primitive.
|
| - Goto(&if_notequal);
|
| - }
|
| - }
|
| - }
|
| -
|
| Bind(&if_lhsisreceiver);
|
| {
|
| // Check if the {rhs} is also a JSReceiver.
|
| @@ -7410,10 +7282,6 @@ Node* CodeStubAssembler::StrictEqual(ResultMode mode, Node* lhs, Node* rhs,
|
| // } else {
|
| // return false;
|
| // }
|
| - // } else if (lhs->IsSimd128()) {
|
| - // if (rhs->IsSimd128()) {
|
| - // return %StrictEqual(lhs, rhs);
|
| - // }
|
| // } else {
|
| // return false;
|
| // }
|
| @@ -7447,8 +7315,8 @@ Node* CodeStubAssembler::StrictEqual(ResultMode mode, Node* lhs, Node* rhs,
|
|
|
| Bind(&if_notsame);
|
| {
|
| - // The {lhs} and {rhs} reference different objects, yet for Smi, HeapNumber,
|
| - // String and Simd128Value they can still be considered equal.
|
| + // The {lhs} and {rhs} reference different objects, yet for Smi, HeapNumber
|
| + // and String they can still be considered equal.
|
|
|
| // Check if {lhs} is a Smi or a HeapObject.
|
| Label if_lhsissmi(this), if_lhsisnotsmi(this);
|
| @@ -7547,26 +7415,7 @@ Node* CodeStubAssembler::StrictEqual(ResultMode mode, Node* lhs, Node* rhs,
|
| }
|
|
|
| Bind(&if_lhsisnotstring);
|
| - {
|
| - // Check if {lhs} is a Simd128Value.
|
| - Label if_lhsissimd128value(this), if_lhsisnotsimd128value(this);
|
| - Branch(Word32Equal(lhs_instance_type,
|
| - Int32Constant(SIMD128_VALUE_TYPE)),
|
| - &if_lhsissimd128value, &if_lhsisnotsimd128value);
|
| -
|
| - Bind(&if_lhsissimd128value);
|
| - {
|
| - // Load the map of {rhs}.
|
| - Node* rhs_map = LoadMap(rhs);
|
| -
|
| - // Check if {rhs} is also a Simd128Value that is equal to {lhs}.
|
| - GenerateEqual_Simd128Value_HeapObject(
|
| - this, lhs, lhs_map, rhs, rhs_map, &if_equal, &if_notequal);
|
| - }
|
| -
|
| - Bind(&if_lhsisnotsimd128value);
|
| - Goto(&if_notequal);
|
| - }
|
| + Goto(&if_notequal);
|
| }
|
| }
|
| }
|
| @@ -7873,13 +7722,6 @@ Node* CodeStubAssembler::Typeof(Node* value, Node* context) {
|
|
|
| GotoIf(IsStringInstanceType(instance_type), &return_string);
|
|
|
| -#define SIMD128_BRANCH(TYPE, Type, type, lane_count, lane_type) \
|
| - Label return_##type(this); \
|
| - Node* type##_map = HeapConstant(factory()->type##_map()); \
|
| - GotoIf(WordEqual(map, type##_map), &return_##type);
|
| - SIMD128_TYPES(SIMD128_BRANCH)
|
| -#undef SIMD128_BRANCH
|
| -
|
| CSA_ASSERT(this, Word32Equal(instance_type, Int32Constant(SYMBOL_TYPE)));
|
| result_var.Bind(HeapConstant(isolate()->factory()->symbol_string()));
|
| Goto(&return_result);
|
| @@ -7921,15 +7763,6 @@ Node* CodeStubAssembler::Typeof(Node* value, Node* context) {
|
| Goto(&return_result);
|
| }
|
|
|
| -#define SIMD128_BIND_RETURN(TYPE, Type, type, lane_count, lane_type) \
|
| - Bind(&return_##type); \
|
| - { \
|
| - result_var.Bind(HeapConstant(isolate()->factory()->type##_string())); \
|
| - Goto(&return_result); \
|
| - }
|
| - SIMD128_TYPES(SIMD128_BIND_RETURN)
|
| -#undef SIMD128_BIND_RETURN
|
| -
|
| Bind(&return_result);
|
| return result_var.value();
|
| }
|
|
|