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

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

Issue 2753903004: MIPS[64]: Support for some SIMD operations (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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 } 129 }
130 130
131 131
132 static void VisitRR(InstructionSelector* selector, ArchOpcode opcode, 132 static void VisitRR(InstructionSelector* selector, ArchOpcode opcode,
133 Node* node) { 133 Node* node) {
134 MipsOperandGenerator g(selector); 134 MipsOperandGenerator g(selector);
135 selector->Emit(opcode, g.DefineAsRegister(node), 135 selector->Emit(opcode, g.DefineAsRegister(node),
136 g.UseRegister(node->InputAt(0))); 136 g.UseRegister(node->InputAt(0)));
137 } 137 }
138 138
139 static void VisitRRI(InstructionSelector* selector, ArchOpcode opcode,
140 Node* node) {
141 MipsOperandGenerator g(selector);
142 int32_t imm = OpParameter<int32_t>(node);
143 selector->Emit(opcode, g.DefineAsRegister(node),
144 g.UseRegister(node->InputAt(0)), g.UseImmediate(imm));
145 }
146
147 static void VisitRRIR(InstructionSelector* selector, ArchOpcode opcode,
148 Node* node) {
149 MipsOperandGenerator g(selector);
150 int32_t imm = OpParameter<int32_t>(node);
151 selector->Emit(opcode, g.DefineAsRegister(node),
152 g.UseRegister(node->InputAt(0)), g.UseImmediate(imm),
153 g.UseRegister(node->InputAt(1)));
154 }
139 155
140 static void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, 156 static void VisitRRO(InstructionSelector* selector, ArchOpcode opcode,
141 Node* node) { 157 Node* node) {
142 MipsOperandGenerator g(selector); 158 MipsOperandGenerator g(selector);
143 selector->Emit(opcode, g.DefineAsRegister(node), 159 selector->Emit(opcode, g.DefineAsRegister(node),
144 g.UseRegister(node->InputAt(0)), 160 g.UseRegister(node->InputAt(0)),
145 g.UseOperand(node->InputAt(1), opcode)); 161 g.UseOperand(node->InputAt(1), opcode));
146 } 162 }
147 163
148 bool TryMatchImmediate(InstructionSelector* selector, 164 bool TryMatchImmediate(InstructionSelector* selector,
(...skipping 1743 matching lines...) Expand 10 before | Expand all | Expand 10 after
1892 } 1908 }
1893 1909
1894 void InstructionSelector::VisitInt32AbsWithOverflow(Node* node) { 1910 void InstructionSelector::VisitInt32AbsWithOverflow(Node* node) {
1895 UNREACHABLE(); 1911 UNREACHABLE();
1896 } 1912 }
1897 1913
1898 void InstructionSelector::VisitInt64AbsWithOverflow(Node* node) { 1914 void InstructionSelector::VisitInt64AbsWithOverflow(Node* node) {
1899 UNREACHABLE(); 1915 UNREACHABLE();
1900 } 1916 }
1901 1917
1918 void InstructionSelector::VisitI32x4Splat(Node* node) {
1919 VisitRR(this, kMipsI32x4Splat, node);
1920 }
1921
1922 void InstructionSelector::VisitI32x4ExtractLane(Node* node) {
1923 VisitRRI(this, kMipsI32x4ExtractLane, node);
1924 }
1925
1926 void InstructionSelector::VisitI32x4ReplaceLane(Node* node) {
1927 VisitRRIR(this, kMipsI32x4ReplaceLane, node);
1928 }
1929
1930 void InstructionSelector::VisitI32x4Add(Node* node) {
1931 VisitRRR(this, kMipsI32x4Add, node);
1932 }
1933
1934 void InstructionSelector::VisitI32x4Sub(Node* node) {
1935 VisitRRR(this, kMipsI32x4Sub, node);
1936 }
1937
1938 void InstructionSelector::VisitS128Zero(Node* node) {
1939 MipsOperandGenerator g(this);
1940 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1941 }
1942
1943 void InstructionSelector::VisitS1x4Zero(Node* node) {
1944 MipsOperandGenerator g(this);
1945 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1946 }
1947
1948 void InstructionSelector::VisitS1x8Zero(Node* node) {
1949 MipsOperandGenerator g(this);
1950 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1951 }
1952
1953 void InstructionSelector::VisitS1x16Zero(Node* node) {
1954 MipsOperandGenerator g(this);
1955 Emit(kMipsS128Zero, g.DefineSameAsFirst(node));
1956 }
1957
1902 // static 1958 // static
1903 MachineOperatorBuilder::Flags 1959 MachineOperatorBuilder::Flags
1904 InstructionSelector::SupportedMachineOperatorFlags() { 1960 InstructionSelector::SupportedMachineOperatorFlags() {
1905 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 1961 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
1906 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && 1962 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) &&
1907 IsFp64Mode()) { 1963 IsFp64Mode()) {
1908 flags |= MachineOperatorBuilder::kFloat64RoundDown | 1964 flags |= MachineOperatorBuilder::kFloat64RoundDown |
1909 MachineOperatorBuilder::kFloat64RoundUp | 1965 MachineOperatorBuilder::kFloat64RoundUp |
1910 MachineOperatorBuilder::kFloat64RoundTruncate | 1966 MachineOperatorBuilder::kFloat64RoundTruncate |
1911 MachineOperatorBuilder::kFloat64RoundTiesEven; 1967 MachineOperatorBuilder::kFloat64RoundTiesEven;
(...skipping 22 matching lines...) Expand all
1934 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || 1990 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) ||
1935 IsMipsArchVariant(kMips32r2)); 1991 IsMipsArchVariant(kMips32r2));
1936 return MachineOperatorBuilder::AlignmentRequirements:: 1992 return MachineOperatorBuilder::AlignmentRequirements::
1937 NoUnalignedAccessSupport(); 1993 NoUnalignedAccessSupport();
1938 } 1994 }
1939 } 1995 }
1940 1996
1941 } // namespace compiler 1997 } // namespace compiler
1942 } // namespace internal 1998 } // namespace internal
1943 } // namespace v8 1999 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/mips/instruction-codes-mips.h ('k') | src/compiler/mips64/code-generator-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698