Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: src/compiler/mips/instruction-selector-mips.cc

Issue 1588383002: MIPS: [turbofan] Implement Word32Ctz, Word64Ctz, Word32Popcnt and Word64Popcnt (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove unneccesary mov instructions Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « src/compiler/mips/instruction-codes-mips.h ('k') | src/compiler/mips64/code-generator-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698