| OLD | NEW |
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/builtins/builtins-utils-gen.h" | 5 #include "src/builtins/builtins-utils-gen.h" |
| 6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
| 7 #include "src/code-stub-assembler.h" | 7 #include "src/code-stub-assembler.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1348 Return(BooleanConstant(true)); | 1348 Return(BooleanConstant(true)); |
| 1349 | 1349 |
| 1350 BIND(&return_false); | 1350 BIND(&return_false); |
| 1351 Return(BooleanConstant(false)); | 1351 Return(BooleanConstant(false)); |
| 1352 | 1352 |
| 1353 BIND(&call_runtime); | 1353 BIND(&call_runtime); |
| 1354 Return(CallRuntime(Runtime::kArrayIsArray, context, object)); | 1354 Return(CallRuntime(Runtime::kArrayIsArray, context, object)); |
| 1355 } | 1355 } |
| 1356 | 1356 |
| 1357 TF_BUILTIN(ArrayIncludes, CodeStubAssembler) { | 1357 TF_BUILTIN(ArrayIncludes, CodeStubAssembler) { |
| 1358 Node* const array = Parameter(Descriptor::kReceiver); | 1358 const int kSearchElementArg = 0; |
| 1359 Node* const search_element = Parameter(Descriptor::kSearchElement); | 1359 const int kFromIndexArg = 1; |
| 1360 Node* const start_from = Parameter(Descriptor::kFromIndex); | 1360 |
| 1361 Node* const context = Parameter(Descriptor::kContext); | 1361 Node* argc = |
| 1362 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1363 CodeStubArguments args(this, argc); |
| 1364 |
| 1365 Node* array = args.GetReceiver(); |
| 1366 Node* search_element = |
| 1367 args.GetOptionalArgumentValue(kSearchElementArg, UndefinedConstant()); |
| 1368 Node* start_from = |
| 1369 args.GetOptionalArgumentValue(kFromIndexArg, UndefinedConstant()); |
| 1370 Node* const context = Parameter(BuiltinDescriptor::kContext); |
| 1362 | 1371 |
| 1363 VARIABLE(index_var, MachineType::PointerRepresentation()); | 1372 VARIABLE(index_var, MachineType::PointerRepresentation()); |
| 1364 | 1373 |
| 1365 Label init_k(this), return_true(this), return_false(this), call_runtime(this); | 1374 Label init_k(this), return_true(this), return_false(this), call_runtime(this); |
| 1366 Label init_len(this), select_loop(this); | 1375 Label init_len(this), select_loop(this); |
| 1367 | 1376 |
| 1368 index_var.Bind(IntPtrConstant(0)); | 1377 index_var.Bind(IntPtrConstant(0)); |
| 1369 | 1378 |
| 1370 // Take slow path if not a JSArray, if retrieving elements requires | 1379 // Take slow path if not a JSArray, if retrieving elements requires |
| 1371 // traversing prototype, or if access checks are required. | 1380 // traversing prototype, or if access checks are required. |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 LoadFixedDoubleArrayElement(elements, index_var.value(), | 1635 LoadFixedDoubleArrayElement(elements, index_var.value(), |
| 1627 MachineType::None(), 0, INTPTR_PARAMETERS, | 1636 MachineType::None(), 0, INTPTR_PARAMETERS, |
| 1628 &return_true); | 1637 &return_true); |
| 1629 | 1638 |
| 1630 index_var.Bind(IntPtrAdd(index_var.value(), IntPtrConstant(1))); | 1639 index_var.Bind(IntPtrAdd(index_var.value(), IntPtrConstant(1))); |
| 1631 Goto(&hole_loop); | 1640 Goto(&hole_loop); |
| 1632 } | 1641 } |
| 1633 } | 1642 } |
| 1634 | 1643 |
| 1635 BIND(&return_true); | 1644 BIND(&return_true); |
| 1636 Return(TrueConstant()); | 1645 args.PopAndReturn(TrueConstant()); |
| 1637 | 1646 |
| 1638 BIND(&return_false); | 1647 BIND(&return_false); |
| 1639 Return(FalseConstant()); | 1648 args.PopAndReturn(FalseConstant()); |
| 1640 | 1649 |
| 1641 BIND(&call_runtime); | 1650 BIND(&call_runtime); |
| 1642 Return(CallRuntime(Runtime::kArrayIncludes_Slow, context, array, | 1651 args.PopAndReturn(CallRuntime(Runtime::kArrayIncludes_Slow, context, array, |
| 1643 search_element, start_from)); | 1652 search_element, start_from)); |
| 1644 } | 1653 } |
| 1645 | 1654 |
| 1646 TF_BUILTIN(ArrayIndexOf, CodeStubAssembler) { | 1655 TF_BUILTIN(ArrayIndexOf, CodeStubAssembler) { |
| 1647 Node* array = Parameter(Descriptor::kReceiver); | 1656 const int kSearchElementArg = 0; |
| 1648 Node* search_element = Parameter(Descriptor::kSearchElement); | 1657 const int kFromIndexArg = 1; |
| 1649 Node* start_from = Parameter(Descriptor::kFromIndex); | 1658 |
| 1650 Node* context = Parameter(Descriptor::kContext); | 1659 Node* argc = |
| 1660 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1661 CodeStubArguments args(this, argc); |
| 1662 |
| 1663 Node* array = args.GetReceiver(); |
| 1664 Node* search_element = |
| 1665 args.GetOptionalArgumentValue(kSearchElementArg, UndefinedConstant()); |
| 1666 Node* start_from = |
| 1667 args.GetOptionalArgumentValue(kFromIndexArg, UndefinedConstant()); |
| 1668 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 1651 | 1669 |
| 1652 Node* intptr_zero = IntPtrConstant(0); | 1670 Node* intptr_zero = IntPtrConstant(0); |
| 1653 Node* intptr_one = IntPtrConstant(1); | 1671 Node* intptr_one = IntPtrConstant(1); |
| 1654 | 1672 |
| 1655 VARIABLE(len_var, MachineType::PointerRepresentation()); | 1673 VARIABLE(len_var, MachineType::PointerRepresentation()); |
| 1656 VARIABLE(index_var, MachineType::PointerRepresentation()); | 1674 VARIABLE(index_var, MachineType::PointerRepresentation()); |
| 1657 VARIABLE(start_from_var, MachineType::PointerRepresentation()); | 1675 VARIABLE(start_from_var, MachineType::PointerRepresentation()); |
| 1658 | 1676 |
| 1659 Label init_k(this), return_found(this), return_not_found(this), | 1677 Label init_k(this), return_found(this), return_not_found(this), |
| 1660 call_runtime(this); | 1678 call_runtime(this); |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1891 | 1909 |
| 1892 Branch(Float64Equal(element_k, search_num.value()), &return_found, | 1910 Branch(Float64Equal(element_k, search_num.value()), &return_found, |
| 1893 &continue_loop); | 1911 &continue_loop); |
| 1894 BIND(&continue_loop); | 1912 BIND(&continue_loop); |
| 1895 index_var.Bind(IntPtrAdd(index_var.value(), intptr_one)); | 1913 index_var.Bind(IntPtrAdd(index_var.value(), intptr_one)); |
| 1896 Goto(¬_nan_loop); | 1914 Goto(¬_nan_loop); |
| 1897 } | 1915 } |
| 1898 } | 1916 } |
| 1899 | 1917 |
| 1900 BIND(&return_found); | 1918 BIND(&return_found); |
| 1901 Return(SmiTag(index_var.value())); | 1919 args.PopAndReturn(SmiTag(index_var.value())); |
| 1902 | 1920 |
| 1903 BIND(&return_not_found); | 1921 BIND(&return_not_found); |
| 1904 Return(NumberConstant(-1)); | 1922 args.PopAndReturn(NumberConstant(-1)); |
| 1905 | 1923 |
| 1906 BIND(&call_runtime); | 1924 BIND(&call_runtime); |
| 1907 Return(CallRuntime(Runtime::kArrayIndexOf, context, array, search_element, | 1925 args.PopAndReturn(CallRuntime(Runtime::kArrayIndexOf, context, array, |
| 1908 start_from)); | 1926 search_element, start_from)); |
| 1909 } | 1927 } |
| 1910 | 1928 |
| 1911 class ArrayPrototypeIterationAssembler : public CodeStubAssembler { | 1929 class ArrayPrototypeIterationAssembler : public CodeStubAssembler { |
| 1912 public: | 1930 public: |
| 1913 explicit ArrayPrototypeIterationAssembler(compiler::CodeAssemblerState* state) | 1931 explicit ArrayPrototypeIterationAssembler(compiler::CodeAssemblerState* state) |
| 1914 : CodeStubAssembler(state) {} | 1932 : CodeStubAssembler(state) {} |
| 1915 | 1933 |
| 1916 protected: | 1934 protected: |
| 1917 void Generate_ArrayPrototypeIterationMethod(Node* context, Node* receiver, | 1935 void Generate_ArrayPrototypeIterationMethod(Node* context, Node* receiver, |
| 1918 IterationKind iteration_kind) { | 1936 IterationKind iteration_kind) { |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2382 { | 2400 { |
| 2383 Node* message = SmiConstant(MessageTemplate::kDetachedOperation); | 2401 Node* message = SmiConstant(MessageTemplate::kDetachedOperation); |
| 2384 CallRuntime(Runtime::kThrowTypeError, context, message, | 2402 CallRuntime(Runtime::kThrowTypeError, context, message, |
| 2385 HeapConstant(operation)); | 2403 HeapConstant(operation)); |
| 2386 Unreachable(); | 2404 Unreachable(); |
| 2387 } | 2405 } |
| 2388 } | 2406 } |
| 2389 | 2407 |
| 2390 } // namespace internal | 2408 } // namespace internal |
| 2391 } // namespace v8 | 2409 } // namespace v8 |
| OLD | NEW |