OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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.h" | 5 #include "src/builtins/builtins.h" |
6 #include "src/builtins/builtins-utils.h" | 6 #include "src/builtins/builtins-utils.h" |
7 | 7 |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/contexts.h" | 9 #include "src/contexts.h" |
10 #include "src/elements.h" | 10 #include "src/elements.h" |
(...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 Node* array = assembler.Parameter(0); | 1416 Node* array = assembler.Parameter(0); |
1417 Node* search_element = assembler.Parameter(1); | 1417 Node* search_element = assembler.Parameter(1); |
1418 Node* start_from = assembler.Parameter(2); | 1418 Node* start_from = assembler.Parameter(2); |
1419 Node* context = assembler.Parameter(3 + 2); | 1419 Node* context = assembler.Parameter(3 + 2); |
1420 | 1420 |
1421 Node* intptr_zero = assembler.IntPtrConstant(0); | 1421 Node* intptr_zero = assembler.IntPtrConstant(0); |
1422 Node* intptr_one = assembler.IntPtrConstant(1); | 1422 Node* intptr_one = assembler.IntPtrConstant(1); |
1423 | 1423 |
1424 Node* the_hole = assembler.TheHoleConstant(); | 1424 Node* the_hole = assembler.TheHoleConstant(); |
1425 Node* undefined = assembler.UndefinedConstant(); | 1425 Node* undefined = assembler.UndefinedConstant(); |
1426 Node* heap_number_map = assembler.HeapNumberMapConstant(); | |
1427 | 1426 |
1428 Variable len_var(&assembler, MachineType::PointerRepresentation()), | 1427 Variable len_var(&assembler, MachineType::PointerRepresentation()), |
1429 index_var(&assembler, MachineType::PointerRepresentation()), | 1428 index_var(&assembler, MachineType::PointerRepresentation()), |
1430 start_from_var(&assembler, MachineType::PointerRepresentation()); | 1429 start_from_var(&assembler, MachineType::PointerRepresentation()); |
1431 | 1430 |
1432 Label init_k(&assembler), return_true(&assembler), return_false(&assembler), | 1431 Label init_k(&assembler), return_true(&assembler), return_false(&assembler), |
1433 call_runtime(&assembler); | 1432 call_runtime(&assembler); |
1434 | 1433 |
1435 Label init_len(&assembler); | 1434 Label init_len(&assembler); |
1436 | 1435 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 not_heap_num(&assembler); | 1546 not_heap_num(&assembler); |
1548 | 1547 |
1549 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), ¬_smi); | 1548 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), ¬_smi); |
1550 search_num.Bind(assembler.SmiToFloat64(search_element)); | 1549 search_num.Bind(assembler.SmiToFloat64(search_element)); |
1551 assembler.Goto(&heap_num_loop); | 1550 assembler.Goto(&heap_num_loop); |
1552 | 1551 |
1553 assembler.Bind(¬_smi); | 1552 assembler.Bind(¬_smi); |
1554 assembler.GotoIf(assembler.WordEqual(search_element, undefined), | 1553 assembler.GotoIf(assembler.WordEqual(search_element, undefined), |
1555 &undef_loop); | 1554 &undef_loop); |
1556 Node* map = assembler.LoadMap(search_element); | 1555 Node* map = assembler.LoadMap(search_element); |
1557 assembler.GotoIf(assembler.WordNotEqual(map, heap_number_map), | 1556 assembler.GotoUnless(assembler.IsHeapNumberMap(map), ¬_heap_num); |
1558 ¬_heap_num); | |
1559 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 1557 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
1560 assembler.Goto(&heap_num_loop); | 1558 assembler.Goto(&heap_num_loop); |
1561 | 1559 |
1562 assembler.Bind(¬_heap_num); | 1560 assembler.Bind(¬_heap_num); |
1563 Node* search_type = assembler.LoadMapInstanceType(map); | 1561 Node* search_type = assembler.LoadMapInstanceType(map); |
1564 assembler.GotoIf(assembler.IsStringInstanceType(search_type), &string_loop); | 1562 assembler.GotoIf(assembler.IsStringInstanceType(search_type), &string_loop); |
1565 assembler.GotoIf( | 1563 assembler.GotoIf( |
1566 assembler.Word32Equal(search_type, | 1564 assembler.Word32Equal(search_type, |
1567 assembler.Int32Constant(SIMD128_VALUE_TYPE)), | 1565 assembler.Int32Constant(SIMD128_VALUE_TYPE)), |
1568 &simd_loop); | 1566 &simd_loop); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1612 Node* element_k = assembler.LoadFixedArrayElement( | 1610 Node* element_k = assembler.LoadFixedArrayElement( |
1613 elements, index_var.value(), 0, | 1611 elements, index_var.value(), 0, |
1614 CodeStubAssembler::INTPTR_PARAMETERS); | 1612 CodeStubAssembler::INTPTR_PARAMETERS); |
1615 assembler.GotoUnless(assembler.TaggedIsSmi(element_k), ¬_smi); | 1613 assembler.GotoUnless(assembler.TaggedIsSmi(element_k), ¬_smi); |
1616 assembler.Branch( | 1614 assembler.Branch( |
1617 assembler.Float64Equal(search_num.value(), | 1615 assembler.Float64Equal(search_num.value(), |
1618 assembler.SmiToFloat64(element_k)), | 1616 assembler.SmiToFloat64(element_k)), |
1619 &return_true, &continue_loop); | 1617 &return_true, &continue_loop); |
1620 | 1618 |
1621 assembler.Bind(¬_smi); | 1619 assembler.Bind(¬_smi); |
1622 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(element_k), | 1620 assembler.GotoUnless( |
1623 heap_number_map), | 1621 assembler.IsHeapNumberMap(assembler.LoadMap(element_k)), |
1624 &continue_loop); | 1622 &continue_loop); |
1625 assembler.Branch( | 1623 assembler.Branch( |
1626 assembler.Float64Equal(search_num.value(), | 1624 assembler.Float64Equal(search_num.value(), |
1627 assembler.LoadHeapNumberValue(element_k)), | 1625 assembler.LoadHeapNumberValue(element_k)), |
1628 &return_true, &continue_loop); | 1626 &return_true, &continue_loop); |
1629 | 1627 |
1630 assembler.Bind(&continue_loop); | 1628 assembler.Bind(&continue_loop); |
1631 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); | 1629 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); |
1632 assembler.Goto(¬_nan_loop); | 1630 assembler.Goto(¬_nan_loop); |
1633 } | 1631 } |
1634 | 1632 |
1635 assembler.Bind(&nan_loop); | 1633 assembler.Bind(&nan_loop); |
1636 { | 1634 { |
1637 Label continue_loop(&assembler); | 1635 Label continue_loop(&assembler); |
1638 assembler.GotoUnless( | 1636 assembler.GotoUnless( |
1639 assembler.UintPtrLessThan(index_var.value(), len_var.value()), | 1637 assembler.UintPtrLessThan(index_var.value(), len_var.value()), |
1640 &return_false); | 1638 &return_false); |
1641 Node* element_k = assembler.LoadFixedArrayElement( | 1639 Node* element_k = assembler.LoadFixedArrayElement( |
1642 elements, index_var.value(), 0, | 1640 elements, index_var.value(), 0, |
1643 CodeStubAssembler::INTPTR_PARAMETERS); | 1641 CodeStubAssembler::INTPTR_PARAMETERS); |
1644 assembler.GotoIf(assembler.TaggedIsSmi(element_k), &continue_loop); | 1642 assembler.GotoIf(assembler.TaggedIsSmi(element_k), &continue_loop); |
1645 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(element_k), | 1643 assembler.GotoUnless( |
1646 heap_number_map), | 1644 assembler.IsHeapNumberMap(assembler.LoadMap(element_k)), |
1647 &continue_loop); | 1645 &continue_loop); |
1648 assembler.BranchIfFloat64IsNaN(assembler.LoadHeapNumberValue(element_k), | 1646 assembler.BranchIfFloat64IsNaN(assembler.LoadHeapNumberValue(element_k), |
1649 &return_true, &continue_loop); | 1647 &return_true, &continue_loop); |
1650 | 1648 |
1651 assembler.Bind(&continue_loop); | 1649 assembler.Bind(&continue_loop); |
1652 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); | 1650 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); |
1653 assembler.Goto(&nan_loop); | 1651 assembler.Goto(&nan_loop); |
1654 } | 1652 } |
1655 } | 1653 } |
1656 | 1654 |
1657 assembler.Bind(&string_loop); | 1655 assembler.Bind(&string_loop); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 Label nan_loop(&assembler, &index_var), | 1709 Label nan_loop(&assembler, &index_var), |
1712 not_nan_loop(&assembler, &index_var), hole_loop(&assembler, &index_var), | 1710 not_nan_loop(&assembler, &index_var), hole_loop(&assembler, &index_var), |
1713 search_notnan(&assembler); | 1711 search_notnan(&assembler); |
1714 Variable search_num(&assembler, MachineRepresentation::kFloat64); | 1712 Variable search_num(&assembler, MachineRepresentation::kFloat64); |
1715 | 1713 |
1716 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); | 1714 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); |
1717 search_num.Bind(assembler.SmiToFloat64(search_element)); | 1715 search_num.Bind(assembler.SmiToFloat64(search_element)); |
1718 assembler.Goto(¬_nan_loop); | 1716 assembler.Goto(¬_nan_loop); |
1719 | 1717 |
1720 assembler.Bind(&search_notnan); | 1718 assembler.Bind(&search_notnan); |
1721 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(search_element), | 1719 assembler.GotoUnless( |
1722 heap_number_map), | 1720 assembler.IsHeapNumberMap(assembler.LoadMap(search_element)), |
1723 &return_false); | 1721 &return_false); |
1724 | 1722 |
1725 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 1723 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
1726 | 1724 |
1727 assembler.BranchIfFloat64IsNaN(search_num.value(), &nan_loop, | 1725 assembler.BranchIfFloat64IsNaN(search_num.value(), &nan_loop, |
1728 ¬_nan_loop); | 1726 ¬_nan_loop); |
1729 | 1727 |
1730 // Search for HeapNumber | 1728 // Search for HeapNumber |
1731 assembler.Bind(¬_nan_loop); | 1729 assembler.Bind(¬_nan_loop); |
1732 { | 1730 { |
1733 Label continue_loop(&assembler); | 1731 Label continue_loop(&assembler); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 search_notnan(&assembler); | 1766 search_notnan(&assembler); |
1769 Variable search_num(&assembler, MachineRepresentation::kFloat64); | 1767 Variable search_num(&assembler, MachineRepresentation::kFloat64); |
1770 | 1768 |
1771 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); | 1769 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); |
1772 search_num.Bind(assembler.SmiToFloat64(search_element)); | 1770 search_num.Bind(assembler.SmiToFloat64(search_element)); |
1773 assembler.Goto(¬_nan_loop); | 1771 assembler.Goto(¬_nan_loop); |
1774 | 1772 |
1775 assembler.Bind(&search_notnan); | 1773 assembler.Bind(&search_notnan); |
1776 assembler.GotoIf(assembler.WordEqual(search_element, undefined), | 1774 assembler.GotoIf(assembler.WordEqual(search_element, undefined), |
1777 &hole_loop); | 1775 &hole_loop); |
1778 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(search_element), | 1776 assembler.GotoUnless( |
1779 heap_number_map), | 1777 assembler.IsHeapNumberMap(assembler.LoadMap(search_element)), |
1780 &return_false); | 1778 &return_false); |
1781 | 1779 |
1782 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 1780 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
1783 | 1781 |
1784 assembler.BranchIfFloat64IsNaN(search_num.value(), &nan_loop, | 1782 assembler.BranchIfFloat64IsNaN(search_num.value(), &nan_loop, |
1785 ¬_nan_loop); | 1783 ¬_nan_loop); |
1786 | 1784 |
1787 // Search for HeapNumber | 1785 // Search for HeapNumber |
1788 assembler.Bind(¬_nan_loop); | 1786 assembler.Bind(¬_nan_loop); |
1789 { | 1787 { |
1790 Label continue_loop(&assembler); | 1788 Label continue_loop(&assembler); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1859 | 1857 |
1860 Node* array = assembler.Parameter(0); | 1858 Node* array = assembler.Parameter(0); |
1861 Node* search_element = assembler.Parameter(1); | 1859 Node* search_element = assembler.Parameter(1); |
1862 Node* start_from = assembler.Parameter(2); | 1860 Node* start_from = assembler.Parameter(2); |
1863 Node* context = assembler.Parameter(3 + 2); | 1861 Node* context = assembler.Parameter(3 + 2); |
1864 | 1862 |
1865 Node* intptr_zero = assembler.IntPtrConstant(0); | 1863 Node* intptr_zero = assembler.IntPtrConstant(0); |
1866 Node* intptr_one = assembler.IntPtrConstant(1); | 1864 Node* intptr_one = assembler.IntPtrConstant(1); |
1867 | 1865 |
1868 Node* undefined = assembler.UndefinedConstant(); | 1866 Node* undefined = assembler.UndefinedConstant(); |
1869 Node* heap_number_map = assembler.HeapNumberMapConstant(); | |
1870 | 1867 |
1871 Variable len_var(&assembler, MachineType::PointerRepresentation()), | 1868 Variable len_var(&assembler, MachineType::PointerRepresentation()), |
1872 index_var(&assembler, MachineType::PointerRepresentation()), | 1869 index_var(&assembler, MachineType::PointerRepresentation()), |
1873 start_from_var(&assembler, MachineType::PointerRepresentation()); | 1870 start_from_var(&assembler, MachineType::PointerRepresentation()); |
1874 | 1871 |
1875 Label init_k(&assembler), return_found(&assembler), | 1872 Label init_k(&assembler), return_found(&assembler), |
1876 return_not_found(&assembler), call_runtime(&assembler); | 1873 return_not_found(&assembler), call_runtime(&assembler); |
1877 | 1874 |
1878 Label init_len(&assembler); | 1875 Label init_len(&assembler); |
1879 | 1876 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1990 not_heap_num(&assembler); | 1987 not_heap_num(&assembler); |
1991 | 1988 |
1992 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), ¬_smi); | 1989 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), ¬_smi); |
1993 search_num.Bind(assembler.SmiToFloat64(search_element)); | 1990 search_num.Bind(assembler.SmiToFloat64(search_element)); |
1994 assembler.Goto(&heap_num_loop); | 1991 assembler.Goto(&heap_num_loop); |
1995 | 1992 |
1996 assembler.Bind(¬_smi); | 1993 assembler.Bind(¬_smi); |
1997 assembler.GotoIf(assembler.WordEqual(search_element, undefined), | 1994 assembler.GotoIf(assembler.WordEqual(search_element, undefined), |
1998 &undef_loop); | 1995 &undef_loop); |
1999 Node* map = assembler.LoadMap(search_element); | 1996 Node* map = assembler.LoadMap(search_element); |
2000 assembler.GotoIf(assembler.WordNotEqual(map, heap_number_map), | 1997 assembler.GotoUnless(assembler.IsHeapNumberMap(map), ¬_heap_num); |
2001 ¬_heap_num); | |
2002 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 1998 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
2003 assembler.Goto(&heap_num_loop); | 1999 assembler.Goto(&heap_num_loop); |
2004 | 2000 |
2005 assembler.Bind(¬_heap_num); | 2001 assembler.Bind(¬_heap_num); |
2006 Node* search_type = assembler.LoadMapInstanceType(map); | 2002 Node* search_type = assembler.LoadMapInstanceType(map); |
2007 assembler.GotoIf(assembler.IsStringInstanceType(search_type), &string_loop); | 2003 assembler.GotoIf(assembler.IsStringInstanceType(search_type), &string_loop); |
2008 assembler.GotoIf( | 2004 assembler.GotoIf( |
2009 assembler.Word32Equal(search_type, | 2005 assembler.Word32Equal(search_type, |
2010 assembler.Int32Constant(SIMD128_VALUE_TYPE)), | 2006 assembler.Int32Constant(SIMD128_VALUE_TYPE)), |
2011 &simd_loop); | 2007 &simd_loop); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2054 Node* element_k = assembler.LoadFixedArrayElement( | 2050 Node* element_k = assembler.LoadFixedArrayElement( |
2055 elements, index_var.value(), 0, | 2051 elements, index_var.value(), 0, |
2056 CodeStubAssembler::INTPTR_PARAMETERS); | 2052 CodeStubAssembler::INTPTR_PARAMETERS); |
2057 assembler.GotoUnless(assembler.TaggedIsSmi(element_k), ¬_smi); | 2053 assembler.GotoUnless(assembler.TaggedIsSmi(element_k), ¬_smi); |
2058 assembler.Branch( | 2054 assembler.Branch( |
2059 assembler.Float64Equal(search_num.value(), | 2055 assembler.Float64Equal(search_num.value(), |
2060 assembler.SmiToFloat64(element_k)), | 2056 assembler.SmiToFloat64(element_k)), |
2061 &return_found, &continue_loop); | 2057 &return_found, &continue_loop); |
2062 | 2058 |
2063 assembler.Bind(¬_smi); | 2059 assembler.Bind(¬_smi); |
2064 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(element_k), | 2060 assembler.GotoUnless( |
2065 heap_number_map), | 2061 assembler.IsHeapNumberMap(assembler.LoadMap(element_k)), |
2066 &continue_loop); | 2062 &continue_loop); |
2067 assembler.Branch( | 2063 assembler.Branch( |
2068 assembler.Float64Equal(search_num.value(), | 2064 assembler.Float64Equal(search_num.value(), |
2069 assembler.LoadHeapNumberValue(element_k)), | 2065 assembler.LoadHeapNumberValue(element_k)), |
2070 &return_found, &continue_loop); | 2066 &return_found, &continue_loop); |
2071 | 2067 |
2072 assembler.Bind(&continue_loop); | 2068 assembler.Bind(&continue_loop); |
2073 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); | 2069 index_var.Bind(assembler.IntPtrAdd(index_var.value(), intptr_one)); |
2074 assembler.Goto(¬_nan_loop); | 2070 assembler.Goto(¬_nan_loop); |
2075 } | 2071 } |
2076 } | 2072 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2130 assembler.Bind(&if_packed_doubles); | 2126 assembler.Bind(&if_packed_doubles); |
2131 { | 2127 { |
2132 Label not_nan_loop(&assembler, &index_var), search_notnan(&assembler); | 2128 Label not_nan_loop(&assembler, &index_var), search_notnan(&assembler); |
2133 Variable search_num(&assembler, MachineRepresentation::kFloat64); | 2129 Variable search_num(&assembler, MachineRepresentation::kFloat64); |
2134 | 2130 |
2135 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); | 2131 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); |
2136 search_num.Bind(assembler.SmiToFloat64(search_element)); | 2132 search_num.Bind(assembler.SmiToFloat64(search_element)); |
2137 assembler.Goto(¬_nan_loop); | 2133 assembler.Goto(¬_nan_loop); |
2138 | 2134 |
2139 assembler.Bind(&search_notnan); | 2135 assembler.Bind(&search_notnan); |
2140 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(search_element), | 2136 assembler.GotoUnless( |
2141 heap_number_map), | 2137 assembler.IsHeapNumberMap(assembler.LoadMap(search_element)), |
2142 &return_not_found); | 2138 &return_not_found); |
2143 | 2139 |
2144 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 2140 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
2145 | 2141 |
2146 assembler.BranchIfFloat64IsNaN(search_num.value(), &return_not_found, | 2142 assembler.BranchIfFloat64IsNaN(search_num.value(), &return_not_found, |
2147 ¬_nan_loop); | 2143 ¬_nan_loop); |
2148 | 2144 |
2149 // Search for HeapNumber | 2145 // Search for HeapNumber |
2150 assembler.Bind(¬_nan_loop); | 2146 assembler.Bind(¬_nan_loop); |
2151 { | 2147 { |
2152 Label continue_loop(&assembler); | 2148 Label continue_loop(&assembler); |
(...skipping 14 matching lines...) Expand all Loading... |
2167 assembler.Bind(&if_holey_doubles); | 2163 assembler.Bind(&if_holey_doubles); |
2168 { | 2164 { |
2169 Label not_nan_loop(&assembler, &index_var), search_notnan(&assembler); | 2165 Label not_nan_loop(&assembler, &index_var), search_notnan(&assembler); |
2170 Variable search_num(&assembler, MachineRepresentation::kFloat64); | 2166 Variable search_num(&assembler, MachineRepresentation::kFloat64); |
2171 | 2167 |
2172 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); | 2168 assembler.GotoUnless(assembler.TaggedIsSmi(search_element), &search_notnan); |
2173 search_num.Bind(assembler.SmiToFloat64(search_element)); | 2169 search_num.Bind(assembler.SmiToFloat64(search_element)); |
2174 assembler.Goto(¬_nan_loop); | 2170 assembler.Goto(¬_nan_loop); |
2175 | 2171 |
2176 assembler.Bind(&search_notnan); | 2172 assembler.Bind(&search_notnan); |
2177 assembler.GotoIf(assembler.WordNotEqual(assembler.LoadMap(search_element), | 2173 assembler.GotoUnless( |
2178 heap_number_map), | 2174 assembler.IsHeapNumberMap(assembler.LoadMap(search_element)), |
2179 &return_not_found); | 2175 &return_not_found); |
2180 | 2176 |
2181 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); | 2177 search_num.Bind(assembler.LoadHeapNumberValue(search_element)); |
2182 | 2178 |
2183 assembler.BranchIfFloat64IsNaN(search_num.value(), &return_not_found, | 2179 assembler.BranchIfFloat64IsNaN(search_num.value(), &return_not_found, |
2184 ¬_nan_loop); | 2180 ¬_nan_loop); |
2185 | 2181 |
2186 // Search for HeapNumber | 2182 // Search for HeapNumber |
2187 assembler.Bind(¬_nan_loop); | 2183 assembler.Bind(¬_nan_loop); |
2188 { | 2184 { |
2189 Label continue_loop(&assembler); | 2185 Label continue_loop(&assembler); |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2762 Runtime::kThrowIncompatibleMethodReceiver, context, | 2758 Runtime::kThrowIncompatibleMethodReceiver, context, |
2763 assembler.HeapConstant(assembler.factory()->NewStringFromAsciiChecked( | 2759 assembler.HeapConstant(assembler.factory()->NewStringFromAsciiChecked( |
2764 "Array Iterator.prototype.next", TENURED)), | 2760 "Array Iterator.prototype.next", TENURED)), |
2765 iterator); | 2761 iterator); |
2766 assembler.Return(result); | 2762 assembler.Return(result); |
2767 } | 2763 } |
2768 } | 2764 } |
2769 | 2765 |
2770 } // namespace internal | 2766 } // namespace internal |
2771 } // namespace v8 | 2767 } // namespace v8 |
OLD | NEW |