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

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

Issue 2780713003: MIPS[64]: Support for some SIMD operations (3) (Closed)
Patch Set: rebased Created 3 years, 8 months 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/base/adapters.h" 5 #include "src/base/adapters.h"
6 #include "src/base/bits.h" 6 #include "src/base/bits.h"
7 #include "src/compiler/instruction-selector-impl.h" 7 #include "src/compiler/instruction-selector-impl.h"
8 #include "src/compiler/node-matchers.h" 8 #include "src/compiler/node-matchers.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 10
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 121
122 122
123 static void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, 123 static void VisitRRR(InstructionSelector* selector, ArchOpcode opcode,
124 Node* node) { 124 Node* node) {
125 MipsOperandGenerator g(selector); 125 MipsOperandGenerator g(selector);
126 selector->Emit(opcode, g.DefineAsRegister(node), 126 selector->Emit(opcode, g.DefineAsRegister(node),
127 g.UseRegister(node->InputAt(0)), 127 g.UseRegister(node->InputAt(0)),
128 g.UseRegister(node->InputAt(1))); 128 g.UseRegister(node->InputAt(1)));
129 } 129 }
130 130
131 void VisitRRRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) {
132 MipsOperandGenerator g(selector);
133 selector->Emit(
134 opcode, g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)),
135 g.UseRegister(node->InputAt(1)), g.UseRegister(node->InputAt(2)));
136 }
131 137
132 static void VisitRR(InstructionSelector* selector, ArchOpcode opcode, 138 static void VisitRR(InstructionSelector* selector, ArchOpcode opcode,
133 Node* node) { 139 Node* node) {
134 MipsOperandGenerator g(selector); 140 MipsOperandGenerator g(selector);
135 selector->Emit(opcode, g.DefineAsRegister(node), 141 selector->Emit(opcode, g.DefineAsRegister(node),
136 g.UseRegister(node->InputAt(0))); 142 g.UseRegister(node->InputAt(0)));
137 } 143 }
138 144
139 static void VisitRRI(InstructionSelector* selector, ArchOpcode opcode, 145 static void VisitRRI(InstructionSelector* selector, ArchOpcode opcode,
140 Node* node) { 146 Node* node) {
(...skipping 1807 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 void InstructionSelector::VisitS1x8Zero(Node* node) { 1954 void InstructionSelector::VisitS1x8Zero(Node* node) {
1949 MipsOperandGenerator g(this); 1955 MipsOperandGenerator g(this);
1950 Emit(kMipsS128Zero, g.DefineSameAsFirst(node)); 1956 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1951 } 1957 }
1952 1958
1953 void InstructionSelector::VisitS1x16Zero(Node* node) { 1959 void InstructionSelector::VisitS1x16Zero(Node* node) {
1954 MipsOperandGenerator g(this); 1960 MipsOperandGenerator g(this);
1955 Emit(kMipsS128Zero, g.DefineSameAsFirst(node)); 1961 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1956 } 1962 }
1957 1963
1964 void InstructionSelector::VisitI32x4Mul(Node* node) {
1965 VisitRRR(this, kMipsI32x4Mul, node);
1966 }
1967
1968 void InstructionSelector::VisitI32x4MaxS(Node* node) {
1969 VisitRRR(this, kMipsI32x4MaxS, node);
1970 }
1971
1972 void InstructionSelector::VisitI32x4MinS(Node* node) {
1973 VisitRRR(this, kMipsI32x4MinS, node);
1974 }
1975
1976 void InstructionSelector::VisitI32x4Eq(Node* node) {
1977 VisitRRR(this, kMipsI32x4Eq, node);
1978 }
1979
1980 void InstructionSelector::VisitI32x4Ne(Node* node) {
1981 VisitRRR(this, kMipsI32x4Ne, node);
1982 }
1983
1984 void InstructionSelector::VisitI32x4Shl(Node* node) {
1985 VisitRRI(this, kMipsI32x4Shl, node);
1986 }
1987
1988 void InstructionSelector::VisitI32x4ShrS(Node* node) {
1989 VisitRRI(this, kMipsI32x4ShrS, node);
1990 }
1991
1992 void InstructionSelector::VisitI32x4ShrU(Node* node) {
1993 VisitRRI(this, kMipsI32x4ShrU, node);
1994 }
1995
1996 void InstructionSelector::VisitI32x4MaxU(Node* node) {
1997 VisitRRR(this, kMipsI32x4MaxU, node);
1998 }
1999
2000 void InstructionSelector::VisitI32x4MinU(Node* node) {
2001 VisitRRR(this, kMipsI32x4MinU, node);
2002 }
2003
2004 void InstructionSelector::VisitS32x4Select(Node* node) {
2005 VisitRRRR(this, kMipsS32x4Select, node);
2006 }
2007
1958 // static 2008 // static
1959 MachineOperatorBuilder::Flags 2009 MachineOperatorBuilder::Flags
1960 InstructionSelector::SupportedMachineOperatorFlags() { 2010 InstructionSelector::SupportedMachineOperatorFlags() {
1961 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 2011 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
1962 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && 2012 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) &&
1963 IsFp64Mode()) { 2013 IsFp64Mode()) {
1964 flags |= MachineOperatorBuilder::kFloat64RoundDown | 2014 flags |= MachineOperatorBuilder::kFloat64RoundDown |
1965 MachineOperatorBuilder::kFloat64RoundUp | 2015 MachineOperatorBuilder::kFloat64RoundUp |
1966 MachineOperatorBuilder::kFloat64RoundTruncate | 2016 MachineOperatorBuilder::kFloat64RoundTruncate |
1967 MachineOperatorBuilder::kFloat64RoundTiesEven; 2017 MachineOperatorBuilder::kFloat64RoundTiesEven;
(...skipping 22 matching lines...) Expand all
1990 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || 2040 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) ||
1991 IsMipsArchVariant(kMips32r2)); 2041 IsMipsArchVariant(kMips32r2));
1992 return MachineOperatorBuilder::AlignmentRequirements:: 2042 return MachineOperatorBuilder::AlignmentRequirements::
1993 NoUnalignedAccessSupport(); 2043 NoUnalignedAccessSupport();
1994 } 2044 }
1995 } 2045 }
1996 2046
1997 } // namespace compiler 2047 } // namespace compiler
1998 } // namespace internal 2048 } // namespace internal
1999 } // namespace v8 2049 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698