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/compiler/generic-node-inl.h" | 5 #include "src/compiler/generic-node-inl.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 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 default: | 729 default: |
730 break; | 730 break; |
731 } | 731 } |
732 } | 732 } |
733 Emit(kX64Movl, g.DefineAsRegister(node), g.Use(value)); | 733 Emit(kX64Movl, g.DefineAsRegister(node), g.Use(value)); |
734 } | 734 } |
735 | 735 |
736 | 736 |
737 void InstructionSelector::VisitFloat64Add(Node* node) { | 737 void InstructionSelector::VisitFloat64Add(Node* node) { |
738 X64OperandGenerator g(this); | 738 X64OperandGenerator g(this); |
739 Emit(kSSEFloat64Add, g.DefineSameAsFirst(node), | 739 if (IsSupported(AVX)) { |
740 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); | 740 Emit(kAVXFloat64Add, g.DefineAsRegister(node), |
| 741 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 742 } else { |
| 743 Emit(kSSEFloat64Add, g.DefineSameAsFirst(node), |
| 744 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 745 } |
741 } | 746 } |
742 | 747 |
743 | 748 |
744 void InstructionSelector::VisitFloat64Sub(Node* node) { | 749 void InstructionSelector::VisitFloat64Sub(Node* node) { |
745 X64OperandGenerator g(this); | 750 X64OperandGenerator g(this); |
746 Emit(kSSEFloat64Sub, g.DefineSameAsFirst(node), | 751 if (IsSupported(AVX)) { |
747 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); | 752 Emit(kAVXFloat64Sub, g.DefineAsRegister(node), |
| 753 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 754 } else { |
| 755 Emit(kSSEFloat64Sub, g.DefineSameAsFirst(node), |
| 756 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 757 } |
748 } | 758 } |
749 | 759 |
750 | 760 |
751 void InstructionSelector::VisitFloat64Mul(Node* node) { | 761 void InstructionSelector::VisitFloat64Mul(Node* node) { |
752 X64OperandGenerator g(this); | 762 X64OperandGenerator g(this); |
753 Emit(kSSEFloat64Mul, g.DefineSameAsFirst(node), | 763 if (IsSupported(AVX)) { |
754 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); | 764 Emit(kAVXFloat64Mul, g.DefineAsRegister(node), |
| 765 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 766 } else { |
| 767 Emit(kSSEFloat64Mul, g.DefineSameAsFirst(node), |
| 768 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 769 } |
755 } | 770 } |
756 | 771 |
757 | 772 |
758 void InstructionSelector::VisitFloat64Div(Node* node) { | 773 void InstructionSelector::VisitFloat64Div(Node* node) { |
759 X64OperandGenerator g(this); | 774 X64OperandGenerator g(this); |
760 Emit(kSSEFloat64Div, g.DefineSameAsFirst(node), | 775 if (IsSupported(AVX)) { |
761 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); | 776 Emit(kAVXFloat64Div, g.DefineAsRegister(node), |
| 777 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 778 } else { |
| 779 Emit(kSSEFloat64Div, g.DefineSameAsFirst(node), |
| 780 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); |
| 781 } |
762 } | 782 } |
763 | 783 |
764 | 784 |
765 void InstructionSelector::VisitFloat64Mod(Node* node) { | 785 void InstructionSelector::VisitFloat64Mod(Node* node) { |
766 X64OperandGenerator g(this); | 786 X64OperandGenerator g(this); |
767 InstructionOperand* temps[] = {g.TempRegister(rax)}; | 787 InstructionOperand* temps[] = {g.TempRegister(rax)}; |
768 Emit(kSSEFloat64Mod, g.DefineSameAsFirst(node), | 788 Emit(kSSEFloat64Mod, g.DefineSameAsFirst(node), |
769 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), 1, | 789 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), 1, |
770 temps); | 790 temps); |
771 } | 791 } |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1200 MachineOperatorBuilder::kFloat64Ceil | | 1220 MachineOperatorBuilder::kFloat64Ceil | |
1201 MachineOperatorBuilder::kFloat64RoundTruncate | | 1221 MachineOperatorBuilder::kFloat64RoundTruncate | |
1202 MachineOperatorBuilder::kWord32ShiftIsSafe; | 1222 MachineOperatorBuilder::kWord32ShiftIsSafe; |
1203 } | 1223 } |
1204 return MachineOperatorBuilder::kNoFlags; | 1224 return MachineOperatorBuilder::kNoFlags; |
1205 } | 1225 } |
1206 | 1226 |
1207 } // namespace compiler | 1227 } // namespace compiler |
1208 } // namespace internal | 1228 } // namespace internal |
1209 } // namespace v8 | 1229 } // namespace v8 |
OLD | NEW |