| 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/bits.h" | 5 #include "src/base/bits.h" | 
| 6 #include "src/compiler/instruction-selector-impl.h" | 6 #include "src/compiler/instruction-selector-impl.h" | 
| 7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" | 
| 8 | 8 | 
| 9 namespace v8 { | 9 namespace v8 { | 
| 10 namespace internal { | 10 namespace internal { | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 62 | 62 | 
| 63 static void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, | 63 static void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, | 
| 64                      Node* node) { | 64                      Node* node) { | 
| 65   MipsOperandGenerator g(selector); | 65   MipsOperandGenerator g(selector); | 
| 66   selector->Emit(opcode, g.DefineAsRegister(node), | 66   selector->Emit(opcode, g.DefineAsRegister(node), | 
| 67                  g.UseRegister(node->InputAt(0)), | 67                  g.UseRegister(node->InputAt(0)), | 
| 68                  g.UseRegister(node->InputAt(1))); | 68                  g.UseRegister(node->InputAt(1))); | 
| 69 } | 69 } | 
| 70 | 70 | 
| 71 | 71 | 
|  | 72 static void VisitRR(InstructionSelector* selector, ArchOpcode opcode, | 
|  | 73                     Node* node) { | 
|  | 74   MipsOperandGenerator g(selector); | 
|  | 75   selector->Emit(opcode, g.DefineAsRegister(node), | 
|  | 76                  g.UseRegister(node->InputAt(0))); | 
|  | 77 } | 
|  | 78 | 
|  | 79 | 
| 72 static void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, | 80 static void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, | 
| 73                      Node* node) { | 81                      Node* node) { | 
| 74   MipsOperandGenerator g(selector); | 82   MipsOperandGenerator g(selector); | 
| 75   selector->Emit(opcode, g.DefineAsRegister(node), | 83   selector->Emit(opcode, g.DefineAsRegister(node), | 
| 76                  g.UseRegister(node->InputAt(0)), | 84                  g.UseRegister(node->InputAt(0)), | 
| 77                  g.UseOperand(node->InputAt(1), opcode)); | 85                  g.UseOperand(node->InputAt(1), opcode)); | 
| 78 } | 86 } | 
| 79 | 87 | 
| 80 | 88 | 
| 81 static void VisitBinop(InstructionSelector* selector, Node* node, | 89 static void VisitBinop(InstructionSelector* selector, Node* node, | 
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 413        g.UseFixed(node->InputAt(1), f14))->MarkAsCall(); | 421        g.UseFixed(node->InputAt(1), f14))->MarkAsCall(); | 
| 414 } | 422 } | 
| 415 | 423 | 
| 416 | 424 | 
| 417 void InstructionSelector::VisitFloat64Sqrt(Node* node) { | 425 void InstructionSelector::VisitFloat64Sqrt(Node* node) { | 
| 418   MipsOperandGenerator g(this); | 426   MipsOperandGenerator g(this); | 
| 419   Emit(kMipsSqrtD, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | 427   Emit(kMipsSqrtD, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | 
| 420 } | 428 } | 
| 421 | 429 | 
| 422 | 430 | 
| 423 void InstructionSelector::VisitFloat64Floor(Node* node) { UNREACHABLE(); } | 431 void InstructionSelector::VisitFloat64Floor(Node* node) { | 
|  | 432   VisitRR(this, kMipsFloat64Floor, node); | 
|  | 433 } | 
| 424 | 434 | 
| 425 | 435 | 
| 426 void InstructionSelector::VisitFloat64Ceil(Node* node) { UNREACHABLE(); } | 436 void InstructionSelector::VisitFloat64Ceil(Node* node) { | 
|  | 437   VisitRR(this, kMipsFloat64Ceil, node); | 
|  | 438 } | 
| 427 | 439 | 
| 428 | 440 | 
| 429 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { | 441 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { | 
| 430   UNREACHABLE(); | 442   VisitRR(this, kMipsFloat64RoundTruncate, node); | 
| 431 } | 443 } | 
| 432 | 444 | 
| 433 | 445 | 
| 434 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { | 446 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { | 
| 435   UNREACHABLE(); | 447   UNREACHABLE(); | 
| 436 } | 448 } | 
| 437 | 449 | 
| 438 | 450 | 
| 439 void InstructionSelector::VisitCall(Node* node) { | 451 void InstructionSelector::VisitCall(Node* node) { | 
| 440   MipsOperandGenerator g(this); | 452   MipsOperandGenerator g(this); | 
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 799 | 811 | 
| 800 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { | 812 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { | 
| 801   FlagsContinuation cont(kUnorderedLessThanOrEqual, node); | 813   FlagsContinuation cont(kUnorderedLessThanOrEqual, node); | 
| 802   VisitFloat64Compare(this, node, &cont); | 814   VisitFloat64Compare(this, node, &cont); | 
| 803 } | 815 } | 
| 804 | 816 | 
| 805 | 817 | 
| 806 // static | 818 // static | 
| 807 MachineOperatorBuilder::Flags | 819 MachineOperatorBuilder::Flags | 
| 808 InstructionSelector::SupportedMachineOperatorFlags() { | 820 InstructionSelector::SupportedMachineOperatorFlags() { | 
|  | 821   if (IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) { | 
|  | 822     return MachineOperatorBuilder::kFloat64Floor | | 
|  | 823            MachineOperatorBuilder::kFloat64Ceil | | 
|  | 824            MachineOperatorBuilder::kFloat64RoundTruncate; | 
|  | 825   } | 
| 809   return MachineOperatorBuilder::kNoFlags; | 826   return MachineOperatorBuilder::kNoFlags; | 
| 810 } | 827 } | 
| 811 | 828 | 
| 812 }  // namespace compiler | 829 }  // namespace compiler | 
| 813 }  // namespace internal | 830 }  // namespace internal | 
| 814 }  // namespace v8 | 831 }  // namespace v8 | 
| OLD | NEW | 
|---|