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-utils.h" | 5 #include "src/builtins/builtins-utils.h" |
6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 var_result.Bind(assembler->CallStub(callable, context, var_lhs.value(), | 928 var_result.Bind(assembler->CallStub(callable, context, var_lhs.value(), |
929 var_rhs.value())); | 929 var_rhs.value())); |
930 assembler->Goto(&end); | 930 assembler->Goto(&end); |
931 } | 931 } |
932 | 932 |
933 assembler->Bind(&do_fadd); | 933 assembler->Bind(&do_fadd); |
934 { | 934 { |
935 Node* lhs_value = var_fadd_lhs.value(); | 935 Node* lhs_value = var_fadd_lhs.value(); |
936 Node* rhs_value = var_fadd_rhs.value(); | 936 Node* rhs_value = var_fadd_rhs.value(); |
937 Node* value = assembler->Float64Add(lhs_value, rhs_value); | 937 Node* value = assembler->Float64Add(lhs_value, rhs_value); |
938 Node* result = assembler->ChangeFloat64ToTagged(value); | 938 Node* result = assembler->AllocateHeapNumberWithValue(value); |
939 var_result.Bind(result); | 939 var_result.Bind(result); |
940 assembler->Goto(&end); | 940 assembler->Goto(&end); |
941 } | 941 } |
942 assembler->Bind(&end); | 942 assembler->Bind(&end); |
943 assembler->Return(var_result.value()); | 943 assembler->Return(var_result.value()); |
944 } | 944 } |
945 | 945 |
946 void Builtins::Generate_Subtract(CodeStubAssembler* assembler) { | 946 void Builtins::Generate_Subtract(CodeStubAssembler* assembler) { |
947 typedef CodeStubAssembler::Label Label; | 947 typedef CodeStubAssembler::Label Label; |
948 typedef compiler::Node Node; | 948 typedef compiler::Node Node; |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 assembler->Goto(&loop); | 1107 assembler->Goto(&loop); |
1108 } | 1108 } |
1109 } | 1109 } |
1110 } | 1110 } |
1111 | 1111 |
1112 assembler->Bind(&do_fsub); | 1112 assembler->Bind(&do_fsub); |
1113 { | 1113 { |
1114 Node* lhs_value = var_fsub_lhs.value(); | 1114 Node* lhs_value = var_fsub_lhs.value(); |
1115 Node* rhs_value = var_fsub_rhs.value(); | 1115 Node* rhs_value = var_fsub_rhs.value(); |
1116 Node* value = assembler->Float64Sub(lhs_value, rhs_value); | 1116 Node* value = assembler->Float64Sub(lhs_value, rhs_value); |
1117 var_result.Bind(assembler->ChangeFloat64ToTagged(value)); | 1117 var_result.Bind(assembler->AllocateHeapNumberWithValue(value)); |
1118 assembler->Goto(&end); | 1118 assembler->Goto(&end); |
1119 } | 1119 } |
1120 assembler->Bind(&end); | 1120 assembler->Bind(&end); |
1121 assembler->Return(var_result.value()); | 1121 assembler->Return(var_result.value()); |
1122 } | 1122 } |
1123 | 1123 |
1124 void Builtins::Generate_Multiply(CodeStubAssembler* assembler) { | 1124 void Builtins::Generate_Multiply(CodeStubAssembler* assembler) { |
1125 typedef CodeStubAssembler::Label Label; | 1125 typedef CodeStubAssembler::Label Label; |
1126 typedef compiler::Node Node; | 1126 typedef compiler::Node Node; |
1127 typedef CodeStubAssembler::Variable Variable; | 1127 typedef CodeStubAssembler::Variable Variable; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 var_lhs.Bind(assembler->CallStub(callable, context, lhs)); | 1259 var_lhs.Bind(assembler->CallStub(callable, context, lhs)); |
1260 assembler->Goto(&loop); | 1260 assembler->Goto(&loop); |
1261 } | 1261 } |
1262 } | 1262 } |
1263 } | 1263 } |
1264 | 1264 |
1265 assembler->Bind(&do_fmul); | 1265 assembler->Bind(&do_fmul); |
1266 { | 1266 { |
1267 Node* value = | 1267 Node* value = |
1268 assembler->Float64Mul(var_lhs_float64.value(), var_rhs_float64.value()); | 1268 assembler->Float64Mul(var_lhs_float64.value(), var_rhs_float64.value()); |
1269 Node* result = assembler->ChangeFloat64ToTagged(value); | 1269 Node* result = assembler->AllocateHeapNumberWithValue(value); |
1270 var_result.Bind(result); | 1270 var_result.Bind(result); |
1271 assembler->Goto(&return_result); | 1271 assembler->Goto(&return_result); |
1272 } | 1272 } |
1273 | 1273 |
1274 assembler->Bind(&return_result); | 1274 assembler->Bind(&return_result); |
1275 assembler->Return(var_result.value()); | 1275 assembler->Return(var_result.value()); |
1276 } | 1276 } |
1277 | 1277 |
1278 void Builtins::Generate_Divide(CodeStubAssembler* assembler) { | 1278 void Builtins::Generate_Divide(CodeStubAssembler* assembler) { |
1279 typedef CodeStubAssembler::Label Label; | 1279 typedef CodeStubAssembler::Label Label; |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1479 var_dividend.Bind(assembler->CallStub(callable, context, dividend)); | 1479 var_dividend.Bind(assembler->CallStub(callable, context, dividend)); |
1480 assembler->Goto(&loop); | 1480 assembler->Goto(&loop); |
1481 } | 1481 } |
1482 } | 1482 } |
1483 } | 1483 } |
1484 | 1484 |
1485 assembler->Bind(&do_fdiv); | 1485 assembler->Bind(&do_fdiv); |
1486 { | 1486 { |
1487 Node* value = assembler->Float64Div(var_dividend_float64.value(), | 1487 Node* value = assembler->Float64Div(var_dividend_float64.value(), |
1488 var_divisor_float64.value()); | 1488 var_divisor_float64.value()); |
1489 var_result.Bind(assembler->ChangeFloat64ToTagged(value)); | 1489 var_result.Bind(assembler->AllocateHeapNumberWithValue(value)); |
1490 assembler->Goto(&end); | 1490 assembler->Goto(&end); |
1491 } | 1491 } |
1492 assembler->Bind(&end); | 1492 assembler->Bind(&end); |
1493 assembler->Return(var_result.value()); | 1493 assembler->Return(var_result.value()); |
1494 } | 1494 } |
1495 | 1495 |
1496 void Builtins::Generate_Modulus(CodeStubAssembler* assembler) { | 1496 void Builtins::Generate_Modulus(CodeStubAssembler* assembler) { |
1497 typedef CodeStubAssembler::Label Label; | 1497 typedef CodeStubAssembler::Label Label; |
1498 typedef compiler::Node Node; | 1498 typedef compiler::Node Node; |
1499 typedef CodeStubAssembler::Variable Variable; | 1499 typedef CodeStubAssembler::Variable Variable; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1637 var_dividend.Bind(assembler->CallStub(callable, context, dividend)); | 1637 var_dividend.Bind(assembler->CallStub(callable, context, dividend)); |
1638 assembler->Goto(&loop); | 1638 assembler->Goto(&loop); |
1639 } | 1639 } |
1640 } | 1640 } |
1641 } | 1641 } |
1642 | 1642 |
1643 assembler->Bind(&do_fmod); | 1643 assembler->Bind(&do_fmod); |
1644 { | 1644 { |
1645 Node* value = assembler->Float64Mod(var_dividend_float64.value(), | 1645 Node* value = assembler->Float64Mod(var_dividend_float64.value(), |
1646 var_divisor_float64.value()); | 1646 var_divisor_float64.value()); |
1647 var_result.Bind(assembler->ChangeFloat64ToTagged(value)); | 1647 var_result.Bind(assembler->AllocateHeapNumberWithValue(value)); |
1648 assembler->Goto(&return_result); | 1648 assembler->Goto(&return_result); |
1649 } | 1649 } |
1650 | 1650 |
1651 assembler->Bind(&return_result); | 1651 assembler->Bind(&return_result); |
1652 assembler->Return(var_result.value()); | 1652 assembler->Return(var_result.value()); |
1653 } | 1653 } |
1654 | 1654 |
1655 void Builtins::Generate_ShiftLeft(CodeStubAssembler* assembler) { | 1655 void Builtins::Generate_ShiftLeft(CodeStubAssembler* assembler) { |
1656 compiler::Node* left = assembler->Parameter(0); | 1656 compiler::Node* left = assembler->Parameter(0); |
1657 compiler::Node* right = assembler->Parameter(1); | 1657 compiler::Node* right = assembler->Parameter(1); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1809 compiler::Node* lhs = assembler->Parameter(0); | 1809 compiler::Node* lhs = assembler->Parameter(0); |
1810 compiler::Node* rhs = assembler->Parameter(1); | 1810 compiler::Node* rhs = assembler->Parameter(1); |
1811 compiler::Node* context = assembler->Parameter(2); | 1811 compiler::Node* context = assembler->Parameter(2); |
1812 | 1812 |
1813 assembler->Return(assembler->StrictEqual(CodeStubAssembler::kNegateResult, | 1813 assembler->Return(assembler->StrictEqual(CodeStubAssembler::kNegateResult, |
1814 lhs, rhs, context)); | 1814 lhs, rhs, context)); |
1815 } | 1815 } |
1816 | 1816 |
1817 } // namespace internal | 1817 } // namespace internal |
1818 } // namespace v8 | 1818 } // namespace v8 |
OLD | NEW |