Chromium Code Reviews| 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 (CpuFeatures::IsSupported(AVX)) { |
|
Benedikt Meurer
2014/11/27 14:31:07
Use the IsSupported() from InstructionSelector for
| |
| 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 (CpuFeatures::IsSupported(AVX)) { |
|
Benedikt Meurer
2014/11/27 14:31:07
Use the IsSupported() from InstructionSelector for
| |
| 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 (CpuFeatures::IsSupported(AVX)) { |
|
Benedikt Meurer
2014/11/27 14:31:07
Use the IsSupported() from InstructionSelector for
| |
| 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 (CpuFeatures::IsSupported(AVX)) { |
|
Benedikt Meurer
2014/11/27 14:31:07
Use the IsSupported() from InstructionSelector for
| |
| 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 |