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

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

Issue 764863002: [x64] introduce vex prefix version of float64 arithmetic binop (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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/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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698