Chromium Code Reviews| Index: src/builtins/builtins-array.cc |
| diff --git a/src/builtins/builtins-array.cc b/src/builtins/builtins-array.cc |
| index 09ee4cc2e2d741cd1fc22f0187552fa189cb7cd6..0e5bd51a460de34c6bd48655e6835ccea27cf153 100644 |
| --- a/src/builtins/builtins-array.cc |
| +++ b/src/builtins/builtins-array.cc |
| @@ -1269,24 +1269,24 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| Node* start_from = assembler->Parameter(2); |
| Node* context = assembler->Parameter(3 + 2); |
| - Node* int32_zero = assembler->Int32Constant(0); |
| - Node* int32_one = assembler->Int32Constant(1); |
| + Node* intptr_zero = assembler->IntPtrConstant(0); |
| + Node* intptr_one = assembler->IntPtrConstant(1); |
| Node* the_hole = assembler->TheHoleConstant(); |
| Node* undefined = assembler->UndefinedConstant(); |
| Node* heap_number_map = assembler->HeapNumberMapConstant(); |
| - Variable len_var(assembler, MachineRepresentation::kWord32), |
| - index_var(assembler, MachineRepresentation::kWord32), |
| - start_from_var(assembler, MachineRepresentation::kWord32); |
| + Variable len_var(assembler, MachineType::PointerRepresentation()), |
| + index_var(assembler, MachineType::PointerRepresentation()), |
| + start_from_var(assembler, MachineType::PointerRepresentation()); |
| Label init_k(assembler), return_true(assembler), return_false(assembler), |
| call_runtime(assembler); |
| Label init_len(assembler); |
| - index_var.Bind(int32_zero); |
| - len_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| + len_var.Bind(intptr_zero); |
| // Take slow path if not a JSArray, if retrieving elements requires |
| // traversing prototype, or if access checks are required. |
| @@ -1299,7 +1299,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| assembler->GotoUnless(assembler->WordIsSmi(len), &call_runtime); |
| len_var.Bind(assembler->SmiToWord(len)); |
| - assembler->Branch(assembler->Word32Equal(len_var.value(), int32_zero), |
| + assembler->Branch(assembler->WordEqual(len_var.value(), intptr_zero), |
| &return_false, &init_k); |
| } |
| @@ -1315,23 +1315,25 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| assembler->Bind(&init_k_smi); |
| { |
| - start_from_var.Bind(assembler->SmiToWord32(tagged_n)); |
| + start_from_var.Bind(assembler->SmiUntag(tagged_n)); |
| assembler->Goto(&init_k_n); |
| } |
| assembler->Bind(&init_k_heap_num); |
| { |
| Label do_return_false(assembler); |
| - Node* fp_len = assembler->ChangeInt32ToFloat64(len_var.value()); |
| + // This round is lossless for all valid lengths. |
|
Igor Sheludko
2016/09/08 11:07:51
This is not trivial.
|
| + Node* fp_len = assembler->RoundIntPtrToFloat64(len_var.value()); |
| Node* fp_n = assembler->LoadHeapNumberValue(tagged_n); |
| assembler->GotoIf(assembler->Float64GreaterThanOrEqual(fp_n, fp_len), |
| &do_return_false); |
| - start_from_var.Bind(assembler->TruncateFloat64ToWord32(fp_n)); |
| + start_from_var.Bind(assembler->ChangeInt32ToIntPtr( |
| + assembler->TruncateFloat64ToWord32(fp_n))); |
| assembler->Goto(&init_k_n); |
| assembler->Bind(&do_return_false); |
| { |
| - index_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| assembler->Goto(&return_false); |
| } |
| } |
| @@ -1340,7 +1342,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label if_positive(assembler), if_negative(assembler), done(assembler); |
| assembler->Branch( |
| - assembler->Int32LessThan(start_from_var.value(), int32_zero), |
| + assembler->IntPtrLessThan(start_from_var.value(), intptr_zero), |
| &if_negative, &if_positive); |
| assembler->Bind(&if_positive); |
| @@ -1352,15 +1354,15 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| assembler->Bind(&if_negative); |
| { |
| index_var.Bind( |
| - assembler->Int32Add(len_var.value(), start_from_var.value())); |
| + assembler->IntPtrAdd(len_var.value(), start_from_var.value())); |
| assembler->Branch( |
| - assembler->Int32LessThan(index_var.value(), int32_zero), |
| + assembler->IntPtrLessThan(index_var.value(), intptr_zero), |
| &init_k_zero, &done); |
| } |
| assembler->Bind(&init_k_zero); |
| { |
| - index_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| assembler->Goto(&done); |
| } |
| @@ -1416,38 +1418,38 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| search_type, assembler->Int32Constant(FIRST_NONSTRING_TYPE)), |
| &string_loop); |
| assembler->GotoIf( |
| - assembler->WordEqual(search_type, |
| - assembler->Int32Constant(SIMD128_VALUE_TYPE)), |
| + assembler->Word32Equal(search_type, |
| + assembler->Int32Constant(SIMD128_VALUE_TYPE)), |
| &simd_loop); |
| assembler->Goto(&ident_loop); |
| assembler->Bind(&ident_loop); |
| { |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordEqual(element_k, search_element), |
| &return_true); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&ident_loop); |
| } |
| assembler->Bind(&undef_loop); |
| { |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordEqual(element_k, undefined), |
| &return_true); |
| assembler->GotoIf(assembler->WordEqual(element_k, the_hole), |
| &return_true); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&undef_loop); |
| } |
| @@ -1462,10 +1464,10 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler), not_smi(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoUnless(assembler->WordIsSmi(element_k), ¬_smi); |
| assembler->Branch( |
| assembler->Float64Equal(search_num.value(), |
| @@ -1481,7 +1483,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| @@ -1489,10 +1491,10 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordIsSmi(element_k), &continue_loop); |
| assembler->GotoIf(assembler->WordNotEqual(assembler->LoadMap(element_k), |
| heap_number_map), |
| @@ -1502,7 +1504,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&nan_loop); |
| } |
| } |
| @@ -1511,10 +1513,10 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordIsSmi(element_k), &continue_loop); |
| assembler->GotoUnless(assembler->Int32LessThan( |
| assembler->LoadInstanceType(element_k), |
| @@ -1530,7 +1532,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&string_loop); |
| } |
| @@ -1543,11 +1545,11 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| assembler->Goto(&loop_body); |
| assembler->Bind(&loop_body); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordIsSmi(element_k), &continue_loop); |
| Node* map_k = assembler->LoadMap(element_k); |
| @@ -1555,7 +1557,7 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&loop_body); |
| } |
| } |
| @@ -1585,14 +1587,15 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64Equal(element_k, search_num.value(), |
| &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| @@ -1601,13 +1604,14 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64IsNaN(element_k, &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&nan_loop); |
| } |
| } |
| @@ -1639,19 +1643,20 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| if (kPointerSize == kDoubleSize) { |
| Node* element = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Uint64()); |
| + elements, index_var.value(), MachineType::Uint64(), 0, |
| + INTPTR_PARAMETERS); |
| Node* the_hole = assembler->Int64Constant(kHoleNanInt64); |
| assembler->GotoIf(assembler->Word64Equal(element, the_hole), |
| &continue_loop); |
| } else { |
| Node* element_upper = assembler->LoadFixedDoubleArrayElement( |
| elements, index_var.value(), MachineType::Uint32(), |
| - kIeeeDoubleExponentWordOffset); |
| + kIeeeDoubleExponentWordOffset, INTPTR_PARAMETERS); |
| assembler->GotoIf( |
| assembler->Word32Equal(element_upper, |
| assembler->Int32Constant(kHoleNanUpper32)), |
| @@ -1659,11 +1664,12 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| } |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64Equal(element_k, search_num.value(), |
| &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| @@ -1672,19 +1678,20 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| if (kPointerSize == kDoubleSize) { |
| Node* element = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Uint64()); |
| + elements, index_var.value(), MachineType::Uint64(), 0, |
| + INTPTR_PARAMETERS); |
| Node* the_hole = assembler->Int64Constant(kHoleNanInt64); |
| assembler->GotoIf(assembler->Word64Equal(element, the_hole), |
| &continue_loop); |
| } else { |
| Node* element_upper = assembler->LoadFixedDoubleArrayElement( |
| elements, index_var.value(), MachineType::Uint32(), |
| - kIeeeDoubleExponentWordOffset); |
| + kIeeeDoubleExponentWordOffset, INTPTR_PARAMETERS); |
| assembler->GotoIf( |
| assembler->Word32Equal(element_upper, |
| assembler->Int32Constant(kHoleNanUpper32)), |
| @@ -1692,10 +1699,11 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| } |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64IsNaN(element_k, &return_true, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&nan_loop); |
| } |
| @@ -1703,26 +1711,27 @@ void Builtins::Generate_ArrayIncludes(CodeStubAssembler* assembler) { |
| assembler->Bind(&hole_loop); |
| { |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_false); |
| if (kPointerSize == kDoubleSize) { |
| Node* element = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Uint64()); |
| + elements, index_var.value(), MachineType::Uint64(), 0, |
| + INTPTR_PARAMETERS); |
| Node* the_hole = assembler->Int64Constant(kHoleNanInt64); |
| assembler->GotoIf(assembler->Word64Equal(element, the_hole), |
| &return_true); |
| } else { |
| Node* element_upper = assembler->LoadFixedDoubleArrayElement( |
| elements, index_var.value(), MachineType::Uint32(), |
| - kIeeeDoubleExponentWordOffset); |
| + kIeeeDoubleExponentWordOffset, INTPTR_PARAMETERS); |
| assembler->GotoIf( |
| assembler->Word32Equal(element_upper, |
| assembler->Int32Constant(kHoleNanUpper32)), |
| &return_true); |
| } |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&hole_loop); |
| } |
| } |
| @@ -1749,23 +1758,23 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| Node* start_from = assembler->Parameter(2); |
| Node* context = assembler->Parameter(3 + 2); |
| - Node* int32_zero = assembler->Int32Constant(0); |
| - Node* int32_one = assembler->Int32Constant(1); |
| + Node* intptr_zero = assembler->IntPtrConstant(0); |
| + Node* intptr_one = assembler->IntPtrConstant(1); |
| Node* undefined = assembler->UndefinedConstant(); |
| Node* heap_number_map = assembler->HeapNumberMapConstant(); |
| - Variable len_var(assembler, MachineRepresentation::kWord32), |
| - index_var(assembler, MachineRepresentation::kWord32), |
| - start_from_var(assembler, MachineRepresentation::kWord32); |
| + Variable len_var(assembler, MachineType::PointerRepresentation()), |
| + index_var(assembler, MachineType::PointerRepresentation()), |
| + start_from_var(assembler, MachineType::PointerRepresentation()); |
| Label init_k(assembler), return_found(assembler), return_not_found(assembler), |
| call_runtime(assembler); |
| Label init_len(assembler); |
| - index_var.Bind(int32_zero); |
| - len_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| + len_var.Bind(intptr_zero); |
| // Take slow path if not a JSArray, if retrieving elements requires |
| // traversing prototype, or if access checks are required. |
| @@ -1778,7 +1787,7 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| assembler->GotoUnless(assembler->WordIsSmi(len), &call_runtime); |
| len_var.Bind(assembler->SmiToWord(len)); |
| - assembler->Branch(assembler->Word32Equal(len_var.value(), int32_zero), |
| + assembler->Branch(assembler->WordEqual(len_var.value(), intptr_zero), |
| &return_not_found, &init_k); |
| } |
| @@ -1794,23 +1803,25 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| assembler->Bind(&init_k_smi); |
| { |
| - start_from_var.Bind(assembler->SmiToWord32(tagged_n)); |
| + start_from_var.Bind(assembler->SmiUntag(tagged_n)); |
| assembler->Goto(&init_k_n); |
| } |
| assembler->Bind(&init_k_heap_num); |
| { |
| Label do_return_not_found(assembler); |
| - Node* fp_len = assembler->ChangeInt32ToFloat64(len_var.value()); |
| + // This round is lossless for all valid lengths. |
|
Igor Sheludko
2016/09/08 11:07:51
This is not trivial.
|
| + Node* fp_len = assembler->RoundIntPtrToFloat64(len_var.value()); |
| Node* fp_n = assembler->LoadHeapNumberValue(tagged_n); |
| assembler->GotoIf(assembler->Float64GreaterThanOrEqual(fp_n, fp_len), |
| &do_return_not_found); |
| - start_from_var.Bind(assembler->TruncateFloat64ToWord32(fp_n)); |
| + start_from_var.Bind(assembler->ChangeInt32ToIntPtr( |
| + assembler->TruncateFloat64ToWord32(fp_n))); |
| assembler->Goto(&init_k_n); |
| assembler->Bind(&do_return_not_found); |
| { |
| - index_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| assembler->Goto(&return_not_found); |
| } |
| } |
| @@ -1819,7 +1830,7 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| { |
| Label if_positive(assembler), if_negative(assembler), done(assembler); |
| assembler->Branch( |
| - assembler->Int32LessThan(start_from_var.value(), int32_zero), |
| + assembler->IntPtrLessThan(start_from_var.value(), intptr_zero), |
| &if_negative, &if_positive); |
| assembler->Bind(&if_positive); |
| @@ -1831,15 +1842,15 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| assembler->Bind(&if_negative); |
| { |
| index_var.Bind( |
| - assembler->Int32Add(len_var.value(), start_from_var.value())); |
| + assembler->IntPtrAdd(len_var.value(), start_from_var.value())); |
| assembler->Branch( |
| - assembler->Int32LessThan(index_var.value(), int32_zero), |
| + assembler->IntPtrLessThan(index_var.value(), intptr_zero), |
| &init_k_zero, &done); |
| } |
| assembler->Bind(&init_k_zero); |
| { |
| - index_var.Bind(int32_zero); |
| + index_var.Bind(intptr_zero); |
| assembler->Goto(&done); |
| } |
| @@ -1895,36 +1906,36 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| search_type, assembler->Int32Constant(FIRST_NONSTRING_TYPE)), |
| &string_loop); |
| assembler->GotoIf( |
| - assembler->WordEqual(search_type, |
| - assembler->Int32Constant(SIMD128_VALUE_TYPE)), |
| + assembler->Word32Equal(search_type, |
| + assembler->Int32Constant(SIMD128_VALUE_TYPE)), |
| &simd_loop); |
| assembler->Goto(&ident_loop); |
| assembler->Bind(&ident_loop); |
| { |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordEqual(element_k, search_element), |
| &return_found); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&ident_loop); |
| } |
| assembler->Bind(&undef_loop); |
| { |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordEqual(element_k, undefined), |
| &return_found); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&undef_loop); |
| } |
| @@ -1938,10 +1949,10 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler), not_smi(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoUnless(assembler->WordIsSmi(element_k), ¬_smi); |
| assembler->Branch( |
| assembler->Float64Equal(search_num.value(), |
| @@ -1957,7 +1968,7 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| &return_found, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| } |
| @@ -1966,10 +1977,10 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordIsSmi(element_k), &continue_loop); |
| assembler->GotoUnless(assembler->Int32LessThan( |
| assembler->LoadInstanceType(element_k), |
| @@ -1985,7 +1996,7 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| &return_found, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&string_loop); |
| } |
| @@ -1998,11 +2009,11 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| assembler->Goto(&loop_body); |
| assembler->Bind(&loop_body); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| - Node* element_k = |
| - assembler->LoadFixedArrayElement(elements, index_var.value()); |
| + Node* element_k = assembler->LoadFixedArrayElement( |
| + elements, index_var.value(), 0, INTPTR_PARAMETERS); |
| assembler->GotoIf(assembler->WordIsSmi(element_k), &continue_loop); |
| Node* map_k = assembler->LoadMap(element_k); |
| @@ -2010,7 +2021,7 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| &return_found, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(&loop_body); |
| } |
| } |
| @@ -2039,14 +2050,15 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64Equal(element_k, search_num.value(), |
| &return_found, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| } |
| @@ -2075,19 +2087,20 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| { |
| Label continue_loop(assembler); |
| assembler->GotoUnless( |
| - assembler->Int32LessThan(index_var.value(), len_var.value()), |
| + assembler->UintPtrLessThan(index_var.value(), len_var.value()), |
| &return_not_found); |
| if (kPointerSize == kDoubleSize) { |
| Node* element = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Uint64()); |
| + elements, index_var.value(), MachineType::Uint64(), 0, |
| + INTPTR_PARAMETERS); |
| Node* the_hole = assembler->Int64Constant(kHoleNanInt64); |
| assembler->GotoIf(assembler->Word64Equal(element, the_hole), |
| &continue_loop); |
| } else { |
| Node* element_upper = assembler->LoadFixedDoubleArrayElement( |
| elements, index_var.value(), MachineType::Uint32(), |
| - kIeeeDoubleExponentWordOffset); |
| + kIeeeDoubleExponentWordOffset, INTPTR_PARAMETERS); |
| assembler->GotoIf( |
| assembler->Word32Equal(element_upper, |
| assembler->Int32Constant(kHoleNanUpper32)), |
| @@ -2095,11 +2108,12 @@ void Builtins::Generate_ArrayIndexOf(CodeStubAssembler* assembler) { |
| } |
| Node* element_k = assembler->LoadFixedDoubleArrayElement( |
| - elements, index_var.value(), MachineType::Float64()); |
| + elements, index_var.value(), MachineType::Float64(), 0, |
| + INTPTR_PARAMETERS); |
| assembler->BranchIfFloat64Equal(element_k, search_num.value(), |
| &return_found, &continue_loop); |
| assembler->Bind(&continue_loop); |
| - index_var.Bind(assembler->Int32Add(index_var.value(), int32_one)); |
| + index_var.Bind(assembler->IntPtrAdd(index_var.value(), intptr_one)); |
| assembler->Goto(¬_nan_loop); |
| } |
| } |