| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 <cmath> | 5 #include <cmath> |
| 6 #include <functional> | 6 #include <functional> |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/base/utils/random-number-generator.h" | 10 #include "src/base/utils/random-number-generator.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 m.machine()->Uint32Mod(), m.machine()->Uint32MulHigh(), | 65 m.machine()->Uint32Mod(), m.machine()->Uint32MulHigh(), |
| 66 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(), | 66 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(), |
| 67 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()}; | 67 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()}; |
| 68 | 68 |
| 69 for (size_t i = 0; i < arraysize(kOps); ++i) { | 69 for (size_t i = 0; i < arraysize(kOps); ++i) { |
| 70 for (int j = 0; j < 8; j++) { | 70 for (int j = 0; j < 8; j++) { |
| 71 for (int k = 0; k < 8; k++) { | 71 for (int k = 0; k < 8; k++) { |
| 72 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 72 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); |
| 73 Node* a = Int32Input(&m, j); | 73 Node* a = Int32Input(&m, j); |
| 74 Node* b = Int32Input(&m, k); | 74 Node* b = Int32Input(&m, k); |
| 75 m.Return(m.AddNode(kOps[i], a, b)); | 75 m.Return(m.NewNode(kOps[i], a, b)); |
| 76 m.GenerateCode(); | 76 m.GenerateCode(); |
| 77 } | 77 } |
| 78 } | 78 } |
| 79 } | 79 } |
| 80 } | 80 } |
| 81 | 81 |
| 82 | 82 |
| 83 TEST(CodeGenNop) { | 83 TEST(CodeGenNop) { |
| 84 RawMachineAssemblerTester<void> m; | 84 RawMachineAssemblerTester<void> m; |
| 85 m.Return(m.Int32Constant(0)); | 85 m.Return(m.Int32Constant(0)); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 m.machine()->Uint64Mod(), m.machine()->Int64LessThan(), | 125 m.machine()->Uint64Mod(), m.machine()->Int64LessThan(), |
| 126 m.machine()->Int64LessThanOrEqual(), m.machine()->Uint64LessThan(), | 126 m.machine()->Int64LessThanOrEqual(), m.machine()->Uint64LessThan(), |
| 127 m.machine()->Uint64LessThanOrEqual()}; | 127 m.machine()->Uint64LessThanOrEqual()}; |
| 128 | 128 |
| 129 for (size_t i = 0; i < arraysize(kOps); ++i) { | 129 for (size_t i = 0; i < arraysize(kOps); ++i) { |
| 130 for (int j = 0; j < 8; j++) { | 130 for (int j = 0; j < 8; j++) { |
| 131 for (int k = 0; k < 8; k++) { | 131 for (int k = 0; k < 8; k++) { |
| 132 RawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64); | 132 RawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64); |
| 133 Node* a = Int64Input(&m, j); | 133 Node* a = Int64Input(&m, j); |
| 134 Node* b = Int64Input(&m, k); | 134 Node* b = Int64Input(&m, k); |
| 135 m.Return(m.AddNode(kOps[i], a, b)); | 135 m.Return(m.NewNode(kOps[i], a, b)); |
| 136 m.GenerateCode(); | 136 m.GenerateCode(); |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 } | 140 } |
| 141 | 141 |
| 142 | 142 |
| 143 // TODO(titzer): add tests that run 64-bit integer operations. | 143 // TODO(titzer): add tests that run 64-bit integer operations. |
| 144 #endif // V8_TARGET_ARCH_64_BIT | 144 #endif // V8_TARGET_ARCH_64_BIT |
| 145 | 145 |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 m.Bind(case_labels[i]); | 619 m.Bind(case_labels[i]); |
| 620 results[i] = m.Int32Constant(values[i]); | 620 results[i] = m.Int32Constant(values[i]); |
| 621 m.Goto(&end); | 621 m.Goto(&end); |
| 622 } | 622 } |
| 623 m.Bind(&def); | 623 m.Bind(&def); |
| 624 results[kNumCases] = m.Int32Constant(values[kNumCases]); | 624 results[kNumCases] = m.Int32Constant(values[kNumCases]); |
| 625 m.Goto(&end); | 625 m.Goto(&end); |
| 626 m.Bind(&end); | 626 m.Bind(&end); |
| 627 const int num_results = static_cast<int>(arraysize(results)); | 627 const int num_results = static_cast<int>(arraysize(results)); |
| 628 Node* phi = | 628 Node* phi = |
| 629 m.AddNode(m.common()->Phi(kMachInt32, num_results), num_results, results); | 629 m.NewNode(m.common()->Phi(kMachInt32, num_results), num_results, results); |
| 630 m.Return(phi); | 630 m.Return(phi); |
| 631 | 631 |
| 632 for (size_t i = 0; i < kNumValues; ++i) { | 632 for (size_t i = 0; i < kNumValues; ++i) { |
| 633 CHECK_EQ(values[i], m.Call(static_cast<int>(i))); | 633 CHECK_EQ(values[i], m.Call(static_cast<int>(i))); |
| 634 } | 634 } |
| 635 } | 635 } |
| 636 | 636 |
| 637 | 637 |
| 638 TEST(RunLoadInt32) { | 638 TEST(RunLoadInt32) { |
| 639 RawMachineAssemblerTester<int32_t> m; | 639 RawMachineAssemblerTester<int32_t> m; |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1046 { | 1046 { |
| 1047 RawMachineAssemblerTester<void> m; | 1047 RawMachineAssemblerTester<void> m; |
| 1048 const Operator* shops[] = {m.machine()->Word32Sar(), | 1048 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 1049 m.machine()->Word32Shl(), | 1049 m.machine()->Word32Shl(), |
| 1050 m.machine()->Word32Shr()}; | 1050 m.machine()->Word32Shr()}; |
| 1051 for (size_t n = 0; n < arraysize(shops); n++) { | 1051 for (size_t n = 0; n < arraysize(shops); n++) { |
| 1052 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 1052 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 1053 kMachUint32); | 1053 kMachUint32); |
| 1054 MLabel blocka, blockb; | 1054 MLabel blocka, blockb; |
| 1055 m.Branch(m.Word32Equal(m.Int32Add(m.Parameter(0), | 1055 m.Branch(m.Word32Equal(m.Int32Add(m.Parameter(0), |
| 1056 m.AddNode(shops[n], m.Parameter(1), | 1056 m.NewNode(shops[n], m.Parameter(1), |
| 1057 m.Parameter(2))), | 1057 m.Parameter(2))), |
| 1058 m.Int32Constant(0)), | 1058 m.Int32Constant(0)), |
| 1059 &blocka, &blockb); | 1059 &blocka, &blockb); |
| 1060 m.Bind(&blocka); | 1060 m.Bind(&blocka); |
| 1061 m.Return(m.Int32Constant(constant)); | 1061 m.Return(m.Int32Constant(constant)); |
| 1062 m.Bind(&blockb); | 1062 m.Bind(&blockb); |
| 1063 m.Return(m.Int32Constant(0 - constant)); | 1063 m.Return(m.Int32Constant(0 - constant)); |
| 1064 FOR_UINT32_INPUTS(i) { | 1064 FOR_UINT32_INPUTS(i) { |
| 1065 FOR_INT32_INPUTS(j) { | 1065 FOR_INT32_INPUTS(j) { |
| 1066 FOR_UINT32_SHIFTS(shift) { | 1066 FOR_UINT32_SHIFTS(shift) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 { | 1138 { |
| 1139 RawMachineAssemblerTester<void> m; | 1139 RawMachineAssemblerTester<void> m; |
| 1140 const Operator* shops[] = {m.machine()->Word32Sar(), | 1140 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 1141 m.machine()->Word32Shl(), | 1141 m.machine()->Word32Shl(), |
| 1142 m.machine()->Word32Shr()}; | 1142 m.machine()->Word32Shr()}; |
| 1143 for (size_t n = 0; n < arraysize(shops); n++) { | 1143 for (size_t n = 0; n < arraysize(shops); n++) { |
| 1144 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 1144 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 1145 kMachUint32); | 1145 kMachUint32); |
| 1146 m.Return(m.Word32Equal( | 1146 m.Return(m.Word32Equal( |
| 1147 m.Int32Add(m.Parameter(0), | 1147 m.Int32Add(m.Parameter(0), |
| 1148 m.AddNode(shops[n], m.Parameter(1), m.Parameter(2))), | 1148 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), |
| 1149 m.Int32Constant(0))); | 1149 m.Int32Constant(0))); |
| 1150 FOR_UINT32_INPUTS(i) { | 1150 FOR_UINT32_INPUTS(i) { |
| 1151 FOR_INT32_INPUTS(j) { | 1151 FOR_INT32_INPUTS(j) { |
| 1152 FOR_UINT32_SHIFTS(shift) { | 1152 FOR_UINT32_SHIFTS(shift) { |
| 1153 int32_t right; | 1153 int32_t right; |
| 1154 switch (shops[n]->opcode()) { | 1154 switch (shops[n]->opcode()) { |
| 1155 default: | 1155 default: |
| 1156 UNREACHABLE(); | 1156 UNREACHABLE(); |
| 1157 case IrOpcode::kWord32Sar: | 1157 case IrOpcode::kWord32Sar: |
| 1158 right = *j >> shift; | 1158 right = *j >> shift; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 { | 1383 { |
| 1384 RawMachineAssemblerTester<void> m; | 1384 RawMachineAssemblerTester<void> m; |
| 1385 const Operator* shops[] = {m.machine()->Word32Sar(), | 1385 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 1386 m.machine()->Word32Shl(), | 1386 m.machine()->Word32Shl(), |
| 1387 m.machine()->Word32Shr()}; | 1387 m.machine()->Word32Shr()}; |
| 1388 for (size_t n = 0; n < arraysize(shops); n++) { | 1388 for (size_t n = 0; n < arraysize(shops); n++) { |
| 1389 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 1389 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 1390 kMachUint32); | 1390 kMachUint32); |
| 1391 MLabel blocka, blockb; | 1391 MLabel blocka, blockb; |
| 1392 m.Branch(m.Word32Equal(m.Int32Sub(m.Parameter(0), | 1392 m.Branch(m.Word32Equal(m.Int32Sub(m.Parameter(0), |
| 1393 m.AddNode(shops[n], m.Parameter(1), | 1393 m.NewNode(shops[n], m.Parameter(1), |
| 1394 m.Parameter(2))), | 1394 m.Parameter(2))), |
| 1395 m.Int32Constant(0)), | 1395 m.Int32Constant(0)), |
| 1396 &blocka, &blockb); | 1396 &blocka, &blockb); |
| 1397 m.Bind(&blocka); | 1397 m.Bind(&blocka); |
| 1398 m.Return(m.Int32Constant(constant)); | 1398 m.Return(m.Int32Constant(constant)); |
| 1399 m.Bind(&blockb); | 1399 m.Bind(&blockb); |
| 1400 m.Return(m.Int32Constant(0 - constant)); | 1400 m.Return(m.Int32Constant(0 - constant)); |
| 1401 FOR_UINT32_INPUTS(i) { | 1401 FOR_UINT32_INPUTS(i) { |
| 1402 FOR_INT32_INPUTS(j) { | 1402 FOR_INT32_INPUTS(j) { |
| 1403 FOR_UINT32_SHIFTS(shift) { | 1403 FOR_UINT32_SHIFTS(shift) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 { | 1475 { |
| 1476 RawMachineAssemblerTester<void> m; | 1476 RawMachineAssemblerTester<void> m; |
| 1477 const Operator* shops[] = {m.machine()->Word32Sar(), | 1477 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 1478 m.machine()->Word32Shl(), | 1478 m.machine()->Word32Shl(), |
| 1479 m.machine()->Word32Shr()}; | 1479 m.machine()->Word32Shr()}; |
| 1480 for (size_t n = 0; n < arraysize(shops); n++) { | 1480 for (size_t n = 0; n < arraysize(shops); n++) { |
| 1481 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 1481 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 1482 kMachUint32); | 1482 kMachUint32); |
| 1483 m.Return(m.Word32Equal( | 1483 m.Return(m.Word32Equal( |
| 1484 m.Int32Sub(m.Parameter(0), | 1484 m.Int32Sub(m.Parameter(0), |
| 1485 m.AddNode(shops[n], m.Parameter(1), m.Parameter(2))), | 1485 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), |
| 1486 m.Int32Constant(0))); | 1486 m.Int32Constant(0))); |
| 1487 FOR_UINT32_INPUTS(i) { | 1487 FOR_UINT32_INPUTS(i) { |
| 1488 FOR_INT32_INPUTS(j) { | 1488 FOR_INT32_INPUTS(j) { |
| 1489 FOR_UINT32_SHIFTS(shift) { | 1489 FOR_UINT32_SHIFTS(shift) { |
| 1490 int32_t right; | 1490 int32_t right; |
| 1491 switch (shops[n]->opcode()) { | 1491 switch (shops[n]->opcode()) { |
| 1492 default: | 1492 default: |
| 1493 UNREACHABLE(); | 1493 UNREACHABLE(); |
| 1494 case IrOpcode::kWord32Sar: | 1494 case IrOpcode::kWord32Sar: |
| 1495 right = *j >> shift; | 1495 right = *j >> shift; |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2052 { | 2052 { |
| 2053 RawMachineAssemblerTester<void> m; | 2053 RawMachineAssemblerTester<void> m; |
| 2054 const Operator* shops[] = {m.machine()->Word32Sar(), | 2054 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 2055 m.machine()->Word32Shl(), | 2055 m.machine()->Word32Shl(), |
| 2056 m.machine()->Word32Shr()}; | 2056 m.machine()->Word32Shr()}; |
| 2057 for (size_t n = 0; n < arraysize(shops); n++) { | 2057 for (size_t n = 0; n < arraysize(shops); n++) { |
| 2058 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 2058 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 2059 kMachUint32); | 2059 kMachUint32); |
| 2060 MLabel blocka, blockb; | 2060 MLabel blocka, blockb; |
| 2061 m.Branch(m.Word32Equal(m.Word32And(m.Parameter(0), | 2061 m.Branch(m.Word32Equal(m.Word32And(m.Parameter(0), |
| 2062 m.AddNode(shops[n], m.Parameter(1), | 2062 m.NewNode(shops[n], m.Parameter(1), |
| 2063 m.Parameter(2))), | 2063 m.Parameter(2))), |
| 2064 m.Int32Constant(0)), | 2064 m.Int32Constant(0)), |
| 2065 &blocka, &blockb); | 2065 &blocka, &blockb); |
| 2066 m.Bind(&blocka); | 2066 m.Bind(&blocka); |
| 2067 m.Return(m.Int32Constant(constant)); | 2067 m.Return(m.Int32Constant(constant)); |
| 2068 m.Bind(&blockb); | 2068 m.Bind(&blockb); |
| 2069 m.Return(m.Int32Constant(0 - constant)); | 2069 m.Return(m.Int32Constant(0 - constant)); |
| 2070 FOR_UINT32_INPUTS(i) { | 2070 FOR_UINT32_INPUTS(i) { |
| 2071 FOR_INT32_INPUTS(j) { | 2071 FOR_INT32_INPUTS(j) { |
| 2072 FOR_UINT32_SHIFTS(shift) { | 2072 FOR_UINT32_SHIFTS(shift) { |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2280 { | 2280 { |
| 2281 RawMachineAssemblerTester<void> m; | 2281 RawMachineAssemblerTester<void> m; |
| 2282 const Operator* shops[] = {m.machine()->Word32Sar(), | 2282 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 2283 m.machine()->Word32Shl(), | 2283 m.machine()->Word32Shl(), |
| 2284 m.machine()->Word32Shr()}; | 2284 m.machine()->Word32Shr()}; |
| 2285 for (size_t n = 0; n < arraysize(shops); n++) { | 2285 for (size_t n = 0; n < arraysize(shops); n++) { |
| 2286 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 2286 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 2287 kMachUint32); | 2287 kMachUint32); |
| 2288 MLabel blocka, blockb; | 2288 MLabel blocka, blockb; |
| 2289 m.Branch(m.Word32Equal(m.Word32Or(m.Parameter(0), | 2289 m.Branch(m.Word32Equal(m.Word32Or(m.Parameter(0), |
| 2290 m.AddNode(shops[n], m.Parameter(1), | 2290 m.NewNode(shops[n], m.Parameter(1), |
| 2291 m.Parameter(2))), | 2291 m.Parameter(2))), |
| 2292 m.Int32Constant(0)), | 2292 m.Int32Constant(0)), |
| 2293 &blocka, &blockb); | 2293 &blocka, &blockb); |
| 2294 m.Bind(&blocka); | 2294 m.Bind(&blocka); |
| 2295 m.Return(m.Int32Constant(constant)); | 2295 m.Return(m.Int32Constant(constant)); |
| 2296 m.Bind(&blockb); | 2296 m.Bind(&blockb); |
| 2297 m.Return(m.Int32Constant(0 - constant)); | 2297 m.Return(m.Int32Constant(0 - constant)); |
| 2298 FOR_UINT32_INPUTS(i) { | 2298 FOR_UINT32_INPUTS(i) { |
| 2299 FOR_INT32_INPUTS(j) { | 2299 FOR_INT32_INPUTS(j) { |
| 2300 FOR_UINT32_SHIFTS(shift) { | 2300 FOR_UINT32_SHIFTS(shift) { |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2505 { | 2505 { |
| 2506 RawMachineAssemblerTester<void> m; | 2506 RawMachineAssemblerTester<void> m; |
| 2507 const Operator* shops[] = {m.machine()->Word32Sar(), | 2507 const Operator* shops[] = {m.machine()->Word32Sar(), |
| 2508 m.machine()->Word32Shl(), | 2508 m.machine()->Word32Shl(), |
| 2509 m.machine()->Word32Shr()}; | 2509 m.machine()->Word32Shr()}; |
| 2510 for (size_t n = 0; n < arraysize(shops); n++) { | 2510 for (size_t n = 0; n < arraysize(shops); n++) { |
| 2511 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, | 2511 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, |
| 2512 kMachUint32); | 2512 kMachUint32); |
| 2513 MLabel blocka, blockb; | 2513 MLabel blocka, blockb; |
| 2514 m.Branch(m.Word32Equal(m.Word32Xor(m.Parameter(0), | 2514 m.Branch(m.Word32Equal(m.Word32Xor(m.Parameter(0), |
| 2515 m.AddNode(shops[n], m.Parameter(1), | 2515 m.NewNode(shops[n], m.Parameter(1), |
| 2516 m.Parameter(2))), | 2516 m.Parameter(2))), |
| 2517 m.Int32Constant(0)), | 2517 m.Int32Constant(0)), |
| 2518 &blocka, &blockb); | 2518 &blocka, &blockb); |
| 2519 m.Bind(&blocka); | 2519 m.Bind(&blocka); |
| 2520 m.Return(m.Int32Constant(constant)); | 2520 m.Return(m.Int32Constant(constant)); |
| 2521 m.Bind(&blockb); | 2521 m.Bind(&blockb); |
| 2522 m.Return(m.Int32Constant(0 - constant)); | 2522 m.Return(m.Int32Constant(0 - constant)); |
| 2523 FOR_UINT32_INPUTS(i) { | 2523 FOR_UINT32_INPUTS(i) { |
| 2524 FOR_INT32_INPUTS(j) { | 2524 FOR_INT32_INPUTS(j) { |
| 2525 FOR_UINT32_SHIFTS(shift) { | 2525 FOR_UINT32_SHIFTS(shift) { |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3015 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(), | 3015 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(), |
| 3016 m.machine()->Int32Div(), m.machine()->Uint32Div(), | 3016 m.machine()->Int32Div(), m.machine()->Uint32Div(), |
| 3017 m.machine()->Int32Mod(), m.machine()->Uint32Mod(), | 3017 m.machine()->Int32Mod(), m.machine()->Uint32Mod(), |
| 3018 m.machine()->Uint32MulHigh(), m.machine()->Int32LessThan(), | 3018 m.machine()->Uint32MulHigh(), m.machine()->Int32LessThan(), |
| 3019 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(), | 3019 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(), |
| 3020 m.machine()->Uint32LessThanOrEqual()}; | 3020 m.machine()->Uint32LessThanOrEqual()}; |
| 3021 | 3021 |
| 3022 for (size_t i = 0; i < arraysize(kOps); ++i) { | 3022 for (size_t i = 0; i < arraysize(kOps); ++i) { |
| 3023 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); | 3023 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); |
| 3024 int32_t constant = static_cast<int32_t>(0x55555 + i); | 3024 int32_t constant = static_cast<int32_t>(0x55555 + i); |
| 3025 m.AddNode(kOps[i], m.Parameter(0), m.Parameter(1)); | 3025 m.NewNode(kOps[i], m.Parameter(0), m.Parameter(1)); |
| 3026 m.Return(m.Int32Constant(constant)); | 3026 m.Return(m.Int32Constant(constant)); |
| 3027 | 3027 |
| 3028 CHECK_EQ(constant, m.Call(1, 1)); | 3028 CHECK_EQ(constant, m.Call(1, 1)); |
| 3029 } | 3029 } |
| 3030 } | 3030 } |
| 3031 | 3031 |
| 3032 | 3032 |
| 3033 template <typename Type> | 3033 template <typename Type> |
| 3034 static void RunLoadImmIndex(MachineType rep) { | 3034 static void RunLoadImmIndex(MachineType rep) { |
| 3035 const int kNumElems = 3; | 3035 const int kNumElems = 3; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3130 m.common()->Float32Constant(-1.0f), m.common()->Float32Constant(0.0f), | 3130 m.common()->Float32Constant(-1.0f), m.common()->Float32Constant(0.0f), |
| 3131 m.common()->Float32Constant(0.22f), m.common()->Float32Constant(-1.22f), | 3131 m.common()->Float32Constant(0.22f), m.common()->Float32Constant(-1.22f), |
| 3132 m.common()->Float32Constant(-1.22f), m.common()->Float32Constant(0.22f), | 3132 m.common()->Float32Constant(-1.22f), m.common()->Float32Constant(0.22f), |
| 3133 m.common()->Float32Constant(inf), m.common()->Float32Constant(0.22f), | 3133 m.common()->Float32Constant(inf), m.common()->Float32Constant(0.22f), |
| 3134 m.common()->Float32Constant(inf), m.common()->Float32Constant(-inf), | 3134 m.common()->Float32Constant(inf), m.common()->Float32Constant(-inf), |
| 3135 NULL}; | 3135 NULL}; |
| 3136 | 3136 |
| 3137 for (int i = 0; ops[i] != NULL; i++) { | 3137 for (int i = 0; ops[i] != NULL; i++) { |
| 3138 for (int j = 0; inputs[j] != NULL; j += 2) { | 3138 for (int j = 0; inputs[j] != NULL; j += 2) { |
| 3139 RawMachineAssemblerTester<int32_t> m; | 3139 RawMachineAssemblerTester<int32_t> m; |
| 3140 Node* a = m.AddNode(inputs[j]); | 3140 Node* a = m.NewNode(inputs[j]); |
| 3141 Node* b = m.AddNode(inputs[j + 1]); | 3141 Node* b = m.NewNode(inputs[j + 1]); |
| 3142 Node* binop = m.AddNode(ops[i], a, b); | 3142 Node* binop = m.NewNode(ops[i], a, b); |
| 3143 Node* base = m.PointerConstant(&result); | 3143 Node* base = m.PointerConstant(&result); |
| 3144 Node* zero = m.IntPtrConstant(0); | 3144 Node* zero = m.IntPtrConstant(0); |
| 3145 m.Store(kMachFloat32, base, zero, binop); | 3145 m.Store(kMachFloat32, base, zero, binop); |
| 3146 m.Return(m.Int32Constant(i + j)); | 3146 m.Return(m.Int32Constant(i + j)); |
| 3147 CHECK_EQ(i + j, m.Call()); | 3147 CHECK_EQ(i + j, m.Call()); |
| 3148 } | 3148 } |
| 3149 } | 3149 } |
| 3150 } | 3150 } |
| 3151 | 3151 |
| 3152 | 3152 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3166 m.common()->Float64Constant(-1), m.common()->Float64Constant(0), | 3166 m.common()->Float64Constant(-1), m.common()->Float64Constant(0), |
| 3167 m.common()->Float64Constant(0.22), m.common()->Float64Constant(-1.22), | 3167 m.common()->Float64Constant(0.22), m.common()->Float64Constant(-1.22), |
| 3168 m.common()->Float64Constant(-1.22), m.common()->Float64Constant(0.22), | 3168 m.common()->Float64Constant(-1.22), m.common()->Float64Constant(0.22), |
| 3169 m.common()->Float64Constant(inf), m.common()->Float64Constant(0.22), | 3169 m.common()->Float64Constant(inf), m.common()->Float64Constant(0.22), |
| 3170 m.common()->Float64Constant(inf), m.common()->Float64Constant(-inf), | 3170 m.common()->Float64Constant(inf), m.common()->Float64Constant(-inf), |
| 3171 NULL}; | 3171 NULL}; |
| 3172 | 3172 |
| 3173 for (int i = 0; ops[i] != NULL; i++) { | 3173 for (int i = 0; ops[i] != NULL; i++) { |
| 3174 for (int j = 0; inputs[j] != NULL; j += 2) { | 3174 for (int j = 0; inputs[j] != NULL; j += 2) { |
| 3175 RawMachineAssemblerTester<int32_t> m; | 3175 RawMachineAssemblerTester<int32_t> m; |
| 3176 Node* a = m.AddNode(inputs[j]); | 3176 Node* a = m.NewNode(inputs[j]); |
| 3177 Node* b = m.AddNode(inputs[j + 1]); | 3177 Node* b = m.NewNode(inputs[j + 1]); |
| 3178 Node* binop = m.AddNode(ops[i], a, b); | 3178 Node* binop = m.NewNode(ops[i], a, b); |
| 3179 Node* base = m.PointerConstant(&result); | 3179 Node* base = m.PointerConstant(&result); |
| 3180 Node* zero = m.Int32Constant(0); | 3180 Node* zero = m.Int32Constant(0); |
| 3181 m.Store(kMachFloat64, base, zero, binop); | 3181 m.Store(kMachFloat64, base, zero, binop); |
| 3182 m.Return(m.Int32Constant(i + j)); | 3182 m.Return(m.Int32Constant(i + j)); |
| 3183 CHECK_EQ(i + j, m.Call()); | 3183 CHECK_EQ(i + j, m.Call()); |
| 3184 } | 3184 } |
| 3185 } | 3185 } |
| 3186 } | 3186 } |
| 3187 | 3187 |
| 3188 | 3188 |
| 3189 TEST(RunDeadFloat32Binops) { | 3189 TEST(RunDeadFloat32Binops) { |
| 3190 RawMachineAssemblerTester<int32_t> m; | 3190 RawMachineAssemblerTester<int32_t> m; |
| 3191 | 3191 |
| 3192 const Operator* ops[] = {m.machine()->Float32Add(), m.machine()->Float32Sub(), | 3192 const Operator* ops[] = {m.machine()->Float32Add(), m.machine()->Float32Sub(), |
| 3193 m.machine()->Float32Mul(), m.machine()->Float32Div(), | 3193 m.machine()->Float32Mul(), m.machine()->Float32Div(), |
| 3194 NULL}; | 3194 NULL}; |
| 3195 | 3195 |
| 3196 for (int i = 0; ops[i] != NULL; i++) { | 3196 for (int i = 0; ops[i] != NULL; i++) { |
| 3197 RawMachineAssemblerTester<int32_t> m; | 3197 RawMachineAssemblerTester<int32_t> m; |
| 3198 int constant = 0x53355 + i; | 3198 int constant = 0x53355 + i; |
| 3199 m.AddNode(ops[i], m.Float32Constant(0.1f), m.Float32Constant(1.11f)); | 3199 m.NewNode(ops[i], m.Float32Constant(0.1f), m.Float32Constant(1.11f)); |
| 3200 m.Return(m.Int32Constant(constant)); | 3200 m.Return(m.Int32Constant(constant)); |
| 3201 CHECK_EQ(constant, m.Call()); | 3201 CHECK_EQ(constant, m.Call()); |
| 3202 } | 3202 } |
| 3203 } | 3203 } |
| 3204 | 3204 |
| 3205 | 3205 |
| 3206 TEST(RunDeadFloat64Binops) { | 3206 TEST(RunDeadFloat64Binops) { |
| 3207 RawMachineAssemblerTester<int32_t> m; | 3207 RawMachineAssemblerTester<int32_t> m; |
| 3208 | 3208 |
| 3209 const Operator* ops[] = {m.machine()->Float64Add(), m.machine()->Float64Sub(), | 3209 const Operator* ops[] = {m.machine()->Float64Add(), m.machine()->Float64Sub(), |
| 3210 m.machine()->Float64Mul(), m.machine()->Float64Div(), | 3210 m.machine()->Float64Mul(), m.machine()->Float64Div(), |
| 3211 m.machine()->Float64Mod(), NULL}; | 3211 m.machine()->Float64Mod(), NULL}; |
| 3212 | 3212 |
| 3213 for (int i = 0; ops[i] != NULL; i++) { | 3213 for (int i = 0; ops[i] != NULL; i++) { |
| 3214 RawMachineAssemblerTester<int32_t> m; | 3214 RawMachineAssemblerTester<int32_t> m; |
| 3215 int constant = 0x53355 + i; | 3215 int constant = 0x53355 + i; |
| 3216 m.AddNode(ops[i], m.Float64Constant(0.1), m.Float64Constant(1.11)); | 3216 m.NewNode(ops[i], m.Float64Constant(0.1), m.Float64Constant(1.11)); |
| 3217 m.Return(m.Int32Constant(constant)); | 3217 m.Return(m.Int32Constant(constant)); |
| 3218 CHECK_EQ(constant, m.Call()); | 3218 CHECK_EQ(constant, m.Call()); |
| 3219 } | 3219 } |
| 3220 } | 3220 } |
| 3221 | 3221 |
| 3222 | 3222 |
| 3223 TEST(RunFloat32AddP) { | 3223 TEST(RunFloat32AddP) { |
| 3224 RawMachineAssemblerTester<int32_t> m; | 3224 RawMachineAssemblerTester<int32_t> m; |
| 3225 Float32BinopTester bt(&m); | 3225 Float32BinopTester bt(&m); |
| 3226 | 3226 |
| (...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4282 | 4282 |
| 4283 double nan = std::numeric_limits<double>::quiet_NaN(); | 4283 double nan = std::numeric_limits<double>::quiet_NaN(); |
| 4284 | 4284 |
| 4285 FOR_FLOAT64_INPUTS(i) { | 4285 FOR_FLOAT64_INPUTS(i) { |
| 4286 for (size_t o = 0; o < arraysize(operators); ++o) { | 4286 for (size_t o = 0; o < arraysize(operators); ++o) { |
| 4287 for (int j = 0; j < 2; j++) { | 4287 for (int j = 0; j < 2; j++) { |
| 4288 RawMachineAssemblerTester<int32_t> m; | 4288 RawMachineAssemblerTester<int32_t> m; |
| 4289 Node* a = m.Float64Constant(*i); | 4289 Node* a = m.Float64Constant(*i); |
| 4290 Node* b = m.Float64Constant(nan); | 4290 Node* b = m.Float64Constant(nan); |
| 4291 if (j == 1) std::swap(a, b); | 4291 if (j == 1) std::swap(a, b); |
| 4292 m.Return(m.AddNode(operators[o], a, b)); | 4292 m.Return(m.NewNode(operators[o], a, b)); |
| 4293 CHECK_EQ(0, m.Call()); | 4293 CHECK_EQ(0, m.Call()); |
| 4294 } | 4294 } |
| 4295 } | 4295 } |
| 4296 } | 4296 } |
| 4297 } | 4297 } |
| 4298 | 4298 |
| 4299 | 4299 |
| 4300 TEST(RunFloat64Equal) { | 4300 TEST(RunFloat64Equal) { |
| 4301 double input_a = 0.0; | 4301 double input_a = 0.0; |
| 4302 double input_b = 0.0; | 4302 double input_b = 0.0; |
| (...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5280 #endif // USE_SIMULATOR | 5280 #endif // USE_SIMULATOR |
| 5281 | 5281 |
| 5282 #if V8_TARGET_ARCH_64_BIT | 5282 #if V8_TARGET_ARCH_64_BIT |
| 5283 TEST(RunCheckedLoadInt64) { | 5283 TEST(RunCheckedLoadInt64) { |
| 5284 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL}; | 5284 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL}; |
| 5285 RawMachineAssemblerTester<int64_t> m(kMachInt32); | 5285 RawMachineAssemblerTester<int64_t> m(kMachInt32); |
| 5286 Node* base = m.PointerConstant(buffer); | 5286 Node* base = m.PointerConstant(buffer); |
| 5287 Node* index = m.Parameter(0); | 5287 Node* index = m.Parameter(0); |
| 5288 Node* length = m.Int32Constant(16); | 5288 Node* length = m.Int32Constant(16); |
| 5289 Node* load = | 5289 Node* load = |
| 5290 m.AddNode(m.machine()->CheckedLoad(kMachInt64), base, index, length); | 5290 m.NewNode(m.machine()->CheckedLoad(kMachInt64), base, index, length); |
| 5291 m.Return(load); | 5291 m.Return(load); |
| 5292 | 5292 |
| 5293 CHECK_EQ(buffer[0], m.Call(0)); | 5293 CHECK_EQ(buffer[0], m.Call(0)); |
| 5294 CHECK_EQ(buffer[1], m.Call(8)); | 5294 CHECK_EQ(buffer[1], m.Call(8)); |
| 5295 CHECK_EQ(0, m.Call(16)); | 5295 CHECK_EQ(0, m.Call(16)); |
| 5296 } | 5296 } |
| 5297 | 5297 |
| 5298 | 5298 |
| 5299 TEST(RunCheckedStoreInt64) { | 5299 TEST(RunCheckedStoreInt64) { |
| 5300 const int64_t write = 0x5566778899aabbLL; | 5300 const int64_t write = 0x5566778899aabbLL; |
| 5301 const int64_t before = 0x33bbccddeeff0011LL; | 5301 const int64_t before = 0x33bbccddeeff0011LL; |
| 5302 int64_t buffer[] = {before, before}; | 5302 int64_t buffer[] = {before, before}; |
| 5303 RawMachineAssemblerTester<int32_t> m(kMachInt32); | 5303 RawMachineAssemblerTester<int32_t> m(kMachInt32); |
| 5304 Node* base = m.PointerConstant(buffer); | 5304 Node* base = m.PointerConstant(buffer); |
| 5305 Node* index = m.Parameter(0); | 5305 Node* index = m.Parameter(0); |
| 5306 Node* length = m.Int32Constant(16); | 5306 Node* length = m.Int32Constant(16); |
| 5307 Node* value = m.Int64Constant(write); | 5307 Node* value = m.Int64Constant(write); |
| 5308 Node* store = m.AddNode(m.machine()->CheckedStore(kMachInt64), base, index, | 5308 Node* store = m.NewNode(m.machine()->CheckedStore(kMachInt64), base, index, |
| 5309 length, value); | 5309 length, value); |
| 5310 USE(store); | 5310 USE(store); |
| 5311 m.Return(m.Int32Constant(11)); | 5311 m.Return(m.Int32Constant(11)); |
| 5312 | 5312 |
| 5313 CHECK_EQ(11, m.Call(16)); | 5313 CHECK_EQ(11, m.Call(16)); |
| 5314 CHECK_EQ(before, buffer[0]); | 5314 CHECK_EQ(before, buffer[0]); |
| 5315 CHECK_EQ(before, buffer[1]); | 5315 CHECK_EQ(before, buffer[1]); |
| 5316 | 5316 |
| 5317 CHECK_EQ(11, m.Call(0)); | 5317 CHECK_EQ(11, m.Call(0)); |
| 5318 CHECK_EQ(write, buffer[0]); | 5318 CHECK_EQ(write, buffer[0]); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5381 &output, kMachFloat32, | 5381 &output, kMachFloat32, |
| 5382 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, kMachInt32))); | 5382 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, kMachInt32))); |
| 5383 m.Return(m.Int32Constant(11)); | 5383 m.Return(m.Int32Constant(11)); |
| 5384 FOR_INT32_INPUTS(i) { | 5384 FOR_INT32_INPUTS(i) { |
| 5385 input = *i; | 5385 input = *i; |
| 5386 CHECK_EQ(11, m.Call()); | 5386 CHECK_EQ(11, m.Call()); |
| 5387 float expected = bit_cast<float>(input); | 5387 float expected = bit_cast<float>(input); |
| 5388 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output)); | 5388 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output)); |
| 5389 } | 5389 } |
| 5390 } | 5390 } |
| OLD | NEW |