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

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

Issue 770183002: [ia32] 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
« no previous file with comments | « src/compiler/ia32/instruction-codes-ia32.h ('k') | src/ia32/assembler-ia32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/instruction-selector-impl.h" 5 #include "src/compiler/instruction-selector-impl.h"
6 #include "src/compiler/node-matchers.h" 6 #include "src/compiler/node-matchers.h"
7 #include "src/compiler/node-properties-inl.h" 7 #include "src/compiler/node-properties-inl.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 730
731 731
732 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { 732 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) {
733 IA32OperandGenerator g(this); 733 IA32OperandGenerator g(this);
734 Emit(kSSECvtsd2ss, g.DefineAsRegister(node), g.Use(node->InputAt(0))); 734 Emit(kSSECvtsd2ss, g.DefineAsRegister(node), g.Use(node->InputAt(0)));
735 } 735 }
736 736
737 737
738 void InstructionSelector::VisitFloat64Add(Node* node) { 738 void InstructionSelector::VisitFloat64Add(Node* node) {
739 IA32OperandGenerator g(this); 739 IA32OperandGenerator g(this);
740 Emit(kSSEFloat64Add, g.DefineSameAsFirst(node), 740 if (IsSupported(AVX)) {
741 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); 741 Emit(kAVXFloat64Add, g.DefineAsRegister(node),
742 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
743 } else {
744 Emit(kSSEFloat64Add, g.DefineSameAsFirst(node),
745 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
746 }
742 } 747 }
743 748
744 749
745 void InstructionSelector::VisitFloat64Sub(Node* node) { 750 void InstructionSelector::VisitFloat64Sub(Node* node) {
746 IA32OperandGenerator g(this); 751 IA32OperandGenerator g(this);
747 Emit(kSSEFloat64Sub, g.DefineSameAsFirst(node), 752 if (IsSupported(AVX)) {
748 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); 753 Emit(kAVXFloat64Sub, g.DefineAsRegister(node),
754 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
755 } else {
756 Emit(kSSEFloat64Sub, g.DefineSameAsFirst(node),
757 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
758 }
749 } 759 }
750 760
751 761
752 void InstructionSelector::VisitFloat64Mul(Node* node) { 762 void InstructionSelector::VisitFloat64Mul(Node* node) {
753 IA32OperandGenerator g(this); 763 IA32OperandGenerator g(this);
754 Emit(kSSEFloat64Mul, g.DefineSameAsFirst(node), 764 if (IsSupported(AVX)) {
755 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); 765 Emit(kAVXFloat64Mul, g.DefineAsRegister(node),
766 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
767 } else {
768 Emit(kSSEFloat64Mul, g.DefineSameAsFirst(node),
769 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
770 }
756 } 771 }
757 772
758 773
759 void InstructionSelector::VisitFloat64Div(Node* node) { 774 void InstructionSelector::VisitFloat64Div(Node* node) {
760 IA32OperandGenerator g(this); 775 IA32OperandGenerator g(this);
761 Emit(kSSEFloat64Div, g.DefineSameAsFirst(node), 776 if (IsSupported(AVX)) {
762 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1))); 777 Emit(kAVXFloat64Div, g.DefineAsRegister(node),
778 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
779 } else {
780 Emit(kSSEFloat64Div, g.DefineSameAsFirst(node),
781 g.UseRegister(node->InputAt(0)), g.Use(node->InputAt(1)));
782 }
763 } 783 }
764 784
765 785
766 void InstructionSelector::VisitFloat64Mod(Node* node) { 786 void InstructionSelector::VisitFloat64Mod(Node* node) {
767 IA32OperandGenerator g(this); 787 IA32OperandGenerator g(this);
768 InstructionOperand* temps[] = {g.TempRegister(eax)}; 788 InstructionOperand* temps[] = {g.TempRegister(eax)};
769 Emit(kSSEFloat64Mod, g.DefineSameAsFirst(node), 789 Emit(kSSEFloat64Mod, g.DefineSameAsFirst(node),
770 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), 1, 790 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), 1,
771 temps); 791 temps);
772 } 792 }
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 return MachineOperatorBuilder::kFloat64Floor | 1106 return MachineOperatorBuilder::kFloat64Floor |
1087 MachineOperatorBuilder::kFloat64Ceil | 1107 MachineOperatorBuilder::kFloat64Ceil |
1088 MachineOperatorBuilder::kFloat64RoundTruncate | 1108 MachineOperatorBuilder::kFloat64RoundTruncate |
1089 MachineOperatorBuilder::kWord32ShiftIsSafe; 1109 MachineOperatorBuilder::kWord32ShiftIsSafe;
1090 } 1110 }
1091 return MachineOperatorBuilder::Flag::kNoFlags; 1111 return MachineOperatorBuilder::Flag::kNoFlags;
1092 } 1112 }
1093 } // namespace compiler 1113 } // namespace compiler
1094 } // namespace internal 1114 } // namespace internal
1095 } // namespace v8 1115 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ia32/instruction-codes-ia32.h ('k') | src/ia32/assembler-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698