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 "src/base/adapters.h" | 5 #include "src/base/adapters.h" |
6 #include "src/base/bits.h" | 6 #include "src/base/bits.h" |
7 #include "src/compiler/instruction-selector-impl.h" | 7 #include "src/compiler/instruction-selector-impl.h" |
8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 | 10 |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 void InstructionSelector::VisitWord32Ror(Node* node) { | 394 void InstructionSelector::VisitWord32Ror(Node* node) { |
395 VisitRRO(this, kMipsRor, node); | 395 VisitRRO(this, kMipsRor, node); |
396 } | 396 } |
397 | 397 |
398 | 398 |
399 void InstructionSelector::VisitWord32Clz(Node* node) { | 399 void InstructionSelector::VisitWord32Clz(Node* node) { |
400 VisitRR(this, kMipsClz, node); | 400 VisitRR(this, kMipsClz, node); |
401 } | 401 } |
402 | 402 |
403 | 403 |
404 void InstructionSelector::VisitWord32Ctz(Node* node) { UNREACHABLE(); } | 404 void InstructionSelector::VisitWord32Ctz(Node* node) { |
| 405 MipsOperandGenerator g(this); |
| 406 Emit(kMipsCtz, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); |
| 407 } |
405 | 408 |
406 | 409 |
407 void InstructionSelector::VisitWord32Popcnt(Node* node) { UNREACHABLE(); } | 410 void InstructionSelector::VisitWord32Popcnt(Node* node) { |
| 411 MipsOperandGenerator g(this); |
| 412 Emit(kMipsPopcnt, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); |
| 413 } |
408 | 414 |
409 | 415 |
410 void InstructionSelector::VisitInt32Add(Node* node) { | 416 void InstructionSelector::VisitInt32Add(Node* node) { |
411 MipsOperandGenerator g(this); | 417 MipsOperandGenerator g(this); |
412 | 418 |
413 // TODO(plind): Consider multiply & add optimization from arm port. | 419 // TODO(plind): Consider multiply & add optimization from arm port. |
414 VisitBinop(this, node, kMipsAdd); | 420 VisitBinop(this, node, kMipsAdd); |
415 } | 421 } |
416 | 422 |
417 | 423 |
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 MachineOperatorBuilder::Flags | 1317 MachineOperatorBuilder::Flags |
1312 InstructionSelector::SupportedMachineOperatorFlags() { | 1318 InstructionSelector::SupportedMachineOperatorFlags() { |
1313 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; | 1319 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; |
1314 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && | 1320 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && |
1315 IsFp64Mode()) { | 1321 IsFp64Mode()) { |
1316 flags |= MachineOperatorBuilder::kFloat64RoundDown | | 1322 flags |= MachineOperatorBuilder::kFloat64RoundDown | |
1317 MachineOperatorBuilder::kFloat64RoundUp | | 1323 MachineOperatorBuilder::kFloat64RoundUp | |
1318 MachineOperatorBuilder::kFloat64RoundTruncate | | 1324 MachineOperatorBuilder::kFloat64RoundTruncate | |
1319 MachineOperatorBuilder::kFloat64RoundTiesEven; | 1325 MachineOperatorBuilder::kFloat64RoundTiesEven; |
1320 } | 1326 } |
1321 return flags | MachineOperatorBuilder::kInt32DivIsSafe | | 1327 return flags | MachineOperatorBuilder::kWord32Ctz | |
| 1328 MachineOperatorBuilder::kWord32Popcnt | |
| 1329 MachineOperatorBuilder::kInt32DivIsSafe | |
1322 MachineOperatorBuilder::kUint32DivIsSafe | | 1330 MachineOperatorBuilder::kUint32DivIsSafe | |
1323 MachineOperatorBuilder::kWord32ShiftIsSafe | | 1331 MachineOperatorBuilder::kWord32ShiftIsSafe | |
1324 MachineOperatorBuilder::kFloat64Min | | 1332 MachineOperatorBuilder::kFloat64Min | |
1325 MachineOperatorBuilder::kFloat64Max | | 1333 MachineOperatorBuilder::kFloat64Max | |
1326 MachineOperatorBuilder::kFloat32Min | | 1334 MachineOperatorBuilder::kFloat32Min | |
1327 MachineOperatorBuilder::kFloat32Max | | 1335 MachineOperatorBuilder::kFloat32Max | |
1328 MachineOperatorBuilder::kFloat32RoundDown | | 1336 MachineOperatorBuilder::kFloat32RoundDown | |
1329 MachineOperatorBuilder::kFloat32RoundUp | | 1337 MachineOperatorBuilder::kFloat32RoundUp | |
1330 MachineOperatorBuilder::kFloat32RoundTruncate | | 1338 MachineOperatorBuilder::kFloat32RoundTruncate | |
1331 MachineOperatorBuilder::kFloat32RoundTiesEven; | 1339 MachineOperatorBuilder::kFloat32RoundTiesEven; |
1332 } | 1340 } |
1333 | 1341 |
1334 } // namespace compiler | 1342 } // namespace compiler |
1335 } // namespace internal | 1343 } // namespace internal |
1336 } // namespace v8 | 1344 } // namespace v8 |
OLD | NEW |