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

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

Issue 2753903004: MIPS[64]: Support for some SIMD operations (Closed)
Patch Set: Fixed Int32x4ReplaceLane Created 3 years, 9 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 1735 matching lines...) Expand 10 before | Expand all | Expand 10 after
1884 addr_reg, g.TempImmediate(0), g.UseRegisterOrImmediateZero(value)); 1900 addr_reg, g.TempImmediate(0), g.UseRegisterOrImmediateZero(value));
1885 } 1901 }
1886 } 1902 }
1887 1903
1888 void InstructionSelector::VisitAtomicExchange(Node* node) { UNIMPLEMENTED(); } 1904 void InstructionSelector::VisitAtomicExchange(Node* node) { UNIMPLEMENTED(); }
1889 1905
1890 void InstructionSelector::VisitAtomicCompareExchange(Node* node) { 1906 void InstructionSelector::VisitAtomicCompareExchange(Node* node) {
1891 UNIMPLEMENTED(); 1907 UNIMPLEMENTED();
1892 } 1908 }
1893 1909
1910 void InstructionSelector::VisitInt32x4Splat(Node* node) {
1911 VisitRR(this, kMipsInt32x4Splat, node);
1912 }
1913
1914 void InstructionSelector::VisitInt32x4ExtractLane(Node* node) {
1915 VisitRRI(this, kMipsInt32x4ExtractLane, node);
1916 }
1917
1918 void InstructionSelector::VisitInt32x4ReplaceLane(Node* node) {
1919 VisitRRIR(this, kMipsInt32x4ReplaceLane, node);
1920 }
1921
1922 void InstructionSelector::VisitInt32x4Add(Node* node) {
1923 VisitRRR(this, kMipsInt32x4Add, node);
1924 }
1925
1926 void InstructionSelector::VisitInt32x4Sub(Node* node) {
1927 VisitRRR(this, kMipsInt32x4Sub, node);
1928 }
1929
1930 void InstructionSelector::VisitSimd128Zero(Node* node) {
1931 MipsOperandGenerator g(this);
1932 Emit(kMipsSimd128Zero, g.DefineSameAsFirst(node));
1933 }
1934
1935 void InstructionSelector::VisitSimd1x4Zero(Node* node) {
1936 MipsOperandGenerator g(this);
1937 Emit(kMipsSimd128Zero, g.DefineSameAsFirst(node));
1938 }
1939
1940 void InstructionSelector::VisitSimd1x8Zero(Node* node) {
1941 MipsOperandGenerator g(this);
1942 Emit(kMipsSimd128Zero, g.DefineSameAsFirst(node));
1943 }
1944
1945 void InstructionSelector::VisitSimd1x16Zero(Node* node) {
1946 MipsOperandGenerator g(this);
1947 Emit(kMipsSimd128Zero, g.DefineSameAsFirst(node));
1948 }
1949
1894 // static 1950 // static
1895 MachineOperatorBuilder::Flags 1951 MachineOperatorBuilder::Flags
1896 InstructionSelector::SupportedMachineOperatorFlags() { 1952 InstructionSelector::SupportedMachineOperatorFlags() {
1897 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 1953 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
1898 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && 1954 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) &&
1899 IsFp64Mode()) { 1955 IsFp64Mode()) {
1900 flags |= MachineOperatorBuilder::kFloat64RoundDown | 1956 flags |= MachineOperatorBuilder::kFloat64RoundDown |
1901 MachineOperatorBuilder::kFloat64RoundUp | 1957 MachineOperatorBuilder::kFloat64RoundUp |
1902 MachineOperatorBuilder::kFloat64RoundTruncate | 1958 MachineOperatorBuilder::kFloat64RoundTruncate |
1903 MachineOperatorBuilder::kFloat64RoundTiesEven; 1959 MachineOperatorBuilder::kFloat64RoundTiesEven;
(...skipping 22 matching lines...) Expand all
1926 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || 1982 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) ||
1927 IsMipsArchVariant(kMips32r2)); 1983 IsMipsArchVariant(kMips32r2));
1928 return MachineOperatorBuilder::AlignmentRequirements:: 1984 return MachineOperatorBuilder::AlignmentRequirements::
1929 NoUnalignedAccessSupport(); 1985 NoUnalignedAccessSupport();
1930 } 1986 }
1931 } 1987 }
1932 1988
1933 } // namespace compiler 1989 } // namespace compiler
1934 } // namespace internal 1990 } // namespace internal
1935 } // namespace v8 1991 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698