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

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

Issue 2801683003: MIPS[64]: Support for some SIMD operations (8) (Closed)
Patch Set: 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 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 break; 271 break;
272 case MachineRepresentation::kWord16: 272 case MachineRepresentation::kWord16:
273 opcode = load_rep.IsUnsigned() ? kMipsLhu : kMipsLh; 273 opcode = load_rep.IsUnsigned() ? kMipsLhu : kMipsLh;
274 break; 274 break;
275 case MachineRepresentation::kTaggedSigned: // Fall through. 275 case MachineRepresentation::kTaggedSigned: // Fall through.
276 case MachineRepresentation::kTaggedPointer: // Fall through. 276 case MachineRepresentation::kTaggedPointer: // Fall through.
277 case MachineRepresentation::kTagged: // Fall through. 277 case MachineRepresentation::kTagged: // Fall through.
278 case MachineRepresentation::kWord32: 278 case MachineRepresentation::kWord32:
279 opcode = kMipsLw; 279 opcode = kMipsLw;
280 break; 280 break;
281 case MachineRepresentation::kSimd128:
282 opcode = kMipsMsaLd;
283 break;
281 case MachineRepresentation::kWord64: // Fall through. 284 case MachineRepresentation::kWord64: // Fall through.
282 case MachineRepresentation::kSimd128: // Fall through.
283 case MachineRepresentation::kSimd1x4: // Fall through. 285 case MachineRepresentation::kSimd1x4: // Fall through.
284 case MachineRepresentation::kSimd1x8: // Fall through. 286 case MachineRepresentation::kSimd1x8: // Fall through.
285 case MachineRepresentation::kSimd1x16: // Fall through. 287 case MachineRepresentation::kSimd1x16: // Fall through.
286 case MachineRepresentation::kNone: 288 case MachineRepresentation::kNone:
287 UNREACHABLE(); 289 UNREACHABLE();
288 return; 290 return;
289 } 291 }
290 292
291 if (g.CanBeImmediate(index, opcode)) { 293 if (g.CanBeImmediate(index, opcode)) {
292 Emit(opcode | AddressingModeField::encode(kMode_MRI), 294 Emit(opcode | AddressingModeField::encode(kMode_MRI),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 break; 361 break;
360 case MachineRepresentation::kWord16: 362 case MachineRepresentation::kWord16:
361 opcode = kMipsSh; 363 opcode = kMipsSh;
362 break; 364 break;
363 case MachineRepresentation::kTaggedSigned: // Fall through. 365 case MachineRepresentation::kTaggedSigned: // Fall through.
364 case MachineRepresentation::kTaggedPointer: // Fall through. 366 case MachineRepresentation::kTaggedPointer: // Fall through.
365 case MachineRepresentation::kTagged: // Fall through. 367 case MachineRepresentation::kTagged: // Fall through.
366 case MachineRepresentation::kWord32: 368 case MachineRepresentation::kWord32:
367 opcode = kMipsSw; 369 opcode = kMipsSw;
368 break; 370 break;
371 case MachineRepresentation::kSimd128:
372 opcode = kMipsMsaSt;
373 break;
369 case MachineRepresentation::kWord64: // Fall through. 374 case MachineRepresentation::kWord64: // Fall through.
370 case MachineRepresentation::kSimd128: // Fall through.
371 case MachineRepresentation::kSimd1x4: // Fall through. 375 case MachineRepresentation::kSimd1x4: // Fall through.
372 case MachineRepresentation::kSimd1x8: // Fall through. 376 case MachineRepresentation::kSimd1x8: // Fall through.
373 case MachineRepresentation::kSimd1x16: // Fall through. 377 case MachineRepresentation::kSimd1x16: // Fall through.
374 case MachineRepresentation::kNone: 378 case MachineRepresentation::kNone:
375 UNREACHABLE(); 379 UNREACHABLE();
376 return; 380 return;
377 } 381 }
378 382
379 if (g.CanBeImmediate(index, opcode)) { 383 if (g.CanBeImmediate(index, opcode)) {
380 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 384 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 case MachineRepresentation::kTagged: // Fall through. 1215 case MachineRepresentation::kTagged: // Fall through.
1212 case MachineRepresentation::kWord32: 1216 case MachineRepresentation::kWord32:
1213 opcode = kMipsUlw; 1217 opcode = kMipsUlw;
1214 break; 1218 break;
1215 case MachineRepresentation::kFloat32: 1219 case MachineRepresentation::kFloat32:
1216 opcode = kMipsUlwc1; 1220 opcode = kMipsUlwc1;
1217 break; 1221 break;
1218 case MachineRepresentation::kFloat64: 1222 case MachineRepresentation::kFloat64:
1219 opcode = kMipsUldc1; 1223 opcode = kMipsUldc1;
1220 break; 1224 break;
1225 case MachineRepresentation::kSimd128:
1226 opcode = kMipsMsaLd;
1227 break;
1221 case MachineRepresentation::kWord64: // Fall through. 1228 case MachineRepresentation::kWord64: // Fall through.
1222 case MachineRepresentation::kSimd128: // Fall through.
1223 case MachineRepresentation::kSimd1x4: // Fall through. 1229 case MachineRepresentation::kSimd1x4: // Fall through.
1224 case MachineRepresentation::kSimd1x8: // Fall through. 1230 case MachineRepresentation::kSimd1x8: // Fall through.
1225 case MachineRepresentation::kSimd1x16: // Fall through. 1231 case MachineRepresentation::kSimd1x16: // Fall through.
1226 case MachineRepresentation::kNone: 1232 case MachineRepresentation::kNone:
1227 UNREACHABLE(); 1233 UNREACHABLE();
1228 return; 1234 return;
1229 } 1235 }
1230 1236
1231 if (g.CanBeImmediate(index, opcode)) { 1237 if (g.CanBeImmediate(index, opcode)) {
1232 Emit(opcode | AddressingModeField::encode(kMode_MRI), 1238 Emit(opcode | AddressingModeField::encode(kMode_MRI),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 break; 1270 break;
1265 case MachineRepresentation::kWord16: 1271 case MachineRepresentation::kWord16:
1266 opcode = kMipsUsh; 1272 opcode = kMipsUsh;
1267 break; 1273 break;
1268 case MachineRepresentation::kTaggedSigned: // Fall through. 1274 case MachineRepresentation::kTaggedSigned: // Fall through.
1269 case MachineRepresentation::kTaggedPointer: // Fall through. 1275 case MachineRepresentation::kTaggedPointer: // Fall through.
1270 case MachineRepresentation::kTagged: // Fall through. 1276 case MachineRepresentation::kTagged: // Fall through.
1271 case MachineRepresentation::kWord32: 1277 case MachineRepresentation::kWord32:
1272 opcode = kMipsUsw; 1278 opcode = kMipsUsw;
1273 break; 1279 break;
1280 case MachineRepresentation::kSimd128:
1281 opcode = kMipsMsaSt;
1282 break;
1274 case MachineRepresentation::kWord64: // Fall through. 1283 case MachineRepresentation::kWord64: // Fall through.
1275 case MachineRepresentation::kSimd128: // Fall through.
1276 case MachineRepresentation::kSimd1x4: // Fall through. 1284 case MachineRepresentation::kSimd1x4: // Fall through.
1277 case MachineRepresentation::kSimd1x8: // Fall through. 1285 case MachineRepresentation::kSimd1x8: // Fall through.
1278 case MachineRepresentation::kSimd1x16: // Fall through. 1286 case MachineRepresentation::kSimd1x16: // Fall through.
1279 case MachineRepresentation::kNone: 1287 case MachineRepresentation::kNone:
1280 UNREACHABLE(); 1288 UNREACHABLE();
1281 return; 1289 return;
1282 } 1290 }
1283 1291
1284 if (g.CanBeImmediate(index, opcode)) { 1292 if (g.CanBeImmediate(index, opcode)) {
1285 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 1293 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
1968 } 1976 }
1969 1977
1970 void InstructionSelector::VisitF32x4SConvertI32x4(Node* node) { 1978 void InstructionSelector::VisitF32x4SConvertI32x4(Node* node) {
1971 VisitRR(this, kMipsF32x4SConvertI32x4, node); 1979 VisitRR(this, kMipsF32x4SConvertI32x4, node);
1972 } 1980 }
1973 1981
1974 void InstructionSelector::VisitF32x4UConvertI32x4(Node* node) { 1982 void InstructionSelector::VisitF32x4UConvertI32x4(Node* node) {
1975 VisitRR(this, kMipsF32x4UConvertI32x4, node); 1983 VisitRR(this, kMipsF32x4UConvertI32x4, node);
1976 } 1984 }
1977 1985
1986 void InstructionSelector::VisitS1x4And(Node* node) {
1987 VisitRRR(this, kMipsS128And, node);
1988 }
1989
1990 void InstructionSelector::VisitS1x4Or(Node* node) {
1991 VisitRRR(this, kMipsS128Or, node);
1992 }
1993
1994 void InstructionSelector::VisitS1x4Xor(Node* node) {
1995 VisitRRR(this, kMipsS128Xor, node);
1996 }
1997
1998 void InstructionSelector::VisitS1x4Not(Node* node) {
1999 VisitRR(this, kMipsS128Not, node);
2000 }
2001
2002 void InstructionSelector::VisitS1x4AnyTrue(Node* node) {
2003 VisitRR(this, kMipsS1x4AnyTrue, node);
2004 }
2005
2006 void InstructionSelector::VisitS1x4AllTrue(Node* node) {
2007 VisitRR(this, kMipsS1x4AllTrue, node);
2008 }
2009
2010 void InstructionSelector::VisitS1x8And(Node* node) {
2011 VisitRRR(this, kMipsS128And, node);
2012 }
2013
2014 void InstructionSelector::VisitS1x8Or(Node* node) {
2015 VisitRRR(this, kMipsS128Or, node);
2016 }
2017
2018 void InstructionSelector::VisitS1x8Xor(Node* node) {
2019 VisitRRR(this, kMipsS128Xor, node);
2020 }
2021
2022 void InstructionSelector::VisitS1x8Not(Node* node) {
2023 VisitRR(this, kMipsS128Not, node);
2024 }
2025
2026 void InstructionSelector::VisitS1x8AnyTrue(Node* node) {
2027 VisitRR(this, kMipsS1x8AnyTrue, node);
2028 }
2029
2030 void InstructionSelector::VisitS1x8AllTrue(Node* node) {
2031 VisitRR(this, kMipsS1x8AllTrue, node);
2032 }
2033
2034 void InstructionSelector::VisitS1x16And(Node* node) {
2035 VisitRRR(this, kMipsS128And, node);
2036 }
2037
2038 void InstructionSelector::VisitS1x16Or(Node* node) {
2039 VisitRRR(this, kMipsS128Or, node);
2040 }
2041
2042 void InstructionSelector::VisitS1x16Xor(Node* node) {
2043 VisitRRR(this, kMipsS128Xor, node);
2044 }
2045
2046 void InstructionSelector::VisitS1x16Not(Node* node) {
2047 VisitRR(this, kMipsS128Not, node);
2048 }
2049
2050 void InstructionSelector::VisitS1x16AnyTrue(Node* node) {
2051 VisitRR(this, kMipsS1x16AnyTrue, node);
2052 }
2053
2054 void InstructionSelector::VisitS1x16AllTrue(Node* node) {
2055 VisitRR(this, kMipsS1x16AllTrue, node);
2056 }
2057
1978 // static 2058 // static
1979 MachineOperatorBuilder::Flags 2059 MachineOperatorBuilder::Flags
1980 InstructionSelector::SupportedMachineOperatorFlags() { 2060 InstructionSelector::SupportedMachineOperatorFlags() {
1981 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 2061 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
1982 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && 2062 if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) &&
1983 IsFp64Mode()) { 2063 IsFp64Mode()) {
1984 flags |= MachineOperatorBuilder::kFloat64RoundDown | 2064 flags |= MachineOperatorBuilder::kFloat64RoundDown |
1985 MachineOperatorBuilder::kFloat64RoundUp | 2065 MachineOperatorBuilder::kFloat64RoundUp |
1986 MachineOperatorBuilder::kFloat64RoundTruncate | 2066 MachineOperatorBuilder::kFloat64RoundTruncate |
1987 MachineOperatorBuilder::kFloat64RoundTiesEven; 2067 MachineOperatorBuilder::kFloat64RoundTiesEven;
(...skipping 22 matching lines...) Expand all
2010 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || 2090 DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) ||
2011 IsMipsArchVariant(kMips32r2)); 2091 IsMipsArchVariant(kMips32r2));
2012 return MachineOperatorBuilder::AlignmentRequirements:: 2092 return MachineOperatorBuilder::AlignmentRequirements::
2013 NoUnalignedAccessSupport(); 2093 NoUnalignedAccessSupport();
2014 } 2094 }
2015 } 2095 }
2016 2096
2017 } // namespace compiler 2097 } // namespace compiler
2018 } // namespace internal 2098 } // namespace internal
2019 } // namespace v8 2099 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698