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 1827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1838 &bailout); | 1838 &bailout); |
1839 assembler->Goto(&divisor_is_not_minus_one); | 1839 assembler->Goto(&divisor_is_not_minus_one); |
1840 } | 1840 } |
1841 assembler->Bind(&divisor_is_not_minus_one); | 1841 assembler->Bind(&divisor_is_not_minus_one); |
1842 | 1842 |
1843 // TODO(epertoso): consider adding a machine instruction that returns | 1843 // TODO(epertoso): consider adding a machine instruction that returns |
1844 // both the result and the remainder. | 1844 // both the result and the remainder. |
1845 Node* untagged_result = | 1845 Node* untagged_result = |
1846 assembler->Int32Div(untagged_dividend, untagged_divisor); | 1846 assembler->Int32Div(untagged_dividend, untagged_divisor); |
1847 Node* truncated = | 1847 Node* truncated = |
1848 assembler->IntPtrMul(untagged_result, untagged_divisor); | 1848 assembler->Int32Mul(untagged_result, untagged_divisor); |
1849 // Do floating point division if the remainder is not 0. | 1849 // Do floating point division if the remainder is not 0. |
1850 assembler->GotoIf( | 1850 assembler->GotoIf( |
1851 assembler->Word32NotEqual(untagged_dividend, truncated), &bailout); | 1851 assembler->Word32NotEqual(untagged_dividend, truncated), &bailout); |
1852 var_result.Bind(assembler->SmiTag(untagged_result)); | 1852 var_result.Bind(assembler->SmiTag(untagged_result)); |
1853 assembler->Goto(&end); | 1853 assembler->Goto(&end); |
1854 | 1854 |
1855 // Bailout: convert {dividend} and {divisor} to double and do double | 1855 // Bailout: convert {dividend} and {divisor} to double and do double |
1856 // division. | 1856 // division. |
1857 assembler->Bind(&bailout); | 1857 assembler->Bind(&bailout); |
1858 { | 1858 { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2041 untagged_dividend, | 2041 untagged_dividend, |
2042 assembler->Int32Constant(kSmiValueSize == 32 ? kMinInt | 2042 assembler->Int32Constant(kSmiValueSize == 32 ? kMinInt |
2043 : (kMinInt >> 1))), | 2043 : (kMinInt >> 1))), |
2044 &bailout); | 2044 &bailout); |
2045 assembler->Goto(&divisor_is_not_minus_one); | 2045 assembler->Goto(&divisor_is_not_minus_one); |
2046 } | 2046 } |
2047 assembler->Bind(&divisor_is_not_minus_one); | 2047 assembler->Bind(&divisor_is_not_minus_one); |
2048 | 2048 |
2049 Node* untagged_result = | 2049 Node* untagged_result = |
2050 assembler->Int32Div(untagged_dividend, untagged_divisor); | 2050 assembler->Int32Div(untagged_dividend, untagged_divisor); |
2051 Node* truncated = assembler->IntPtrMul(untagged_result, untagged_divisor); | 2051 Node* truncated = assembler->Int32Mul(untagged_result, untagged_divisor); |
2052 // Do floating point division if the remainder is not 0. | 2052 // Do floating point division if the remainder is not 0. |
2053 assembler->GotoIf(assembler->Word32NotEqual(untagged_dividend, truncated), | 2053 assembler->GotoIf(assembler->Word32NotEqual(untagged_dividend, truncated), |
2054 &bailout); | 2054 &bailout); |
2055 var_type_feedback.Bind( | 2055 var_type_feedback.Bind( |
2056 assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall)); | 2056 assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall)); |
2057 var_result.Bind(assembler->SmiTag(untagged_result)); | 2057 var_result.Bind(assembler->SmiTag(untagged_result)); |
2058 assembler->Goto(&end); | 2058 assembler->Goto(&end); |
2059 | 2059 |
2060 // Bailout: convert {dividend} and {divisor} to double and do double | 2060 // Bailout: convert {dividend} and {divisor} to double and do double |
2061 // division. | 2061 // division. |
(...skipping 3835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5897 | 5897 |
5898 if (type == MachineType::Pointer()) { | 5898 if (type == MachineType::Pointer()) { |
5899 return Representation::External(); | 5899 return Representation::External(); |
5900 } | 5900 } |
5901 | 5901 |
5902 return Representation::Tagged(); | 5902 return Representation::Tagged(); |
5903 } | 5903 } |
5904 | 5904 |
5905 } // namespace internal | 5905 } // namespace internal |
5906 } // namespace v8 | 5906 } // namespace v8 |
OLD | NEW |