| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/code-stubs.h" | 5 #include "src/code-stubs.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/ast/ast.h" | 9 #include "src/ast/ast.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 1736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1747 // Load the HeapNumber value. | 1747 // Load the HeapNumber value. |
| 1748 var_finc_value.Bind(assembler->LoadHeapNumberValue(value)); | 1748 var_finc_value.Bind(assembler->LoadHeapNumberValue(value)); |
| 1749 assembler->Goto(&do_finc); | 1749 assembler->Goto(&do_finc); |
| 1750 } | 1750 } |
| 1751 | 1751 |
| 1752 assembler->Bind(&if_valuenotnumber); | 1752 assembler->Bind(&if_valuenotnumber); |
| 1753 { | 1753 { |
| 1754 // We do not require an Or with earlier feedback here because once we | 1754 // We do not require an Or with earlier feedback here because once we |
| 1755 // convert the value to a number, we cannot reach this path. We can | 1755 // convert the value to a number, we cannot reach this path. We can |
| 1756 // only reach this path on the first pass when the feedback is kNone. | 1756 // only reach this path on the first pass when the feedback is kNone. |
| 1757 assembler->Assert(assembler->Word32Equal( | 1757 CSA_ASSERT(assembler, |
| 1758 var_type_feedback.value(), | 1758 assembler->Word32Equal(var_type_feedback.value(), |
| 1759 assembler->Int32Constant(BinaryOperationFeedback::kNone))); | 1759 assembler->Int32Constant( |
| 1760 BinaryOperationFeedback::kNone))); |
| 1760 | 1761 |
| 1761 Label if_valueisoddball(assembler), if_valuenotoddball(assembler); | 1762 Label if_valueisoddball(assembler), if_valuenotoddball(assembler); |
| 1762 Node* instance_type = assembler->LoadMapInstanceType(value_map); | 1763 Node* instance_type = assembler->LoadMapInstanceType(value_map); |
| 1763 Node* is_oddball = assembler->Word32Equal( | 1764 Node* is_oddball = assembler->Word32Equal( |
| 1764 instance_type, assembler->Int32Constant(ODDBALL_TYPE)); | 1765 instance_type, assembler->Int32Constant(ODDBALL_TYPE)); |
| 1765 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball); | 1766 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball); |
| 1766 | 1767 |
| 1767 assembler->Bind(&if_valueisoddball); | 1768 assembler->Bind(&if_valueisoddball); |
| 1768 { | 1769 { |
| 1769 // Convert Oddball to Number and check again. | 1770 // Convert Oddball to Number and check again. |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1886 // Load the HeapNumber value. | 1887 // Load the HeapNumber value. |
| 1887 var_fdec_value.Bind(assembler->LoadHeapNumberValue(value)); | 1888 var_fdec_value.Bind(assembler->LoadHeapNumberValue(value)); |
| 1888 assembler->Goto(&do_fdec); | 1889 assembler->Goto(&do_fdec); |
| 1889 } | 1890 } |
| 1890 | 1891 |
| 1891 assembler->Bind(&if_valuenotnumber); | 1892 assembler->Bind(&if_valuenotnumber); |
| 1892 { | 1893 { |
| 1893 // We do not require an Or with earlier feedback here because once we | 1894 // We do not require an Or with earlier feedback here because once we |
| 1894 // convert the value to a number, we cannot reach this path. We can | 1895 // convert the value to a number, we cannot reach this path. We can |
| 1895 // only reach this path on the first pass when the feedback is kNone. | 1896 // only reach this path on the first pass when the feedback is kNone. |
| 1896 assembler->Assert(assembler->Word32Equal( | 1897 CSA_ASSERT(assembler, |
| 1897 var_type_feedback.value(), | 1898 assembler->Word32Equal(var_type_feedback.value(), |
| 1898 assembler->Int32Constant(BinaryOperationFeedback::kNone))); | 1899 assembler->Int32Constant( |
| 1900 BinaryOperationFeedback::kNone))); |
| 1899 | 1901 |
| 1900 Label if_valueisoddball(assembler), if_valuenotoddball(assembler); | 1902 Label if_valueisoddball(assembler), if_valuenotoddball(assembler); |
| 1901 Node* instance_type = assembler->LoadMapInstanceType(value_map); | 1903 Node* instance_type = assembler->LoadMapInstanceType(value_map); |
| 1902 Node* is_oddball = assembler->Word32Equal( | 1904 Node* is_oddball = assembler->Word32Equal( |
| 1903 instance_type, assembler->Int32Constant(ODDBALL_TYPE)); | 1905 instance_type, assembler->Int32Constant(ODDBALL_TYPE)); |
| 1904 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball); | 1906 assembler->Branch(is_oddball, &if_valueisoddball, &if_valuenotoddball); |
| 1905 | 1907 |
| 1906 assembler->Bind(&if_valueisoddball); | 1908 assembler->Bind(&if_valueisoddball); |
| 1907 { | 1909 { |
| 1908 // Convert Oddball to Number and check again. | 1910 // Convert Oddball to Number and check again. |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2564 assembler->GotoIf(is_async, &if_async); | 2566 assembler->GotoIf(is_async, &if_async); |
| 2565 | 2567 |
| 2566 Node* is_class_constructor = assembler->Word32And( | 2568 Node* is_class_constructor = assembler->Word32And( |
| 2567 compiler_hints, | 2569 compiler_hints, |
| 2568 assembler->Int32Constant(FunctionKind::kClassConstructor | 2570 assembler->Int32Constant(FunctionKind::kClassConstructor |
| 2569 << SharedFunctionInfo::kFunctionKindShift)); | 2571 << SharedFunctionInfo::kFunctionKindShift)); |
| 2570 assembler->GotoIf(is_class_constructor, &if_class_constructor); | 2572 assembler->GotoIf(is_class_constructor, &if_class_constructor); |
| 2571 | 2573 |
| 2572 if (FLAG_debug_code) { | 2574 if (FLAG_debug_code) { |
| 2573 // Function must be a function without a prototype. | 2575 // Function must be a function without a prototype. |
| 2574 assembler->Assert(assembler->Word32And( | 2576 CSA_ASSERT(assembler, assembler->Word32And( |
| 2575 compiler_hints, | 2577 compiler_hints, |
| 2576 assembler->Int32Constant((FunctionKind::kAccessorFunction | | 2578 assembler->Int32Constant( |
| 2577 FunctionKind::kArrowFunction | | 2579 (FunctionKind::kAccessorFunction | |
| 2578 FunctionKind::kConciseMethod) | 2580 FunctionKind::kArrowFunction | |
| 2579 << SharedFunctionInfo::kFunctionKindShift))); | 2581 FunctionKind::kConciseMethod) |
| 2582 << SharedFunctionInfo::kFunctionKindShift))); |
| 2580 } | 2583 } |
| 2581 assembler->Goto(&if_function_without_prototype); | 2584 assembler->Goto(&if_function_without_prototype); |
| 2582 | 2585 |
| 2583 assembler->Bind(&if_normal); | 2586 assembler->Bind(&if_normal); |
| 2584 { | 2587 { |
| 2585 map_index.Bind(assembler->Select( | 2588 map_index.Bind(assembler->Select( |
| 2586 is_strict, | 2589 is_strict, |
| 2587 assembler->IntPtrConstant(Context::STRICT_FUNCTION_MAP_INDEX), | 2590 assembler->IntPtrConstant(Context::STRICT_FUNCTION_MAP_INDEX), |
| 2588 assembler->IntPtrConstant(Context::SLOPPY_FUNCTION_MAP_INDEX))); | 2591 assembler->IntPtrConstant(Context::SLOPPY_FUNCTION_MAP_INDEX))); |
| 2589 assembler->Goto(&load_map); | 2592 assembler->Goto(&load_map); |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3319 | 3322 |
| 3320 if (type == MachineType::Pointer()) { | 3323 if (type == MachineType::Pointer()) { |
| 3321 return Representation::External(); | 3324 return Representation::External(); |
| 3322 } | 3325 } |
| 3323 | 3326 |
| 3324 return Representation::Tagged(); | 3327 return Representation::Tagged(); |
| 3325 } | 3328 } |
| 3326 | 3329 |
| 3327 } // namespace internal | 3330 } // namespace internal |
| 3328 } // namespace v8 | 3331 } // namespace v8 |
| OLD | NEW |